Function spirv_std::arch::control_barrier
source · pub unsafe fn control_barrier<const EXECUTION: u32, const MEMORY: u32, const SEMANTICS: u32>(
)
Expand description
Wait for other invocations of this module to reach the current point of execution.
All invocations of this module within Execution scope reach this point of execution before any invocation proceeds beyond it.
When Execution is crate::memory::Scope::Workgroup
or larger, behavior is
undefined unless all invocations within Execution execute the same dynamic
instance of this instruction. When Execution is Subgroup or Invocation, the
behavior of this instruction in non-uniform control flow is defined by the
client API.
If crate::memory::Semantics
is not crate::memory::Semantics::NONE
,
this instruction also serves as an memory_barrier
function call, and
also performs and adheres to the description and semantics of an
memory_barrier
function with the same MEMORY
and SEMANTICS
operands.
This allows atomically specifying both a control barrier and a memory
barrier (that is, without needing two instructions). If
crate::memory::Semantics
is crate::memory::Semantics::NONE
, MEMORY
is ignored.
Before SPIRV-V version 1.3, it is only valid to use this instruction with
TessellationControl
, GLCompute
, or Kernel
execution models. There is
no such restriction starting with version 1.3.
If used with the TessellationControl
execution model, it also implicitly
synchronizes the output
storage class: Writes to output
variables
performed by any invocation executed prior to a control_barrier
are
visible to any other invocation proceeding beyond that control_barrier
.