Module: Mesa
Branch: staging/23.2
Commit: 52fbebd9d89da6e2fd2149cabced7c71ad40521a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=52fbebd9d89da6e2fd2149cabced7c71ad40521a

Author: Karmjit Mahil <[email protected]>
Date:   Tue Sep 19 13:35:50 2023 +0100

pvr: Fix dynamic desc offset storage

The index at which the dynamic descriptor offsets were being
stored was incorrect, leading to some offsets not being stored and
thus `0` being applied as the offset to the descriptors instead.

dEQP test fixed:
  dEQP-VK.binding_model.shader_access.{primary,secondary}_cmd_buf
    .uniform_buffer_dynamic
    .{vertex,fragment,compute,vertex_fragment}
    .multiple_discontiguous_descriptor_sets
    .*_descriptor.offset_view_{,non}zero_dynamic_nonzero

Fixes: aa791961a82e ("pvr: Add support for dynamic buffers descriptors")
Signed-off-by: Karmjit Mahil <[email protected]>
Reviewed-by: Frank Binns <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25320>
(cherry picked from commit feafb8a256b67d816c1cb8fdf258c75a29245c3f)

---

 .pick_status.json                       |  2 +-
 src/imagination/vulkan/pvr_cmd_buffer.c | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index bc66da0de4b..e32842a109e 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -374,7 +374,7 @@
         "description": "pvr: Fix dynamic desc offset storage",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "aa791961a82e1f5a9dd841c3e0398c3e80d09652",
         "notes": null
diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c 
b/src/imagination/vulkan/pvr_cmd_buffer.c
index b534b91378d..b142539a127 100644
--- a/src/imagination/vulkan/pvr_cmd_buffer.c
+++ b/src/imagination/vulkan/pvr_cmd_buffer.c
@@ -2587,12 +2587,12 @@ void pvr_CmdBindDescriptorSets(VkCommandBuffer 
commandBuffer,
 
    if (dynamicOffsetCount > 0) {
       PVR_FROM_HANDLE(pvr_pipeline_layout, pipeline_layout, _layout);
-      uint32_t starting_idx = 0;
+      uint32_t set_offset = 0;
 
       for (uint32_t set = 0; set < firstSet; set++)
-         starting_idx += 
pipeline_layout->set_layout[set]->dynamic_buffer_count;
+         set_offset += pipeline_layout->set_layout[set]->dynamic_buffer_count;
 
-      assert(starting_idx + dynamicOffsetCount <=
+      assert(set_offset + dynamicOffsetCount <=
              ARRAY_SIZE(descriptor_state->dynamic_offsets));
 
       /* From the Vulkan 1.3.238 spec. :
@@ -2602,8 +2602,8 @@ void pvr_CmdBindDescriptorSets(VkCommandBuffer 
commandBuffer,
        *    element in each dynamic descriptor type binding in each set."
        *
        */
-      for (uint32_t i = starting_idx; i < dynamicOffsetCount; i++)
-         descriptor_state->dynamic_offsets[i] = pDynamicOffsets[i];
+      for (uint32_t i = 0; i < dynamicOffsetCount; i++)
+         descriptor_state->dynamic_offsets[set_offset + i] = 
pDynamicOffsets[i];
    }
 }
 

Reply via email to