store_raw (sm5 - asm)
將 1-4 32 位元件的隨機存取寫入到無類型記憶體中。
store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
---|
項目 | 描述 |
---|---|
dest |
[in]記憶體位址。 |
dstByteOffset |
[in]位移。 |
src0 |
[in]要寫入的元件。 |
備註
此指令會執行從src0寫入的 1-4 元件 *32 位元件,以在 dstByteOffset中的位移處執行 dest。 沒有格式轉換。
dest 必須是 UAV (u#) ,或在計算著色器中也可以是執行緒群組共用記憶體 (g#) 。
dstByteOffset 會針對 4 個連續 32 位值的視窗指定記憶體中的基底 32 位值,根據其他參數上的撥動和遮罩而定。
寫入的資料位置相當於下列虛擬程式碼,其中顯示位址、緩衝區內容的指標,以及以線性方式儲存的資料。
BYTE *BufferContents; // from src0
UINT dstByteOffset; // source register
BYTE *WriteLocation; // value to calculate
// calculate writing location
WriteLocation = BufferContents
+ 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(UINT32));
此虛擬程式碼會顯示作業的運作方式,但實際資料不需要以線性方式儲存。 dest 只能有下列其中一個的寫入遮罩:.x、.xyz、.xyz、.xyzw。 寫入遮罩會決定要寫入且沒有間距的 32 位元件數目。
u# 上的界限外定址表示不會寫入超出界限記憶體;系結中的任何部分都會正確寫入。
在 g# 上定址超出範圍 (該特定 g# 的界限,相對於任何指定 32 位元件的所有共用記憶體) ,都會使所有共用記憶體的整個內容變成未定義。
cs_4_0和cs_4_1支援此 UAV 指示。
本指示適用于下列著色器階段:
頂點 | 船體 | 網域 | 幾何形狀 | 像素 | 計算 |
---|---|---|---|---|---|
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) | 否 |