pvr: Use original binding numbers instead of reassigning
authorKarmjit Mahil <Karmjit.Mahil@imgtec.com>
Thu, 4 May 2023 14:25:40 +0000 (15:25 +0100)
committerMarge Bot <emma+marge@anholt.net>
Tue, 16 May 2023 18:09:03 +0000 (18:09 +0000)
Previously, in the descriptor set layout, if there were gaps
within the binding numbers, the code would remove the gap and
assign a sequential binding number to each.

This is causes problems when looking up the binding on a
vkUpdateDescriptorSets() as the user would still be providing the
original binding numbers. If gaps were removed and binding
number re-assigned, the binding could either not be found, or a
different binding was found instead of the desired one.

Let's not re-assign binding numbers and just use the original
ones.

This fixes the following assert being hit:
  `pvr_descriptor_set.c:1890: pvr_write_descriptor_set:
   Assertion `binding' failed.`
on dEQP tests such as:
  dEQP-VK.glsl.opaque_type_indexing.ubo.uniform_vertex
  dEQP-VK.glsl.opaque_type_indexing.ubo.uniform_fragment
  ...

Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22918>

src/imagination/vulkan/pvr_common.h
src/imagination/vulkan/pvr_descriptor_set.c

index a6d509d..1339538 100644 (file)
@@ -267,8 +267,7 @@ struct pvr_descriptor_set_layout_binding {
    VkDescriptorType type;
 
    /* "M" in layout(set = N, binding = M)
-    * Can be used to index bindings in the descriptor_set_layout. Not the
-    * original user specified binding number as those might be non-contiguous.
+    * Can be used to index bindings in the descriptor_set_layout.
     */
    uint32_t binding_number;
 
index 1855876..fede093 100644 (file)
@@ -511,10 +511,7 @@ VkResult pvr_CreateDescriptorSetLayout(
       uint8_t shader_stages = 0;
 
       internal_binding->type = binding->descriptorType;
-      /* The binding_numbers can be non-contiguous so we ignore the user
-       * specified binding numbers and make them contiguous ourselves.
-       */
-      internal_binding->binding_number = bind_num;
+      internal_binding->binding_number = binding->binding;
 
       /* From Vulkan spec 1.2.189:
        *