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@intel.com>
This commit is contained in:
committed by
Caio Marcelo de Oliveira Filho
parent
4061a3f6c9
commit
e352b4d650
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user