ac/nir: implement scoped_barrier
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5980>
This commit is contained in:
parent
6b99cf6064
commit
a8f8c02e7e
|
@ -3945,6 +3945,25 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
|
|||
case nir_intrinsic_memory_barrier_shared:
|
||||
emit_membar(&ctx->ac, instr);
|
||||
break;
|
||||
case nir_intrinsic_scoped_barrier: {
|
||||
assert(!(nir_intrinsic_memory_semantics(instr) &
|
||||
(NIR_MEMORY_MAKE_AVAILABLE | NIR_MEMORY_MAKE_VISIBLE)));
|
||||
|
||||
nir_variable_mode modes = nir_intrinsic_memory_modes(instr);
|
||||
|
||||
unsigned wait_flags = 0;
|
||||
if (modes & (nir_var_mem_global | nir_var_mem_ssbo))
|
||||
wait_flags |= AC_WAIT_VLOAD | AC_WAIT_VSTORE;
|
||||
if (modes & nir_var_mem_shared)
|
||||
wait_flags |= AC_WAIT_LGKM;
|
||||
|
||||
if (wait_flags)
|
||||
ac_build_waitcnt(&ctx->ac, wait_flags);
|
||||
|
||||
if (nir_intrinsic_execution_scope(instr) == NIR_SCOPE_WORKGROUP)
|
||||
ac_emit_barrier(&ctx->ac, ctx->stage);
|
||||
break;
|
||||
}
|
||||
case nir_intrinsic_memory_barrier_tcs_patch:
|
||||
break;
|
||||
case nir_intrinsic_control_barrier:
|
||||
|
|
Loading…
Reference in New Issue