From 5434de7ab6b051d5a37c2ae908f2bdcc39ce7053 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 1 Jul 2022 14:44:00 -0700 Subject: [PATCH] freedreno/ir3: Don't lower_gs multiple times At least with gallium, this can be called multiple times via pipe_screen::finalize_nir(). But it is not designed to be called multiple times, and can result in vertex_flags getting 'optimized' away. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6720 Signed-off-by: Rob Clark Part-of: --- src/freedreno/ir3/ir3_nir_lower_tess.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c index db96893aa75..e14df06a194 100644 --- a/src/freedreno/ir3/ir3_nir_lower_tess.c +++ b/src/freedreno/ir3/ir3_nir_lower_tess.c @@ -909,6 +909,11 @@ ir3_nir_lower_gs(nir_shader *shader) { struct state state = {}; + /* Don't lower multiple times: */ + nir_foreach_shader_out_variable (var, shader) + if (var->data.location == VARYING_SLOT_GS_VERTEX_FLAGS_IR3) + return; + if (shader_debug_enabled(shader->info.stage)) { mesa_logi("NIR (before gs lowering):"); nir_log_shaderi(shader);