radv: fix indexing with variable descriptor count
The Vulkan spec says:
"If bindingCount is zero or if this structure is not included in
the pNext chain, the VkDescriptorBindingFlags for each descriptor
set layout binding is considered to be zero. Otherwise, the
descriptor set layout binding at
VkDescriptorSetLayoutCreateInfo::pBindings[i] uses the flags in
pBindingFlags[i]."
Fixes recent VKCTS dEQP-VK.api.maintenance3_check.*.
Cc: mesa-stable
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13503
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36044>
This commit is contained in:
committed by
Marge Bot
parent
01fccec1dc
commit
36879c4f99
@@ -196,8 +196,8 @@ radv_CreateDescriptorSetLayout(VkDevice _device, const VkDescriptorSetLayoutCrea
|
||||
set_layout->binding[b].dynamic_offset_offset = dynamic_offset_count;
|
||||
set_layout->binding[b].has_ycbcr_sampler = has_ycbcr_sampler;
|
||||
|
||||
if (variable_flags && binding->binding < variable_flags->bindingCount &&
|
||||
(variable_flags->pBindingFlags[binding->binding] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)) {
|
||||
if (variable_flags && j < variable_flags->bindingCount &&
|
||||
(variable_flags->pBindingFlags[j] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)) {
|
||||
assert(!binding->pImmutableSamplers); /* Terribly ill defined how many samplers are valid */
|
||||
assert(binding->binding == num_bindings - 1);
|
||||
|
||||
@@ -358,8 +358,8 @@ radv_GetDescriptorSetLayoutSupport(VkDevice _device, const VkDescriptorSetLayout
|
||||
if (max_count < descriptor_count) {
|
||||
supported = false;
|
||||
}
|
||||
if (variable_flags && binding->binding < variable_flags->bindingCount && variable_count &&
|
||||
(variable_flags->pBindingFlags[binding->binding] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)) {
|
||||
if (variable_flags && i < variable_flags->bindingCount && variable_count &&
|
||||
(variable_flags->pBindingFlags[i] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)) {
|
||||
variable_count->maxVariableDescriptorCount = MIN2(UINT32_MAX, max_count);
|
||||
}
|
||||
size += descriptor_count * descriptor_size;
|
||||
|
||||
Reference in New Issue
Block a user