mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 22:54:16 +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);
|
m_descInfos[i].image = m_device->dummyImageViewDescriptor(binding.view);
|
||||||
} break;
|
} 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_UNIFORM_TEXEL_BUFFER:
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||||
if (res.bufferView != nullptr) {
|
if (res.bufferView != nullptr) {
|
||||||
@ -3750,6 +3770,7 @@ namespace dxvk {
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||||
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||||
srcAccess = m_barriers.getImageAccess(
|
srcAccess = m_barriers.getImageAccess(
|
||||||
slot.imageView->image(),
|
slot.imageView->image(),
|
||||||
slot.imageView->subresources());
|
slot.imageView->subresources());
|
||||||
@ -3824,6 +3845,7 @@ namespace dxvk {
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||||
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||||
m_barriers.accessImage(
|
m_barriers.accessImage(
|
||||||
slot.imageView->image(),
|
slot.imageView->image(),
|
||||||
slot.imageView->subresources(),
|
slot.imageView->subresources(),
|
||||||
|
@ -17,7 +17,7 @@ namespace dxvk {
|
|||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, MaxSets / 8 },
|
{ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, MaxSets / 8 },
|
||||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, MaxSets * 3 },
|
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, MaxSets * 3 },
|
||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, MaxSets / 8 },
|
{ 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;
|
VkDescriptorPoolCreateInfo info;
|
||||||
info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||||
|
@ -487,6 +487,16 @@ namespace dxvk {
|
|||||||
return m_unboundResources.imageViewDescriptor(type);
|
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;
|
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
|
* \brief Dummy image view descriptor
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user