From 43c06b5a7a15bb9fa2acedb783504483d7ed95b9 Mon Sep 17 00:00:00 2001 From: Utku Iseri Date: Thu, 4 Dec 2025 21:24:46 +0100 Subject: [PATCH] panvk: set allow_forward_pixel_to_be_killed for draws Setting this flag is valid as long as the fragment shader doesn't have any side effects on v7+. v6 requires an extra check for earlyzs. Reviewed-by: Iago Toral Quiroga Reviewed-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: Faith Ekstrand Reviewed-by: Boris Brezillon Reviewed-by: Yiwei Zhang Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 2 ++ src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 342ade42a54..71f97403343 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -2034,6 +2034,8 @@ prepare_dcd(struct panvk_cmd_buffer *cmdbuf, !(rt_read & rt_written) && !alpha_to_coverage && !cmdbuf->state.gfx.cb.info.any_dest_read; + cfg.allow_forward_pixel_to_be_killed = !fs->info.writes_global; + bool writes_zs = writes_z || writes_s; bool zs_always_passes = ds_test_always_passes(cmdbuf); bool oq = cmdbuf->state.gfx.occlusion_query.mode != diff --git a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c index c0f477fda64..9b8ccb0c431 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c @@ -323,6 +323,11 @@ panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf, pan_earlyzs_get(fs->fs.earlyzs_lut, writes_zs || oq, alpha_to_coverage, zs_always_passes, zs_read); + /* early ZS check for FPK is performed by HW on v7+ */ + cfg.properties.allow_forward_pixel_to_be_killed = + !fs->info.writes_global && + ((PAN_ARCH > 6) || earlyzs.kill != MALI_PIXEL_KILL_FORCE_LATE); + cfg.properties.pixel_kill_operation = earlyzs.kill; cfg.properties.zs_update_operation = earlyzs.update; cfg.multisample_misc.evaluate_per_sample =