From 17e25b4983dc333d971c7b6eed4bdae741a9bf03 Mon Sep 17 00:00:00 2001 From: Valentine Burley Date: Wed, 22 Oct 2025 16:31:35 +0200 Subject: [PATCH] tu: Fix indexing with variable descriptor count Based on RADV. 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 dEQP-VK.api.maintenance3_check.* in VKCTS 1.4.4.0. Cc: mesa-stable Signed-off-by: Valentine Burley Part-of: --- src/freedreno/vulkan/tu_descriptor_set.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/freedreno/vulkan/tu_descriptor_set.cc b/src/freedreno/vulkan/tu_descriptor_set.cc index a35986cdaa1..ebd7e323e1b 100644 --- a/src/freedreno/vulkan/tu_descriptor_set.cc +++ b/src/freedreno/vulkan/tu_descriptor_set.cc @@ -208,8 +208,8 @@ tu_CreateDescriptorSetLayout( if (binding->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) set_layout->has_inline_uniforms = true; - if (variable_flags && binding->binding < variable_flags->bindingCount && - (variable_flags->pBindingFlags[binding->binding] & + 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 */ @@ -388,9 +388,9 @@ tu_GetDescriptorSetLayoutSupport( supported = false; } - if (variable_flags && binding->binding < variable_flags->bindingCount && + if (variable_flags && i < variable_flags->bindingCount && variable_count && - (variable_flags->pBindingFlags[binding->binding] & + (variable_flags->pBindingFlags[i] & VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)) { variable_count->maxVariableDescriptorCount = MIN2(UINT32_MAX, max_count);