From b902fb2e14e56bdf914eb175489d3b53ff6fcda0 Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Fri, 9 Jun 2023 12:53:20 +0100 Subject: [PATCH] pvr: Fix dynamic offset patching Previously the set of dynamic offsets were being reused per each binding. That's now fixed, by using an offset to determine where each binding's dynamic offsets reside. Tests fixed: dEQP-VK.binding_model.descriptor_copy.{compute,graphics} .{uniform,storage}_buffer_dynamic_0 Signed-off-by: Karmjit Mahil Reviewed-by: Frank Binns Fixes: aa791961a82e ("pvr: Add support for dynamic buffers descriptors") Part-of: --- src/imagination/vulkan/pvr_cmd_buffer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index e74eab754c6..df73591168d 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -3727,6 +3727,7 @@ static VkResult pvr_cmd_buffer_upload_patched_desc_set( struct pvr_device *device = cmd_buffer->device; struct pvr_suballoc_bo *patched_desc_set_bo; uint32_t *src_mem_ptr, *dst_mem_ptr; + uint32_t desc_idx_offset = 0; VkResult result; assert(desc_set->layout->dynamic_buffer_count > 0); @@ -3801,7 +3802,7 @@ static VkResult pvr_cmd_buffer_upload_patched_desc_set( /* clang-format on */ const pvr_dev_addr_t addr = PVR_DEV_ADDR_OFFSET(descriptors[desc_idx].buffer_dev_addr, - dynamic_offsets[desc_idx]); + dynamic_offsets[desc_idx + desc_idx_offset]); const VkDeviceSize range = MIN2(descriptors[desc_idx].buffer_desc_range, descriptors[desc_idx].buffer_whole_range - @@ -3844,6 +3845,8 @@ static VkResult pvr_cmd_buffer_upload_patched_desc_set( PVR_DW_TO_BYTES(size_info->secondary)); } } + + desc_idx_offset += binding->descriptor_count; } *bo_out = patched_desc_set_bo;