glsl: support barrier() for task and mesh shader
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

It was ignored when translating glsl to nir.

Fixes: d52452a486 ("glsl: allow barrier builtin functions for mesh shader")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38692>
This commit is contained in:
Qiang Yu 2025-11-27 17:09:47 +08:00 committed by Marge Bot
parent 9e37969179
commit 2f6a034528

View file

@ -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");
}
}