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 支援此指示。