From c58f3ec6fc7cdc11bfcc1584652f3e10f7c4ec0a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 4 Aug 2022 16:00:37 -0400 Subject: [PATCH] zink: use template to eliminate more instructions in pipeline state comparison these values don't need to be checked at all if dynamic vertex is enabled, which wouldn't previously have been possible without adding even more data to check to the pipeline state Reviewed-by: Samuel Pitoiset Part-of: --- src/gallium/drivers/zink/zink_program_state.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program_state.hpp b/src/gallium/drivers/zink/zink_program_state.hpp index a6a2eb67089..c6c30173311 100644 --- a/src/gallium/drivers/zink/zink_program_state.hpp +++ b/src/gallium/drivers/zink/zink_program_state.hpp @@ -267,12 +267,15 @@ equals_gfx_pipeline_state(const void *a, const void *b) { const struct zink_gfx_pipeline_state *sa = (const struct zink_gfx_pipeline_state *)a; const struct zink_gfx_pipeline_state *sb = (const struct zink_gfx_pipeline_state *)b; - if (sa->uses_dynamic_stride != sb->uses_dynamic_stride) - return false; + if (DYNAMIC_STATE < ZINK_PIPELINE_DYNAMIC_VERTEX_INPUT) { + if (sa->uses_dynamic_stride != sb->uses_dynamic_stride) + return false; + } /* dynamic vs rp */ if (!!sa->render_pass != !!sb->render_pass) return false; - if (DYNAMIC_STATE == ZINK_PIPELINE_NO_DYNAMIC_STATE || !sa->uses_dynamic_stride) { + if (DYNAMIC_STATE == ZINK_PIPELINE_NO_DYNAMIC_STATE || + (DYNAMIC_STATE < ZINK_PIPELINE_DYNAMIC_VERTEX_INPUT && !sa->uses_dynamic_stride)) { if (sa->vertex_buffers_enabled_mask != sb->vertex_buffers_enabled_mask) return false; /* if we don't have dynamic states, we have to hash the enabled vertex buffer bindings */