From ae58d184b090556b4e127d6f4bc3bdc446569242 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Thu, 12 Mar 2026 19:54:27 +0800 Subject: [PATCH] panvk/csf: use DEFERRED_FLUSH for fragment job cache flush The correct dependence is cs_flush_caches.cs_defer.signal to signal cs_sync32_set.cs_defer.wait in occulusion query path. Fixes: 443ddac ("panvk/csf: merge v10 and v11 paths in issue_fragment_jobs") Fixed: many random fail cases in VK-GL-CTS 1.4.4.2, eg. dEQP-VK.query_pool.occlusion_query.get_results_conservative _size_64_wait_query_without_availability_draw_points_clear_color Signed-off-by: Ryan Zhang Reviewed-by: Lars-Ivar Hesselberg Simonsen (cherry picked from commit 93b58064f7f581c540311c1f87386c8958401052) Part-of: --- .pick_status.json | 2 +- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 554a5774091..7e97565b19b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1044,7 +1044,7 @@ "description": "panvk/csf: use DEFERRED_FLUSH for fragment job cache flush", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "443ddace70695bd490d959d783e22ad49c69ccb2", "notes": null diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 4bffba41e25..e99ca634837 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -3622,12 +3622,16 @@ issue_fragment_jobs(struct panvk_cmd_buffer *cmdbuf) * indirect mode */ cs_set_state_imm32(b, MALI_CS_SET_STATE_TYPE_SB_SEL_DEFERRED, SB_ID(DEFERRED_FLUSH)); +#else + async = cs_defer(SB_WAIT_ITER(sb_upd_ctx.cur_sb), SB_ID(DEFERRED_FLUSH)); #endif cs_flush_caches(b, MALI_CS_FLUSH_MODE_CLEAN, MALI_CS_FLUSH_MODE_CLEAN, MALI_CS_OTHER_FLUSH_MODE_NONE, flush_id, async); #if PAN_ARCH >= 11 cs_set_state_imm32(b, MALI_CS_SET_STATE_TYPE_SB_SEL_DEFERRED, SB_ID(DEFERRED_SYNC)); +#else + async = cs_defer(SB_WAIT_ITER(sb_upd_ctx.cur_sb), SB_ID(DEFERRED_SYNC)); #endif cs_load64_to(b, oq_chain, cs_subqueue_ctx_reg(b),