Bagikan melalui


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

Shader Model 5 Assembly (DirectX HLSL)