ld _ structured (sm5 - asm)

Zufälliger Lesezugriff von 1-4 32-Bit-Komponenten aus einem strukturierten Puffer.

: ld _ structured dst0 [ .mask ] , srcAddress [ .select component , _ ] srcByteOffset [ .select component , _ ] src0 [ .swizzle]
Element Beschreibung
dst0
[in ] Die Adresse der Ergebnisse des Vorgangs.
srcAddress
[in ] Gibt den Index der zu lesenden Struktur an.
srcByteOffset
[in ] Gibt den Byteoffset in der -Struktur an, von der aus gelesen werden soll.
src0
Der Puffer, aus dem gelesen werden soll. Dieser Parameter muss ein SRV (t # ), UAV (u # ) sein. Im Compute-Shader kann es sich auch um gemeinsam genutzten Threadgruppenspeicher (g ) # sein.

Hinweise

Die aus der -Struktur gelesenen Daten entsprechen dem folgenden Pseudocode: hier haben wir den Offset, die Adresse, den Zeiger auf den Pufferinhalt, den Schritt der Quelle und die linear gespeicherten Daten.

                    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 * srcByteOffset
                                + srcOffset;

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

Dieser Pseudocode zeigt, wie der Vorgang funktioniert, aber die tatsächlichen Daten müssen nicht linear gespeichert werden. Wenn die Daten nicht linear gespeichert werden, muss der tatsächliche Vorgang der Anweisung mit dem Verhalten des oben genannten Vorgangs übereinstimmen.

Die Adressierung außerhalb der Grenzen für u /t einer bestimmten 32-Bit-Komponente gibt 0 für diese Komponente zurück, außer wenn # # srcByteOffset und swizzle den Zugriff außerhalb der Grenzen für # Sie /t verursacht, ist der zurückgegebene Wert für alle Komponenten # nicht definiert.

Die Adressierung für g (die Grenzen dieses bestimmten g im Gegensatz zum freigegebenen Speicher) für eine bestimmte # 32-Bit-Komponente gibt ein nicht definiertes # Ergebnis zurück.

srcByteOffset ist ein separates Argument von srcAddress, da es sich im Allgemeinen um ein Literal handelt. Diese Parametertrennung wurde für Atomardaten im strukturierten Speicher nicht durchgeführt.

cs _ 4 _ 0 und cs _ 4 1 unterstützen diese Anweisung für _ UAV, SRV und TGSM.

Diese Anweisung gilt für die folgenden Shaderstufen:

Scheitelpunkt Rumpf Domäne Geometrie Pixel Compute
X X X X X X

Da UAVs in allen Shaderstufen für Direct3D 11.1 verfügbar sind, gilt diese Anweisung für alle Shaderstufen für UAVs für die Direct3D 11.1-Runtime, die ab Windows 8.

Scheitelpunkt Rumpf Domäne Geometrie Pixel Compute
X X X X X X

Minimales Shadermodell

Diese Anweisung wird in den folgenden Shadermodellen unterstützt:

Shadermodell Unterstützt
Shadermodell 5 Ja
Shadermodell 4.1 Nein
Shadermodell 4 Nein
Shadermodell 3 (DirectX HLSL) Nein
Shadermodell 2 (DirectX HLSL) Nein
Shadermodell 1 (DirectX HLSL) Nein

cs _ 4 _ 0 und cs _ 4 1 unterstützen diese Anweisung für _ UAV, SRV und TGSM.

Shader Model 5-Assembly (DirectX HLSL)