Mesa (master): spirv: add vtn_emit_make_{visible,available}_barrier helpers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Sep 1 17:29:35 UTC 2020


Module: Mesa
Branch: master
Commit: e01d1a9f16da86788c1bdc47d84fb630f46218eb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e01d1a9f16da86788c1bdc47d84fb630f46218eb

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Tue Aug 18 14:45:46 2020 +0100

spirv: add vtn_emit_make_{visible,available}_barrier helpers

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6090>

---

 src/compiler/spirv/vtn_variables.c | 41 +++++++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index a8dfcd8e933..b3948351670 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -2500,6 +2500,30 @@ vtn_mode_to_memory_semantics(enum vtn_variable_mode mode)
    }
 }
 
+static void
+vtn_emit_make_visible_barrier(struct vtn_builder *b, SpvMemoryAccessMask access,
+                              SpvScope scope, enum vtn_variable_mode mode)
+{
+   if (!(access & SpvMemoryAccessMakePointerVisibleMask))
+      return;
+
+   vtn_emit_memory_barrier(b, scope, SpvMemorySemanticsMakeVisibleMask |
+                                     SpvMemorySemanticsAcquireMask |
+                                     vtn_mode_to_memory_semantics(mode));
+}
+
+static void
+vtn_emit_make_available_barrier(struct vtn_builder *b, SpvMemoryAccessMask access,
+                                SpvScope scope, enum vtn_variable_mode mode)
+{
+   if (!(access & SpvMemoryAccessMakePointerAvailableMask))
+      return;
+
+   vtn_emit_memory_barrier(b, scope, SpvMemorySemanticsMakeAvailableMask |
+                                     SpvMemorySemanticsReleaseMask |
+                                     vtn_mode_to_memory_semantics(mode));
+}
+
 void
 vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
                      const uint32_t *w, unsigned count)
@@ -2617,13 +2641,8 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
       SpvMemoryAccessMask access;
       SpvScope scope;
       vtn_get_mem_operands(b, w, count, &idx, &access, &alignment, NULL, &scope);
-      if (access & SpvMemoryAccessMakePointerVisibleMask) {
-         SpvMemorySemanticsMask semantics =
-            SpvMemorySemanticsMakeVisibleMask |
-            SpvMemorySemanticsAcquireMask |
-            vtn_mode_to_memory_semantics(src->mode);
-         vtn_emit_memory_barrier(b, scope, semantics);
-      }
+
+      vtn_emit_make_visible_barrier(b, access, scope, src->mode);
 
       vtn_push_ssa_value(b, w[2], vtn_variable_load(b, src));
       break;
@@ -2667,13 +2686,7 @@ 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 (access & SpvMemoryAccessMakePointerAvailableMask) {
-         SpvMemorySemanticsMask semantics =
-            SpvMemorySemanticsMakeAvailableMask |
-            SpvMemorySemanticsReleaseMask |
-            vtn_mode_to_memory_semantics(dest->mode);
-         vtn_emit_memory_barrier(b, scope, semantics);
-      }
+      vtn_emit_make_available_barrier(b, access, scope, dest->mode);
       break;
    }
 



More information about the mesa-commit mailing list