ld_structured (sm5 - asm)

Baca akses acak komponen 1-4 32bit dari buffer terstruktur.

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
Item Deskripsi
Dest
[in] Alamat hasil operasi.
srcAddress
[in] Menentukan indeks struktur yang akan dibaca.
srcByteOffset
[in] Menentukan offset byte dalam struktur untuk mulai membaca.
src0
Buffer untuk dibaca. Parameter ini harus berupa SRV (t#), UAV (u#). Dalam shader komputasi juga dapat berupa grup utas memori bersama (g#).

Keterangan

Data yang dibaca dari struktur setara dengan pseudocode berikut: di mana kita memiliki offset, alamat, penunjuk ke konten buffer, langkah sumber, dan data yang disimpan secara linier.

                    BYTE *BufferContents;         // from SRV or UAV
                    UINT BufferStride;            // from base resource
                    UINT srcAddress, srcByteOffset;   // from source registers
                    BYTE *ReadLocation;           // value to calculate
                    ReadLocation = BufferContents 
                                + BufferStride * srcAddress
                                + srcByteOffset;

                    UINT32 Temp[4];  // used to make code shorter

                    // apply the source resource swizzle on source data
                    Temp = read_and_swizzle(ReadLocation, srcSwizzle);

                    // write the components to the output based on mask
                    ApplyWriteMask(dstRegister, dstWriteMask, Temp);

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.

Alamat di luar batas pada u#/t# dari komponen 32-bit tertentu mengembalikan 0 untuk komponen tersebut, kecuali jika srcByteOffset, ditambah swizzle adalah apa yang menyebabkan akses keluar dari batas ke Anda#/t#, nilai yang dikembalikan untuk semua komponen tidak terdefinisi.

Di luar batas alamat pada g# (batas g#tertentu, dibandingkan dengan semua memori bersama) untuk komponen 32-bit tertentu mengembalikan hasil yang tidak terdefinisi.

srcByteOffset adalah argumen terpisah dari srcAddress 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, SRV, dan TGSM.

Instruksi ini berlaku untuk tahap shader berikut:

Puncak Hull Domain Geometri Pixel Compute
X X X X X X

Karena UAV tersedia di semua tahap shader untuk Direct3D 11.1, instruksi ini berlaku untuk semua tahap shader untuk UAV 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

cs_4_0 dan cs_4_1 mendukung instruksi ini untuk UAV, SRV, dan TGSM.

Shader Model 5 Assembly (DirectX HLSL)