store_raw (sm5 - asm)

Penulisan akses acak komponen 1-4 32bit ke dalam memori tanpa jenis.

store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle]
Item Deskripsi
Dest
[in] Alamat memori.
dstByteOffset
[in] Offset.
src0
[in] Komponen yang akan ditulis.

Keterangan

Instruksi ini melakukan komponen 1-4 *komponen 32-bit yang ditulis dari src0 ke tujuan pada offset di dstByteOffset. Tidak ada konversi format.

dest harus UAV (u#), atau di shader komputasi juga dapat berupa memori bersama grup utas (g#).

dstByteOffset menentukan nilai dasar 32-bit dalam memori untuk jendela 4 nilai 32-bit berurutan di mana data dapat ditulis, tergantung pada swizzle dan mask pada parameter lain.

Lokasi data yang ditulis setara dengan pseudocode berikut yang menunjukkan alamat, penunjuk ke konten buffer, dan data yang disimpan secara linear.

                    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));

Pseudocode ini menunjukkan bagaimana fungsi operasi, tetapi data aktual tidak harus disimpan secara linier. dest hanya dapat memiliki masker tulis yang merupakan salah satu dari berikut ini: .x, .xy, .xyz, .xyzw. Masker tulis menentukan jumlah komponen 32bit untuk ditulis tanpa celah.

Di luar batas alamat pada u# berarti tidak ada yang ditulis ke memori di luar batas; setiap bagian yang berada dalam batas ditulis dengan benar.

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.

cs_4_0 dan cs_4_1 mendukung instruksi ini untuk UAV.

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)