radeonsi: fix OpenCL shader compile fail

sel->stage is assigned with MESA_SHADER_COMPUTE statically,
change to use nir->info.stage need to handle with MESA_SHADER_KERNEL.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12372
Fixes: 9b7ea720c9 ("radeonsi: use nir->info instead of sel->info.base")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32781>
This commit is contained in:
Qiang Yu 2024-12-25 11:07:06 +08:00 committed by Marge Bot
parent c0e5e8f932
commit 9a8eef282b
3 changed files with 7 additions and 3 deletions

View file

@ -680,6 +680,7 @@ static void si_init_shader_args(struct si_shader *shader, struct si_shader_args
break;
case MESA_SHADER_COMPUTE:
case MESA_SHADER_KERNEL:
declare_global_desc_pointers(args);
declare_per_stage_desc_pointers(args, shader, info, true);
if (shader->selector->info.uses_grid_size)
@ -2246,7 +2247,8 @@ static void si_nir_emit_polygon_stipple(nir_shader *nir, struct si_shader_args *
bool si_should_clear_lds(struct si_screen *sscreen, const struct nir_shader *shader)
{
return shader->info.stage == MESA_SHADER_COMPUTE && shader->info.shared_size > 0 && sscreen->options.clear_lds;
return gl_shader_stage_is_compute(shader->info.stage) &&
shader->info.shared_size > 0 && sscreen->options.clear_lds;
}
static bool clamp_shadow_comparison_value(nir_builder *b, nir_instr *instr, void *state)
@ -3102,7 +3104,7 @@ bool si_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler *compi
}
/* Validate SGPR and VGPR usage for compute to detect compiler bugs. */
if (nir->info.stage == MESA_SHADER_COMPUTE) {
if (gl_shader_stage_is_compute(nir->info.stage)) {
unsigned max_vgprs =
sscreen->info.num_physical_wave64_vgprs_per_simd * (shader->wave_size == 32 ? 2 : 1);
unsigned max_sgprs = sscreen->info.num_physical_sgprs_per_simd;

View file

@ -157,6 +157,7 @@ void si_llvm_create_func(struct si_shader_context *ctx, const char *name, LLVMTy
call_conv = AC_LLVM_AMDGPU_PS;
break;
case MESA_SHADER_COMPUTE:
case MESA_SHADER_KERNEL:
call_conv = AC_LLVM_AMDGPU_CS;
break;
default:
@ -596,6 +597,7 @@ static bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shade
}
case MESA_SHADER_COMPUTE:
case MESA_SHADER_KERNEL:
if (ctx->shader->selector->info.base.shared_size)
si_llvm_declare_compute_memory(ctx);
break;

View file

@ -331,7 +331,7 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir)
NIR_PASS_V(nir, nir_lower_gs_intrinsics, flags);
}
if (nir->info.stage == MESA_SHADER_COMPUTE) {
if (gl_shader_stage_is_compute(nir->info.stage)) {
nir_lower_compute_system_values_options options = {0};
/* gl_LocalInvocationIndex must be derived from gl_LocalInvocationID.xyz to make it correct