## Expand description

SPIR-V Instrinics

This module is intended as a low level abstraction over SPIR-V instructions. These functions will typically map to a single instruction, and will perform no additional safety checks beyond type-checking.

## Traits

- Index into an array without bounds checking.

## Functions

- Result is true if all components of
`vector`

is true, otherwise result is false. - Blocks execution of all threads in a group until all memory accesses have been completed.
- Blocks execution of all threads in a group until all memory accesses have been completed and all threads in the group have reached this call.
- Result is true if any component of
`vector`

is true, otherwise result is false. - atomic_and
^{⚠}Perform the following steps atomically with respect to any other atomic accesses within Scope to the same location: - Perform the following steps atomically with respect to any other atomic accesses within
`SCOPE`

to the same location: - atomic_exchange
^{⚠}Perform the following steps atomically with respect to any other atomic accesses within`SCOPE`

to the same location: - atomic_f_add
^{⚠}Perform the following steps atomically with respect to any other atomic accesses within`SCOPE`

to the same location: - atomic_f_max
^{⚠}Perform the following steps atomically with respect to any other atomic accesses within Scope to the same location: - atomic_f_min
^{⚠}Perform the following steps atomically with respect to any other atomic accesses within Scope to the same location: - atomic_i_add
^{⚠}`SCOPE`

to the same location: `SCOPE`

to the same location:`SCOPE`

to the same location:- atomic_i_sub
^{⚠}`SCOPE`

to the same location: - atomic_load
^{⚠}Atomically load through`ptr`

using the given`SEMANTICS`

. All subparts of the value that is loaded are read atomically with respect to all other atomic accesses to it within`SCOPE`

. - atomic_or
^{⚠} - atomic_s_max
^{⚠} - atomic_s_min
^{⚠} - atomic_store
^{⚠}Atomically store through`ptr`

using the given`SEMANTICS`

. All subparts of`value`

are written atomically with respect to all other atomic accesses to it within`SCOPE`

. - atomic_u_max
^{⚠} - atomic_u_min
^{⚠} - atomic_xor
^{⚠} - control_barrier
^{⚠}Wait for other invocations of this module to reach the current point of execution. - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Returns the same result as either`ddx_fine`

or`ddx_coarse`

, selection of which one is dependent on external factors. - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Uses local differencing based on the value of`component`

for the current fragment’s neighbors, and possibly, but not necessarily, includes the value of`component`

for the current fragment. That is, over a given area, the implementation can compute X derivatives in fewer unique locations than would be allowed by`ddx_fine`

. - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Uses local differencing based on the value of`component`

for the current fragment’s neighbors, and possibly, but not necessarily, includes the value of`component`

for the current fragment. That is, over a given area, the implementation can compute X derivatives in fewer unique locations than would be allowed by`ddx_fine`

. - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Uses local differencing based on the value of`component`

for the current fragment and its immediate neighbor(s). - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Uses local differencing based on the value of`component`

for the current fragment and its immediate neighbor(s). - Returns the partial derivative of
`component`

with respect to the window’s X coordinate. Returns the same result as either`ddx_fine`

or`ddx_coarse`

, selection of which one is dependent on external factors. - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Returns the same result as either`ddy_fine`

or`ddy_coarse`

, selection of which one is dependent on external factors. - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Uses local differencing based on the value of`component`

for the current fragment’s neighbors, and possibly, but not necessarily, includes the value of`component`

for the current fragment. That is, over a given area, the implementation can compute Y derivatives in fewer unique locations than would be allowed by`ddy_fine`

. - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Uses local differencing based on the value of`component`

for the current fragment’s neighbors, and possibly, but not necessarily, includes the value of`component`

for the current fragment. That is, over a given area, the implementation can compute Y derivatives in fewer unique locations than would be allowed by`ddy_fine`

. - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Uses local differencing based on the value of`component`

for the current fragment and its immediate neighbor(s). - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Uses local differencing based on the value of`component`

for the current fragment and its immediate neighbor(s). - Returns the partial derivative of
`component`

with respect to the window’s Y coordinate. Returns the same result as either`ddy_fine`

or`ddy_coarse`

, selection of which one is dependent on external factors. - Demote fragment shader invocation to a helper invocation. Equivalvent to
`discard()`

in HLSL. Any stores to memory after this instruction are suppressed and the fragment does not write outputs to the framebuffer. - Blocks execution of all threads in a group until all device memory accesses have been completed.
- Blocks execution of all threads in a group until all device memory accesses have been completed and all threads in the group have reached this call.
- Emits the current values of all output variables to the current output primitive. After execution, the values of all output variables are undefined.
- emit_vertex
^{⚠}Emits the current values of all output variables to the current output primitive. After execution, the values of all output variables are undefined. Requires capability`Geometry`

. - end_primitive
^{⚠}Finish the current primitive and start a new one. No vertex is emitted. Requires capability`Geometry`

. - Finish the current primitive and start a new one. No vertex is emitted.
- execute_callable
^{⚠}Invoke a callable shader. - Returns the sum of the absolute values of
`ddx_coarse`

and`ddy_coarse`

as a single operation. - Returns the sum of the absolute values of
`ddx_coarse`

and`ddy_coarse`

as a single operation. - Ignores the current potential intersection, terminating the invocation that executes it, and continues the ray traversal. This instruction is allowed only in
`any_hit`

execution model. - Returns
`true`

if the invocation is currently a helper invocation, otherwise result is`false`

. An invocation is currently a helper invocation if it was originally invoked as a helper invocation or if it has been demoted to a helper invocation by demote_to_helper_invocation. - Fragment-shader discard. Equivalvent to
`discard()`

from GLSL - memory_barrier
^{⚠}Control the order that memory accesses are observed. - Reports an intersection back to the traversal infrastructure.
- Compute the maximum of two signed integers via a GLSL extended instruction.
- Compute the minimum of two signed integers via a GLSL extended instruction.
- terminate_ray
^{⚠}Terminates the invocation that executes it, stops the ray traversal, accepts the current hit, and invokes the`closest_hit`

execution model (if active). This instruction is allowed only in the`any_hit`

execution model. - Compute the maximum of two unsigned integers via a GLSL extended instruction.
- Compute the minimum of two unsigned integers via a GLSL extended instruction.
- Extract a single, dynamically selected, component of a vector.
- Make a copy of a vector, with a single, variably selected, component modified.
- Blocks execution of all threads in a group until all group shared accesses have been completed.
- Blocks execution of all threads in a group until all group shared accesses have been completed and all threads in the group have reached this call.