1
0
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:
Philip Rebohle 2019-04-03 17:24:04 +02:00
parent 342a483e45
commit ddde5ee6c2
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
4 changed files with 50 additions and 1 deletions

View File

@ -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(),

View File

@ -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;

View File

@ -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);
}
};
}

View File

@ -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
*