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]; } }
