mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 19:54:19 +01:00
[dxvk] Support combined image sampler descriptors in the backend
This commit is contained in:
parent
342a483e45
commit
ddde5ee6c2
@ -3331,6 +3331,26 @@ namespace dxvk {
|
||||
m_descInfos[i].image = m_device->dummyImageViewDescriptor(binding.view);
|
||||
} break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
if (res.sampler != nullptr && res.imageView != nullptr
|
||||
&& res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
||||
updatePipelineState |= bindMask.setBound(i);
|
||||
|
||||
m_descInfos[i].image.sampler = res.sampler->handle();
|
||||
m_descInfos[i].image.imageView = res.imageView->handle(binding.view);
|
||||
m_descInfos[i].image.imageLayout = res.imageView->imageInfo().layout;
|
||||
|
||||
if (res.imageView->imageHandle() == depthImage)
|
||||
m_descInfos[i].image.imageLayout = depthLayout;
|
||||
|
||||
m_cmd->trackResource(res.sampler);
|
||||
m_cmd->trackResource(res.imageView);
|
||||
m_cmd->trackResource(res.imageView->image());
|
||||
} else {
|
||||
updatePipelineState |= bindMask.setUnbound(i);
|
||||
m_descInfos[i].image = m_device->dummyImageSamplerDescriptor(binding.view);
|
||||
} break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
if (res.bufferView != nullptr) {
|
||||
@ -3750,6 +3770,7 @@ namespace dxvk {
|
||||
/* fall through */
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
srcAccess = m_barriers.getImageAccess(
|
||||
slot.imageView->image(),
|
||||
slot.imageView->subresources());
|
||||
@ -3824,6 +3845,7 @@ namespace dxvk {
|
||||
/* fall through */
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
m_barriers.accessImage(
|
||||
slot.imageView->image(),
|
||||
slot.imageView->subresources(),
|
||||
|
@ -17,7 +17,7 @@ namespace dxvk {
|
||||
{ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, MaxSets / 8 },
|
||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, MaxSets * 3 },
|
||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, MaxSets / 8 },
|
||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MaxSets / 16 } }};
|
||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MaxSets * 2 } }};
|
||||
|
||||
VkDescriptorPoolCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
|
@ -487,6 +487,16 @@ namespace dxvk {
|
||||
return m_unboundResources.imageViewDescriptor(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Dummy combined image sampler descriptor
|
||||
*
|
||||
* \param [in] type Required view type
|
||||
* \returns Descriptor that points to a dummy image
|
||||
*/
|
||||
VkDescriptorImageInfo dummyImageSamplerDescriptor(VkImageViewType type) const {
|
||||
return m_unboundResources.imageSamplerDescriptor(type);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -78,6 +78,23 @@ namespace dxvk {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Dummy combined image sampler descriptor
|
||||
*
|
||||
* Contains both an image view and a sampler
|
||||
* descriptor for the given image view type.
|
||||
* \returns Dummy image view descriptor
|
||||
*/
|
||||
VkDescriptorImageInfo imageSamplerDescriptor(VkImageViewType type) const {
|
||||
auto view = getImageView(type);
|
||||
|
||||
VkDescriptorImageInfo result;
|
||||
result.sampler = m_sampler->handle();
|
||||
result.imageView = view->handle();
|
||||
result.imageLayout = view->imageInfo().layout;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Dummy image view descriptor
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user