imm_atomic_alloc (sm5 - asm)

使用 Count 或 Append 无序访问视图 (UAV) 以原子方式递增存储的隐藏 32 位计数器,返回原始值。

imm_atomic_alloc dest[.single_component_mask], dstUAV
说明
dest
[in]包含返回的计数器值。
dstUAV
[in]具有 Count 或 Append 标志的结构化缓冲区 UAV。

备注

每个 Count 或 Append Buffer 视图都有一个隐藏的无符号 32 位整数计数器值,该值在视图绑定到管道时初始化,包括用于保留上一个值的选项。

此指令对计数器值执行原子递增,将原始值返回到 dest

对于追加 UAV,返回的值仅在着色器调用期间有效。 之后,实现可能会重新排列内存布局。 基于返回值的任何内存寻址必须限制为着色器调用。

对于 Append UAV,在着色器调用中,HLSL 编译器可以使用返回的值作为用于访问结构化缓冲区的结构索引。 访问除调用 () imm_atomic_alloc或_consume调用返回的那些位置以外的任何结构索引会产生未定义的结果,即 UAV 中访问的内存位置是随机的,并且仅在着色器调用的生存期内固定。

对于 Count UAV,应用程序可以将返回的值保存为对 UAV 中某个固定位置的引用,该位置在着色器调用结束后有意义。 始终可以访问计数 UAV 中的任何位置,而不管计数值是什么。

没有计数的固定,因此它会在溢出时进行包装。

同一着色器不能尝试 在同一 UAV 上imm_atomic_alloc和 imm_atomic_consume 。 此外,GPU 不能允许多个着色器调用在同一 UAV 上混合 imm_atomic_allocimm_atomic_consume

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

顶点 外壳 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)