store_structured (sm5 - asm)

將 1-4 32 位元件的隨機存取寫入至結構化緩衝區未排序存取檢視, (UAV) 。

store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
項目 描述
dest
[in]作業結果的位址。
dstAddress
[in]要寫入的位址。
dstByteOffset
[in]要寫入之結構的索引。
src0
[in]要寫入的元件。

備註

此指令會執行從 src0寫入至dstAddressdstByteOffset位址的 1-4 元件 *32 位元件。 沒有格式轉換。

dest 必須是 UAV (u#) 。 在計算著色器中,它也可以是執行緒群組共用記憶體 (g#) 。

dstAddress 會指定要寫入之結構的索引。

寫入的資料位置相當於下列虛擬程式碼,其中顯示位移、位址、緩衝區內容的指標、來源的步幅,以及以線性方式儲存的資料。

                    BYTE *BufferContents;             // from dest
                    UINT BufferStride;                // from dest
                    UINT dstAddress, dstByteOffset;   // source registers
                    BYTE *WriteLocation;              // value to calculate

                    // calculate writing location
                     WriteLocation = BufferContents 
                                + BufferStride * dstAddress 
                                + 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(INT32));

此虛擬程式碼示範作業的運作方式,但實際資料不需要以線性方式儲存。 如果資料不是以線性方式儲存,則指令的實際作業必須符合上述作業的行為。

dest 只能有下列其中一個寫入遮罩:.x、.xyz、.xyz、.xyzw。 寫入遮罩會決定要寫入的 32 位元件數目,而不會有間距。

dstAddress在 u# 上定址的界限外表示不會寫入超出界限記憶體。

如果 dstByteOffset包括 dstWriteMask,就是造成超出界限存取 you#的原因,UAV 的整個內容就會變成未定義。

g# 上的界限不足, (該特定 g# 的界限,相對於任何指定 32 位元件的所有共用記憶體) ,會導致所有共用記憶體的整個內容變成未定義。

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

cs_4_0和cs_4_1支援 UAV 和 TGSM 的此指示。

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

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

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

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

最小著色器模型

下列著色器模型中支援此指示:

著色器模型 支援
著色器模型 5
著色器模型 4.1
著色器模型 4
著色器模型 3 (DirectX HLSL)
著色器模型 2 (DirectX HLSL)
著色器模型 1 (DirectX HLSL)

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