From 38692b3ebfa0a51e099f8782c8885bcf523fd46f Mon Sep 17 00:00:00 2001 From: Icenowy Zheng Date: Thu, 9 Apr 2026 19:50:11 +0800 Subject: [PATCH] pvr: fix the code copying query_indices to sub_query_indices There's a dynarray field inside gfx sub_cmd called sub_query_indices, which will contain pending query indices for gfx sub_cmds inside a secondary command buffer. It's expected that when finishing such gfx sub_cmds, the content of query_indices is going to be moved there. However the `util_dynarray_append_dynarray()` call is called with wrong parameter order, thus it's copying sub_query_indices to query_indices and then immediately wiping query_indices, forgetting all query indices in such case. Fix the `util_dynarray_append_dynarray()` call to fix occlusion queries in secondary command buffers. Fixes: 8c506c4b03aa ("pvr: Use util_dynarray_append_dynarray()") Signed-off-by: Icenowy Zheng Reviewed-by: Frank Binns (cherry picked from commit 87f4122e110a88f533724b8dbfd3cc8aaa27e97f) Part-of: --- .pick_status.json | 2 +- src/imagination/vulkan/pvr_arch_cmd_buffer.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 4d6216d0ec9..0af4f382c9b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -5694,7 +5694,7 @@ "description": "pvr: fix the code copying query_indices to sub_query_indices", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "8c506c4b03aa17ba1c71ed4ce80464d489c29de7", "notes": null diff --git a/src/imagination/vulkan/pvr_arch_cmd_buffer.c b/src/imagination/vulkan/pvr_arch_cmd_buffer.c index bcee7736a38..7a061c878de 100644 --- a/src/imagination/vulkan/pvr_arch_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_arch_cmd_buffer.c @@ -2407,8 +2407,8 @@ VkResult pvr_arch_cmd_buffer_end_sub_cmd(struct pvr_cmd_buffer *cmd_buffer) assert(gfx_sub_cmd->query_pool); if (secondary_cont) { - util_dynarray_append_dynarray(&state->query_indices, - &gfx_sub_cmd->sec_query_indices); + util_dynarray_append_dynarray(&gfx_sub_cmd->sec_query_indices, + &state->query_indices); } else { const void *data = util_dynarray_begin(&state->query_indices);