ld_raw (sm5 - asm)

从原始缓冲区随机读取 1-4 32 位组件。

ld_raw dest[.mask]、srcByteOffset[.select_component]、src0[.swizzle]
说明
dest
[in]操作结果的地址。
srcByteOffset
[in]指定要从中读取的偏移量。
src0
[in]要读取的组件。

备注

src0 必须是:

  • 任何着色器阶段:SRV (t#) ld st
  • 计算着色器或像素着色器:UAV (u#)
  • 计算着色器:线程组共享内存 (g#)

srcByteOffset 为可以读取数据的 4 个连续 32 位值的窗口指定内存中的基本 32 位值,具体取决于其他参数的重排和掩码。

从原始缓冲区读取的数据等效于以下伪代码:其中,我们具有偏移量、地址、指向缓冲区内容的指针、源的步长以及以线性方式存储的数据。

                    BYTE *BufferContents;         // from src0
                    UINT srcByteOffset;           // from srcByteOffset
                    BYTE *ReadLocation;           // value to calculate
                    ReadLocation = BufferContents 
                                + srcByteOffset;

                    UINT32 Temp[4];  // used to make code shorter

                    // apply the source resource swizzle on source data
                    Temp = read_and_swizzle(ReadLocation, srcSwizzle);

                    // write the components to the output based on mask
                    ApplyWriteMask(dstRegister, dstWriteMask, Temp);

任何给定 32 位组件的 u#/t# 上的边界寻址将返回该组件的 0。

g# 上的边界寻址 (该特定 g# 的边界,而不是任何给定 32 位组件的所有共享内存) 返回未定义的结果。

cs_4_0和cs_4_1支持适用于 UAV 和 SRV 的此说明。

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

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

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

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

最小着色器模型

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

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

cs_4_0和cs_4_1支持适用于 UAV 和 SRV 的此说明。

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