atomic_cmp_store (sm5 - asm)
Atomic compare and write to memory.
atomic_cmp_store dest, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Item | Description |
---|---|
dest |
[in] The components to compare with src0. This value must be an unordered access view (UAV) (u#). In the compute shader it can also be thread group shared memory (g#). |
dstAddress |
[in] The memory address. |
src0 |
[in] The 32-bit value to compare with dest. |
src1 |
[in] The value to write to memory if the compared values are identical. |
Remarks
This instruction performs a single component 32-bit value compare of operand src0 with dest at 32-bit per component address dstAddress.
If the compared values are identical, the single-component 32-bit value in src1 is written to destination memory. Otherwise, the destination is not changed.
The entire compare and write operation is performed atomically.
If dest is a u#, it can be declared as raw, typed or structured. If typed, it must be declared as UINT/SINT with the bound resource format being R32_UINT/_SINT.
If dest is g#, it must be declared as raw or structured.
The number of components taken from the address is determined by the dimensionality of dest u# or g#.
Nothing is returned to the shader.
If the shader invocation is inactive, for example if the pixel has been discarded earlier in its execution, or a pixel/sample instruction does not alter the dest memory at all (silently).
Out of bounds addressing on u# causes nothing to be written to memory, except if the u# is structured, and byte offset into the struct (second component of the address) is causing the out of bounds access, then the entire contents of the UAV become undefined.
Out of bounds addressing on g# (the bounds of that particular g#, as opposed to all shared memory) causes the entire contents of all shared memory to become undefined.
This instruction applies to the following shader stages:
Vertex | Hull | Domain | Geometry | Pixel | Compute |
---|---|---|---|---|---|
X | X |
Because UAVs are available at all shader stages for Direct3D 11.1, this instruction applies to all shader stages for the Direct3D 11.1 runtime, which is available starting with Windows 8.
Vertex | Hull | Domain | Geometry | Pixel | Compute |
---|---|---|---|---|---|
X | X | X | X | X | X |
Minimum Shader Model
This instruction is supported in the following shader models:
Shader Model | Supported |
---|---|
Shader Model 5 | yes |
Shader Model 4.1 | no |
Shader Model 4 | no |
Shader Model 3 (DirectX HLSL) | no |
Shader Model 2 (DirectX HLSL) | no |
Shader Model 1 (DirectX HLSL) | no |