Mesa (staging/19.1): spirv: Fix order of barriers in SpvOpControlBarrier

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 26 07:46:42 UTC 2019


Module: Mesa
Branch: staging/19.1
Commit: 742f348d32557d9d1d3e5c598ff255a38ff89499
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=742f348d32557d9d1d3e5c598ff255a38ff89499

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>
(cherry picked from commit e352b4d650d37730e5087792b9a74ef31d1974ab)

---

 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 1a5d4c7988d..71957da235b 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -3391,13 +3391,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