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寫入至dstAddress 和 dstByteOffset位址的 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) | 否 |