Skip to content

Pipeline layout and non-descriptor-indexing-supporting Vulkan 1.2 devices #2515

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
marc0246 opened this issue Mar 22, 2025 · 4 comments
Open
Assignees

Comments

@marc0246
Copy link

VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036 (and similar) state:

The total number of descriptors of the type VK_DESCRIPTOR_TYPE_SAMPLER and VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindSamplers

There exist a few Vulkan 1.2 implementations that don't support any of the descriptor indexing features and report 0 for the above (and similar) limits.

Now the question is, which one is true?

  • The spec means to say that such a limit only applies if the corresponding feature is supported/enabled, in which case our own validation as well as the validation layers are not compliant.
  • The spec means what it says, in which case the implementations are supposed to report UINT32_MAX instead of 0 for such a limit.

The latter option seems strange to me personally, because logically speaking, I don't see a difference between descriptor indexing with no supported features vs. the extension not being supported at all. In any case, with these devices as it stands, it's impossible to create a valid pipeline layout that has any descriptors at all.

@HansKristian-Work
Copy link
Contributor

Spec bug, it only applies when the layout enables update-after-bind.

@marc0246
Copy link
Author

Does that mean if any descriptor set layout enables update after bind, then all descriptors of the type must respect the limit, or only the update after bind descriptors (or something else)? Just to get a concrete idea on implementation.

@HansKristian-Work
Copy link
Contributor

HansKristian-Work commented Mar 26, 2025

I think it would only be the descriptor sets that use update-after-bind that are counted, but it'll have to go through actual review first. It might be the case that if there is mix and match in the layout you have to respect both limits, but I don't know the answer now.

@HansKristian-Work
Copy link
Contributor

To update here, the UAB limits count towards all descriptors, but UAB limits must be greater-or-equal to the normal limits. However, I think the UAB limit only needs to apply if UAB is supported at all (otherwise the property is 0), so that's the spec bug that needs fixing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants