From 891d46f517ce451c7df3f0d46f907b30308721b1 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 27 Aug 2025 14:23:40 +1000 Subject: [PATCH] st/glsl_to_nir: dont add duplicate state tokens This avoids adding duplicates that also won't be optimised as the param optimise path is also skipped for variants. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13735 Reviewed-by: Mike Blumenkrantz Part-of: --- src/mesa/state_tracker/st_glsl_to_nir.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 791db67a387..c137737e7c1 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -113,10 +113,11 @@ st_nir_lookup_parameter_index(struct gl_program *prog, nir_variable *var) } static void -st_nir_assign_uniform_locations(struct gl_context *ctx, +st_nir_assign_uniform_locations(struct st_context *st, struct gl_program *prog, - nir_shader *nir) + nir_shader *nir, bool is_before_variants) { + struct gl_context *ctx = st->ctx; int shaderidx = 0; int imageidx = 0; @@ -134,6 +135,9 @@ st_nir_assign_uniform_locations(struct gl_context *ctx, imageidx += type_size(uniform->type); } } else if (uniform->state_slots) { + if (st->allow_st_finalize_nir_twice && !is_before_variants) + continue; + const gl_state_index16 *const stateTokens = uniform->state_slots[0].tokens; unsigned comps; @@ -698,7 +702,7 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog, NIR_PASS(_, nir, nir_lower_tex, &opts); } - st_nir_assign_uniform_locations(st->ctx, prog, nir); + st_nir_assign_uniform_locations(st, prog, nir, is_before_variants); /* Set num_uniforms in number of attribute slots (vec4s) */ nir->num_uniforms = DIV_ROUND_UP(prog->Parameters->NumParameterValues, 4);