[PATCH vkd3d 5/5] vkd3d: Create and write descriptor sets for root signature unbounded ranges.

Giovanni Mascellani gmascellani at codeweavers.com
Thu Oct 7 08:41:05 CDT 2021


Hi,

Il 07/10/21 10:35, Giovanni Mascellani ha scritto:
> The patch is huge and I don't know the code very much, but it causes 
> tests/d3d12 to hang on my NVIDIA Quadro P2000 Mobile card.

I noticed that the same commit introduces some Vulkan validation layer 
errors, which might be related to the crash:

> VUID-VkPipelineLayoutCreateInfo-descriptorType-03017(ERROR / SPEC): msgNum: -1565019798 - Validation Error: [ VUID-VkPipelineLayoutCreateInfo-descriptorType-03017 ] Object 0: handle = 0x562e2b075b88, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xa2b7b16a | vkCreatePipelineLayout(): max per-stage uniform buffer bindings count (1024) exceeds device maxPerStageDescriptorUniformBuffers limit (15). The Vulkan spec states: The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorUniformBuffers (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPipelineLayoutCreateInfo-descriptorType-03017)
>     Objects: 1
>         [0] 0x562e2b075b88, type: 3, name: NULL
> VUID-VkPipelineLayoutCreateInfo-descriptorType-03029(ERROR / SPEC): msgNum: 1530663082 - Validation Error: [ VUID-VkPipelineLayoutCreateInfo-descriptorType-03029 ] Object 0: handle = 0x562e2b075b88, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x5b3c10aa | vkCreatePipelineLayout(): sum of uniform buffer bindings among all stages (1024) exceeds device maxDescriptorSetUniformBuffers limit (90). The Vulkan spec states: The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetUniformBuffers (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPipelineLayoutCreateInfo-descriptorType-03029)
>     Objects: 1
>         [0] 0x562e2b075b88, type: 3, name: NULL
> VUID-VkPipelineLayoutCreateInfo-descriptorType-03023(ERROR / SPEC): msgNum: -227882531 - Validation Error: [ VUID-VkPipelineLayoutCreateInfo-descriptorType-03023 ] Object 0: handle = 0x562e2b075b88, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xf26ac9dd | vkCreatePipelineLayout(): max per-stage uniform buffer bindings count (1024) exceeds device maxPerStageDescriptorUpdateAfterBindUniformBuffers limit (15). The Vulkan spec states: The total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindUniformBuffers (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPipelineLayoutCreateInfo-descriptorType-03023)
>     Objects: 1
>         [0] 0x562e2b075b88, type: 3, name: NULL
> VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037(ERROR / SPEC): msgNum: 1234136343 - Validation Error: [ VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037 ] Object 0: handle = 0x562e2b075b88, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x498f6d17 | vkCreatePipelineLayout(): sum of uniform buffer bindings among all stages (1024) exceeds device maxDescriptorSetUpdateAfterBindUniformBuffers limit (90). The Vulkan spec states: The total number of descriptors of the type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindUniformBuffers (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037)
>     Objects: 1
>         [0] 0x562e2b075b88, type: 3, name: NULL

I think Conor and Henri might be using AMD video cards, for which 
apparently these limits are much higher (e.g. [1]). Unfortunately, it 
seems that it's just AMD which has such high limits. Both Intel and 
NVIDIA (and others) stay more in the dozens ballpark. I don't know how 
hard it would be to reduce that 1024 number. Also, while a hint, it's 
not obvious that these errors are related to the crash (even if it's 
not, it's probably a bug in itself, isn't it?).

  [1] 
https://vulkan.gpuinfo.org/displaydevicelimit.php?name=maxPerStageDescriptorUniformBuffers&platform=all

Giovanni.



More information about the wine-devel mailing list