Freigeben über


ld_structured (sm5 - asm)

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

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
Element BESCHREIBUNG
Dest
[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 mit dem Lesen begonnen werden soll.
src0
Der Puffer, aus dem gelesen werden soll. Dieser Parameter muss eine SRV (t#), UAV (u#) sein. Im Compute-Shader kann es sich auch um freigegebenen Arbeitsspeicher der Threadgruppe (g#) handeln.

Hinweise

Die aus der -Struktur gelesenen Daten entsprechen dem folgenden Pseudocode: Wobei der Offset, die Adresse, der Zeiger auf den Pufferinhalt, der Schritt der Quelle und die daten linear gespeichert sind.

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

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 obigen Vorgangs übereinstimmen.

Bei der Adressierung außerhalb der Grenzen für u#/t# einer bestimmten 32-Bit-Komponente wird 0 für diese Komponente zurückgegeben, es sei denn, srcByteOffset, plus swizzle verursacht außerhalb der Grenzen zugriff auf You#/t#, ist der zurückgegebene Wert für alle Komponenten undefiniert.

Die Adressierung außerhalb der Grenzen für g# (die Grenzen dieses bestimmten g#, im Gegensatz zum gesamten freigegebenen Speicher) für eine bestimmte 32-Bit-Komponente gibt ein undefiniertes Ergebnis zurück.

srcByteOffset ist ein separates Argument von srcAddress , da es sich in der Regel um ein Literal handelt. Diese Parametertrennung wurde für Atomics 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 Shaderphasen:

Scheitelpunkt Hull Domain Geometrie Pixel Compute
X X X X X X

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

Scheitelpunkt Hull Domain 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.

Assembly des Shadermodells 5 (DirectX HLSL)