ld_structured (sm5 - asm)

從結構化緩衝區隨機讀取 1-4 32 位元件。

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
項目 描述
dest
[in]作業結果的位址。
srcAddress
[in]指定要讀取之結構的索引。
srcByteOffset
[in]指定要開始讀取的 結構中的位元組位移。
src0
要從中讀取的緩衝區。 此參數必須是 SRV (t#) 、UAV (u#) 。 在計算著色器中,它也可以是執行緒群組共用記憶體 (g#) 。

備註

從 結構讀取的資料相當於下列虛擬程式碼:我們在其中具有位移、位址、緩衝區內容的指標、來源的步進,以及以線性方式儲存的資料。

                    BYTE *BufferContents;         // from SRV or UAV
                    UINT BufferStride;            // from base resource
                    UINT srcAddress, srcByteOffset;   // from source registers
                    BYTE *ReadLocation;           // value to calculate
                    ReadLocation = BufferContents 
                                + BufferStride * srcAddress
                                + 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,除非 srcByteOffset加上 swizzle 是造成您#/t# 存取超出界限的原因,所有元件 () 未定義傳回的值。

在 g# 上定址超出範圍 (該特定 g# 的界限,相對於任何指定 32 位元件的所有共用記憶體) ,都會傳回未定義的結果。

srcByteOffset與 srcAddress 不同的引數,因為它通常是常值。 這個參數分隔尚未針對結構化記憶體上的不可部分完成。

cs_4_0和cs_4_1支援 UAV、SRV 和 TGSM 的這個指示。

本指示適用于下列著色器階段:

頂點 船體 網域 幾何形狀 像素 計算
X X X X X X

由於 Direct3D 11.1 的所有著色器階段都提供 UAV,因此本指示適用于 Direct3D 11.1 執行時間的 UAV 的所有著色器階段,從 Windows 8 開始提供。

頂點 船體 網域 幾何形狀 像素 計算
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 和 TGSM 支援此指示。

著色器模型 5 元件 (DirectX HLSL)