From 9b4eb81162d946a967ec818a90ecfa29c198e108 Mon Sep 17 00:00:00 2001 From: "Eric R. Smith" Date: Fri, 15 Aug 2025 12:42:18 -0300 Subject: [PATCH] panvk: revised occlusion query pointer fix It turns out that the `occlusion_query.syncobj` is used to set state that later code relies on, and setting it to NULL causes some Vulkan CTS tests to fail. Instead, we should explicitly check for the mode being `MALI_OCCLUSION_MODE_DISABLED` to avoid using an invalid `ptr` field. Fixes: 24c692c9816 ("panvk: fix a NULL pointer dereference in occlusion queries") Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 1 + src/panfrost/vulkan/panvk_vX_cmd_meta.c | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index ea43ffe0290..e09bcec5526 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -1916,6 +1916,7 @@ static VkResult prepare_oq(struct panvk_cmd_buffer *cmdbuf) { if (!gfx_state_dirty(cmdbuf, OQ) || + cmdbuf->state.gfx.occlusion_query.mode == MALI_OCCLUSION_MODE_DISABLED || cmdbuf->state.gfx.occlusion_query.syncobj == cmdbuf->state.gfx.render.oq.last) return VK_SUCCESS; diff --git a/src/panfrost/vulkan/panvk_vX_cmd_meta.c b/src/panfrost/vulkan/panvk_vX_cmd_meta.c index ef3dc6f7645..e04cd338316 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_meta.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_meta.c @@ -123,9 +123,6 @@ panvk_per_arch(cmd_meta_gfx_start)( save_ctx->occlusion_query = cmdbuf->state.gfx.occlusion_query; /* Ensure occlusion queries are disabled */ -#if PAN_ARCH >= 10 - cmdbuf->state.gfx.occlusion_query.syncobj = 0; -#endif cmdbuf->state.gfx.occlusion_query.ptr = 0; cmdbuf->state.gfx.occlusion_query.mode = MALI_OCCLUSION_MODE_DISABLED; gfx_state_set_dirty(cmdbuf, OQ);