store_raw (sm5 - asm)

将 1-4 32 位组件随机访问写入无类型内存。

store_raw dest[.write_mask]、 dstByteOffset[.select_component]、 src0[.swizzle]
说明
dest
[in]内存地址。
dstByteOffset
[in]偏移量。
src0
[in]要写入的组件。

备注

此指令在 dstByteOffset 中的偏移量处执行从 src0 写入到 dest 的 1-4 分量 *32 位组件。 无需格式转换。

dest 必须是 UAV (u#) ,或者在计算着色器中,它也可以是线程组共享内存 (g#) 。

dstByteOffset 为 4 个连续 32 位值的窗口(根据其他参数的重排和掩码)指定内存中的基本 32 位值。

写入的数据的位置等效于以下伪代码,该伪代码显示地址、指向缓冲区内容的指针以及线性存储的数据。

                    BYTE *BufferContents;          // from src0
                    UINT dstByteOffset;            // source register
                    BYTE *WriteLocation;           // value to calculate

                    // calculate writing location
                    WriteLocation = BufferContents 
                                + dstByteOffset;

                    // calculate the number of components to write
                    switch (dstWriteMask)
                    {
                        x:    WriteComponents = 1; break;
                        xy:   WriteComponents = 2; break;
                        xyz:  WriteComponents = 3; break;
                        xyzw: WriteComponents = 4; break;
                        default:  // only these masks are valid                              
                    }

                    // copy the data from the source register with
                    //    the swizzle applied
                    memcpy(WriteLocation, swizzle(src0, src0.swizzle), 
                             WriteComponents * sizeof(UINT32));

此伪代码显示操作的工作方式,但实际数据不必以线性方式存储。 dest 只能具有以下项之一的写入掩码:.x、.xy、.xyz、.xyzw。 写入掩码确定要写入且没有间隔的 32 位组件的数量。

u# 上的越界寻址意味着不会向边界外内存写入任何内容;边界内的任何部分都正确写入。

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

cs_4_0和cs_4_1支持此 UAV 指令。

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

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