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