From 472fcf74e250a72053d837f7730fb991c1c3cb7e Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 7 Apr 2023 12:01:09 -0400 Subject: [PATCH] zink: don't trigger shader variants on pcp change if driver supports dynamic pcp this otherwise pointlessly creates and binds shader variants that do nothing Part-of: --- src/gallium/drivers/zink/zink_program.c | 1 + src/gallium/drivers/zink/zink_program.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index e6a95c0..78f1b9d 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -677,6 +677,7 @@ update_gfx_program_optimal(struct zink_context *ctx, struct zink_gfx_program *pr } } if (prog->shaders[MESA_SHADER_TESS_CTRL] && prog->shaders[MESA_SHADER_TESS_CTRL]->non_fs.is_generated && + !zink_screen(ctx->base.screen)->info.dynamic_state2_feats.extendedDynamicState2PatchControlPoints && ctx->gfx_pipeline_state.shader_keys_optimal.key.tcs_bits != optimal_key->tcs_bits) { assert(!prog->is_separable); bool changed = update_gfx_shader_module_optimal(ctx, prog, MESA_SHADER_TESS_CTRL); diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index bf78d19..3ad083d 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -299,7 +299,8 @@ zink_set_tcs_key_patches(struct zink_context *ctx, uint8_t patch_vertices) &ctx->gfx_pipeline_state.shader_keys.key[MESA_SHADER_TESS_CTRL].key.tcs; if (tcs->patch_vertices == patch_vertices) return false; - ctx->dirty_gfx_stages |= BITFIELD_BIT(MESA_SHADER_TESS_CTRL); + if (!zink_screen(ctx->base.screen)->info.dynamic_state2_feats.extendedDynamicState2PatchControlPoints) + ctx->dirty_gfx_stages |= BITFIELD_BIT(MESA_SHADER_TESS_CTRL); tcs->patch_vertices = patch_vertices; return true; } -- 2.7.4