From 8ef07d4d8b3a90075aed2ebc65136e14be127058 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Mon, 12 May 2025 15:23:07 +0800 Subject: [PATCH] radeonsi: support mesh shader per vertex output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mesh shader uses per vertex output store, and si_nir_assign_param_offsets assert output store to be scalar. Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 3 ++- src/gallium/drivers/radeonsi/si_shader_nir.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index e10d9a1b6a9..2ed643f3792 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1226,7 +1226,8 @@ static void si_nir_assign_param_offsets(nir_shader *nir, struct si_shader *shade continue; nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_store_output) + if (intr->intrinsic != nir_intrinsic_store_output && + intr->intrinsic != nir_intrinsic_store_per_vertex_output) continue; /* No indirect indexing allowed. */ diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index a6ebdd3122b..8a3677bb577 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -324,7 +324,8 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir) /* si_nir_kill_outputs and ac_nir_optimize_outputs require outputs to be scalar. */ if (nir->info.stage == MESA_SHADER_VERTEX || nir->info.stage == MESA_SHADER_TESS_EVAL || - nir->info.stage == MESA_SHADER_GEOMETRY) + nir->info.stage == MESA_SHADER_GEOMETRY || + nir->info.stage == MESA_SHADER_MESH) NIR_PASS(_, nir, nir_lower_io_to_scalar, nir_var_shader_out, NULL, NULL); if (nir->info.stage == MESA_SHADER_GEOMETRY) {