Mesa (master): ac/nir: implement scoped_barrier
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 29 18:13:03 UTC 2020
Module: Mesa
Branch: master
Commit: a8f8c02e7eff7acf0c4dc8294526f137ceb39d42
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a8f8c02e7eff7acf0c4dc8294526f137ceb39d42
Author: Rhys Perry <pendingchaos02 at gmail.com>
Date: Fri Jul 17 19:16:08 2020 +0100
ac/nir: implement scoped_barrier
Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5980>
---
src/amd/llvm/ac_nir_to_llvm.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c
index 62b5d15a32b..ef6ab7cea92 100644
--- a/src/amd/llvm/ac_nir_to_llvm.c
+++ b/src/amd/llvm/ac_nir_to_llvm.c
@@ -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:
More information about the mesa-commit
mailing list