From 2f6a034528bc4f8a2cdeae9e7b36645ded4fa465 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 27 Nov 2025 17:09:47 +0800 Subject: [PATCH] glsl: support barrier() for task and mesh shader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was ignored when translating glsl to nir. Fixes: d52452a486c ("glsl: allow barrier builtin functions for mesh shader") Reviewed-by: Marek Olšák Part-of: --- src/compiler/glsl/glsl_to_nir.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index f9c709c69b2..93256e98a29 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -2897,12 +2897,25 @@ nir_visitor::visit(ir_dereference_array *ir) void nir_visitor::visit(ir_barrier *) { - if (shader->info.stage == MESA_SHADER_COMPUTE) { + switch (shader->info.stage) { + case MESA_SHADER_COMPUTE: nir_barrier(&b, SCOPE_WORKGROUP, SCOPE_WORKGROUP, - NIR_MEMORY_ACQ_REL, nir_var_mem_shared); - } else if (shader->info.stage == MESA_SHADER_TESS_CTRL) { + NIR_MEMORY_ACQ_REL, nir_var_mem_shared); + break; + case MESA_SHADER_TESS_CTRL: nir_barrier(&b, SCOPE_WORKGROUP, SCOPE_WORKGROUP, - NIR_MEMORY_ACQ_REL, nir_var_shader_out); + NIR_MEMORY_ACQ_REL, nir_var_shader_out); + break; + case MESA_SHADER_TASK: + nir_barrier(&b, SCOPE_WORKGROUP, SCOPE_WORKGROUP, NIR_MEMORY_ACQ_REL, + nir_var_mem_task_payload | nir_var_mem_shared); + break; + case MESA_SHADER_MESH: + nir_barrier(&b, SCOPE_WORKGROUP, SCOPE_WORKGROUP, NIR_MEMORY_ACQ_REL, + nir_var_shader_out | nir_var_mem_shared); + break; + default: + UNREACHABLE("barrier() not supported in this shader stage"); } }