From 8b619b23604331e64ec0393e9b3b302a75bd15fc Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 16 Oct 2024 12:35:25 +0200 Subject: [PATCH] panvk/csf: only look at fs if it's required If the FS isn't used, there's no reason to consult it. This was inspired by a coverity report, which was technically wrong, but made me look closer at the code. CID: 1620442 Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 5a747335232..7c3d8c3e810 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -1136,9 +1136,17 @@ prepare_dcd(struct panvk_cmd_buffer *cmdbuf) { struct cs_builder *b = panvk_get_cs_builder(cmdbuf, PANVK_SUBQUEUE_VERTEX_TILER); - const struct panvk_shader *fs = cmdbuf->state.gfx.fs.shader; - bool fs_is_dirty = - cmdbuf->state.gfx.fs.spd != get_fs_spd(fs); + + const struct panvk_shader *fs = NULL; + bool fs_is_dirty = false; + bool needs_fs = fs_required(cmdbuf); + if (needs_fs) { + fs = cmdbuf->state.gfx.fs.shader; + fs_is_dirty = cmdbuf->state.gfx.fs.spd != get_fs_spd(fs); + } else { + fs_is_dirty = cmdbuf->state.gfx.fs.spd != 0; + } + bool dcd0_dirty = is_dirty(cmdbuf, RS_RASTERIZER_DISCARD_ENABLE) || is_dirty(cmdbuf, RS_CULL_MODE) || is_dirty(cmdbuf, RS_FRONT_FACE) || @@ -1170,8 +1178,6 @@ prepare_dcd(struct panvk_cmd_buffer *cmdbuf) is_dirty(cmdbuf, CB_WRITE_MASKS) || fs_is_dirty || cmdbuf->state.gfx.render.dirty; - bool needs_fs = fs_required(cmdbuf); - const struct vk_dynamic_graphics_state *dyns = &cmdbuf->vk.dynamic_graphics_state; const struct vk_rasterization_state *rs =