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_alloc 和 imm_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) | 否 |