From 9d271d171a9ae1ead72b2a5992bfe9b3ddf6cd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 21 Nov 2025 22:56:51 -0500 Subject: [PATCH] radeonsi: call nir_lower_gs_intrinsics in si_preprocess_nir Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 10 ++++++++++ src/gallium/drivers/radeonsi/si_shader_nir.c | 11 +---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index d03fd22448f..a5aa58024eb 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -686,6 +686,16 @@ static void si_preprocess_nir(struct si_nir_shader_ctx *ctx) }); } + if (nir->info.stage == MESA_SHADER_GEOMETRY) { + NIR_PASS(progress, nir, nir_lower_gs_intrinsics, + nir_lower_gs_intrinsics_per_stream | + (shader->key.ge.as_ngg ? + nir_lower_gs_intrinsics_count_primitives | + nir_lower_gs_intrinsics_count_vertices_per_primitive | + nir_lower_gs_intrinsics_overwrite_incomplete : 0)); + NIR_PASS(progress, nir, nir_lower_vars_to_ssa); + } + /* nir_opt_clip_cull_const, si_nir_kill_outputs, and ac_nir_optimize_outputs require outputs * to be scalar. */ diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 850b2a4202b..eb7efa7aa92 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -179,16 +179,7 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir) NIR_PASS(_, nir, nir_opt_intrinsics); NIR_PASS(_, nir, nir_lower_system_values); - if (nir->info.stage == MESA_SHADER_GEOMETRY) { - unsigned flags = nir_lower_gs_intrinsics_per_stream; - if (sscreen->use_ngg) { - flags |= nir_lower_gs_intrinsics_count_primitives | - nir_lower_gs_intrinsics_count_vertices_per_primitive | - nir_lower_gs_intrinsics_overwrite_incomplete; - } - - NIR_PASS(_, nir, nir_lower_gs_intrinsics, flags); - } else if (nir->info.stage == MESA_SHADER_TASK) { + if (nir->info.stage == MESA_SHADER_TASK) { NIR_PASS(_, nir, ac_nir_lower_task_outputs_to_mem, false); } else if (nir->info.stage == MESA_SHADER_MESH) { NIR_PASS(_, nir, ac_nir_lower_mesh_inputs_to_mem);