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.