radv: move ac_nir_lower_indirect_derefs to end of radv_shader_spirv_to_nir

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31265>
This commit is contained in:
Rhys Perry 2026-03-06 15:17:51 +00:00 committed by Marge Bot
parent caeaa6bad2
commit 1943e88d56

View file

@ -853,21 +853,6 @@ radv_shader_spirv_to_nir(const struct radv_compiler_info *compiler_info, struct
NIR_PASS(_, nir, radv_nir_lower_primitive_shading_rate, compiler_info->ac->gfx_level);
}
/* Indirect lowering must be called after the radv_optimize_nir() loop
* has been called at least once. Otherwise indirect lowering can
* bloat the instruction count of the loop and cause it to be
* considered too large for unrolling.
*/
bool indirect_derefs_lowered = false;
NIR_PASS(indirect_derefs_lowered, nir, ac_nir_lower_indirect_derefs);
NIR_PASS(_, nir, nir_lower_vars_to_ssa);
if (indirect_derefs_lowered && !stage->key.optimisations_disabled &&
nir->info.stage != MESA_SHADER_COMPUTE) {
/* Optimize the lowered code before the linking optimizations. */
radv_optimize_nir(nir, false);
}
/* Lower immutable/embedded sampler derefs to vec4. */
NIR_PASS(_, nir, radv_nir_lower_immediate_samplers, compiler_info, stage);
@ -892,6 +877,21 @@ radv_shader_spirv_to_nir(const struct radv_compiler_info *compiler_info, struct
}
}
/* Indirect lowering must be called after the radv_optimize_nir() loop
* has been called at least once. Otherwise indirect lowering can
* bloat the instruction count of the loop and cause it to be
* considered too large for unrolling.
*/
bool indirect_derefs_lowered = false;
NIR_PASS(indirect_derefs_lowered, nir, ac_nir_lower_indirect_derefs);
NIR_PASS(_, nir, nir_lower_vars_to_ssa);
if (indirect_derefs_lowered && !stage->key.optimisations_disabled &&
nir->info.stage != MESA_SHADER_COMPUTE) {
/* Optimize the lowered code before the linking optimizations. */
radv_optimize_nir(nir, false);
}
return nir;
}