store_structured (sm5 - asm)
Tulis akses acak komponen 1-4 32-bit ke dalam tampilan akses tanpa urutan buffer terstruktur (UAV).
store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle] |
---|
Item | Deskripsi |
---|---|
Dest |
[in] Alamat hasil operasi. |
dstAddress |
[in] Alamat untuk menulis. |
dstByteOffset |
[in] Indeks struktur yang akan ditulis. |
src0 |
[in] Komponen yang akan ditulis. |
Keterangan
Instruksi ini melakukan komponen 1-4 *32bit komponen yang ditulis dari src0 ke tujuan di alamat di dstAddress dan dstByteOffset. Tidak ada konversi format.
dest harus UAV (u#). Dalam shader komputasi juga dapat berupa grup utas memori bersama (g#).
dstAddress menentukan indeks struktur yang akan ditulis.
Lokasi data yang ditulis setara dengan pseudocode berikut yang menunjukkan offset, alamat, penunjuk ke konten buffer, langkah sumber, dan data yang disimpan secara linier.
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));
Pseudocode ini menunjukkan bagaimana fungsi operasi, tetapi data aktual tidak harus disimpan secara linier. Jika data tidak disimpan secara linier, operasi aktual instruksi harus sesuai dengan perilaku operasi di atas.
dest hanya dapat memiliki masker tulis yang merupakan salah satu dari berikut ini: .x, .xy, .xyz, .xyzw. Masker tulis menentukan jumlah komponen 32-bit untuk ditulis tanpa celah.
Di luar batas alamat pada u# yang diasumsikan oleh dstAddress berarti tidak ada yang ditulis ke memori di luar batas.
Jika dstByteOffset, termasuk dstWriteMask, adalah apa yang menyebabkan akses keluar dari batas ke Anda#, seluruh konten UAV menjadi tidak terdefinisi.
Di luar batas alamat pada g# (batas g#tertentu, dibandingkan dengan semua memori bersama) untuk komponen 32-bit tertentu menyebabkan seluruh konten semua memori bersama menjadi tidak terdefinisi.
dstByteOffset adalah argumen terpisah dari dstAddress karena biasanya harfiah. Pemisahan parameter ini belum dilakukan untuk atomik pada memori terstruktur.
cs_4_0 dan cs_4_1 mendukung instruksi ini untuk UAV dan TGSM.
Instruksi ini berlaku untuk tahap shader berikut:
Puncak | Hull | Domain | Geometri | Pixel | Compute |
---|---|---|---|---|---|
X | X |
Karena UAV tersedia di semua tahap shader untuk Direct3D 11.1, instruksi ini berlaku untuk semua tahap shader untuk runtime Direct3D 11.1, yang tersedia dimulai dengan Windows 8.
Puncak | Hull | Domain | Geometri | Pixel | Compute |
---|---|---|---|---|---|
X | X | X | X | X | X |
Minimum Shader Model
Instruksi ini didukung dalam model shader berikut:
Shader Model | Didukung |
---|---|
Model Shader 5 | ya |
Model Shader 4.1 | tidak |
Model Shader 4 | tidak |
Shader Model 3 (DirectX HLSL) | tidak |
Shader Model 2 (DirectX HLSL) | tidak |
Shader Model 1 (DirectX HLSL) | tidak |