Mesa (master): spirv: Fix order of barriers in SpvOpControlBarrier

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 19 17:38:22 UTC 2019


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

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Thu Jul 18 20:48:14 2019 +0200

spirv: Fix order of barriers in SpvOpControlBarrier

Semantically, the memory barrier has to come first to wait
for the completion of pending memory requests.
Afterwards, the workgroups can be synchronized.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>

---

 src/compiler/spirv/spirv_to_nir.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index ea4aebb767c..76ccbfad514 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -3360,13 +3360,13 @@ vtn_handle_barrier(struct vtn_builder *b, SpvOp opcode,
    }
 
    case SpvOpControlBarrier: {
-      SpvScope execution_scope = vtn_constant_uint(b, w[1]);
-      if (execution_scope == SpvScopeWorkgroup)
-         vtn_emit_barrier(b, nir_intrinsic_barrier);
-
       SpvScope memory_scope = vtn_constant_uint(b, w[2]);
       SpvMemorySemanticsMask memory_semantics = vtn_constant_uint(b, w[3]);
       vtn_emit_memory_barrier(b, memory_scope, memory_semantics);
+
+      SpvScope execution_scope = vtn_constant_uint(b, w[1]);
+      if (execution_scope == SpvScopeWorkgroup)
+         vtn_emit_barrier(b, nir_intrinsic_barrier);
       break;
    }
 




More information about the mesa-commit mailing list