atomic_cmp_store (sm5 - asm)

原子比较和写入内存。

atomic_cmp_store dest、dstAddress[.swizzle]、src0[.select_component]、src1[.select_component]
说明
dest
[in]要与 src0 进行比较的组件。 此值必须是 UAV) (u#) (无序访问视图。 在计算着色器中,也可以是线程组共享内存 (g#) 。
dstAddress
[in]内存地址。
src0
[in]要与 dest 进行比较的 32 位值。
src1
[in]如果比较值相同,则要写入内存的值。

备注

此指令执行操作数 src0dest 的单个组件 32 位值比较,每个组件地址 dstAddress 为 32 位。

如果比较值相同,则 src1 中的单组件 32 位值将写入目标内存。 否则,目标不会更改。

整个比较和写入操作以原子方式执行。

如果 dest 是 u#,则可以将其声明为原始、类型化或结构化。 如果已键入,则必须将其声明为 UINT/SINT,绑定资源格式为 R32_UINT/_SINT。

如果 dest 为 g#,则必须将其声明为原始或结构化。

从地址中提取的组件数由 dest u# 或 g# 的维数决定。

不会向着色器返回任何内容。

如果着色器调用处于非活动状态,例如,如果像素在执行之前已被丢弃,或者像素/样本指令根本不会改变 dest 内存, (无提示) 。

u# 上的越界寻址会导致不会将任何内容写入内存,除非 u# 是结构化的,并且结构 (地址) 的第二个组件中的字节偏移导致越界访问,则 UAV 的整个内容将变得未定义。

g# 上的边界外寻址 (该特定 g# 的边界,而不是所有共享内存) 会导致所有共享内存的整个内容变得未定义。

此指令适用于以下着色器阶段:

顶点 外壳 Geometry 像素 计算
X X

由于 UAV 可用于 Direct3D 11.1 的所有着色器阶段,因此本指令适用于 Direct3D 11.1 运行时的所有着色器阶段,该阶段从 Windows 8 开始可用。

顶点 外壳 Geometry 像素 计算
X X X X X X

最小着色器模型

以下着色器模型中支持此指令:

着色器模型 支持
着色器模型 5
着色器模型 4.1
着色器模型 4
着色器模型 3 (DirectX HLSL)
着色器模型 2 (DirectX HLSL)
着色器模型 1 (DirectX HLSL)

着色器模型 5 程序集 (DirectX HLSL)