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);