From 870a2e419758478a117685ff01a88320ce1cba49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 8 Feb 2024 11:29:11 +0100 Subject: [PATCH] nir: Cleanup divergence analysis for mesh shaders. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Mesh shaders don't have inputs (only task payload), so remove them from handling load_input. 2. Clarify in comments that loading any mesh shader output is an NV_mesh_shader only feature. Signed-off-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 03aedde23c1..2cab8790ad3 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -262,7 +262,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr, is_divergent |= !(options & nir_divergence_single_prim_per_subgroup); else if (stage == MESA_SHADER_TESS_EVAL) is_divergent |= !(options & nir_divergence_single_patch_per_tes_subgroup); - else if (stage != MESA_SHADER_MESH) + else is_divergent = true; break; case nir_intrinsic_load_per_vertex_input: @@ -291,13 +291,16 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr, break; case MESA_SHADER_TASK: case MESA_SHADER_MESH: - /* Divergent if src[0] is, so nothing else to do. */ + /* NV_mesh_shader only (EXT_mesh_shader does not allow loading outputs). + * Divergent if src[0] is, so nothing else to do. + */ break; default: unreachable("Invalid stage for load_output"); } break; case nir_intrinsic_load_per_vertex_output: + /* TCS and NV_mesh_shader only (EXT_mesh_shader does not allow loading outputs). */ assert(stage == MESA_SHADER_TESS_CTRL || stage == MESA_SHADER_MESH); is_divergent = instr->src[0].ssa->divergent || instr->src[1].ssa->divergent || @@ -305,6 +308,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr, !(options & nir_divergence_single_patch_per_tcs_subgroup)); break; case nir_intrinsic_load_per_primitive_output: + /* NV_mesh_shader only (EXT_mesh_shader does not allow loading outputs). */ assert(stage == MESA_SHADER_MESH); is_divergent = instr->src[0].ssa->divergent || instr->src[1].ssa->divergent;