Mesa (master): spirv: Handle MakePointerAvailable/Visible
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Oct 24 19:31:49 UTC 2019
Module: Mesa
Branch: master
Commit: b8784fe65252f82ee528459ec876c43b8586cac3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8784fe65252f82ee528459ec876c43b8586cac3
Author: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Date: Tue Sep 10 13:21:08 2019 -0700
spirv: Handle MakePointerAvailable/Visible
Emit barriers with semantics matching the access operand and the
storage class of the pointer.
v2: Fix order of visible / available emission relative to the
operations. (Bas)
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
---
src/compiler/spirv/vtn_variables.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 52802ba5162..188931ec77b 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -2533,6 +2533,22 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
return;
}
+ if (count > 4) {
+ unsigned idx = 5;
+ SpvMemoryAccessMask access = w[4];
+ if (access & SpvMemoryAccessAlignedMask)
+ idx++;
+
+ if (access & SpvMemoryAccessMakePointerVisibleMask) {
+ SpvMemorySemanticsMask semantics =
+ SpvMemorySemanticsMakeVisibleMask |
+ vtn_storage_class_to_memory_semantics(src->ptr_type->storage_class);
+
+ SpvScope scope = vtn_constant_uint(b, w[idx]);
+ vtn_emit_memory_barrier(b, scope, semantics);
+ }
+ }
+
vtn_push_ssa(b, w[2], res_type, vtn_variable_load(b, src));
break;
}
@@ -2582,6 +2598,22 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
struct vtn_ssa_value *src = vtn_ssa_value(b, w[2]);
vtn_variable_store(b, src, dest);
+
+ if (count > 3) {
+ unsigned idx = 4;
+ SpvMemoryAccessMask access = w[3];
+
+ if (access & SpvMemoryAccessAlignedMask)
+ idx++;
+
+ if (access & SpvMemoryAccessMakePointerAvailableMask) {
+ SpvMemorySemanticsMask semantics =
+ SpvMemorySemanticsMakeAvailableMask |
+ vtn_storage_class_to_memory_semantics(dest->ptr_type->storage_class);
+ SpvScope scope = vtn_constant_uint(b, w[idx]);
+ vtn_emit_memory_barrier(b, scope, semantics);
+ }
+ }
break;
}
More information about the mesa-commit
mailing list