store_structured (sm5 - asm)
Zufälliger Schreibzugriff von 1-4 32-Bit-Komponenten in eine strukturierte Puffer-Unordered Access View (UAV).
store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle] |
---|
Element | BESCHREIBUNG |
---|---|
Dest |
[in] Die Adresse der Ergebnisse des Vorgangs. |
dstAddress |
[in] Die Adresse, an der geschrieben werden soll. |
dstByteOffset |
[in] Der Index der zu schreibenden Struktur. |
src0 |
[in] Die zu schreibenden Komponenten. |
Hinweise
Diese Anweisung führt 1-4-Komponenten *32-Bit-Komponenten aus, die von src0 in dest an der Adresse in dstAddress und dstByteOffset geschrieben werden. Keine Formatkonvertierung.
dest muss ein UAV (u#) sein. Im Compute-Shader kann es sich auch um freigegebenen Threadgruppenspeicher (g#) handeln.
dstAddress gibt den Index der zu schreibenden Struktur an.
Die Position der geschriebenen Daten entspricht dem folgenden Pseudocode, der den Offset, die Adresse, den Zeiger auf den Pufferinhalt, den Schritt der Quelle und die linear gespeicherten Daten anzeigt.
BYTE *BufferContents; // from dest
UINT BufferStride; // from dest
UINT dstAddress, dstByteOffset; // source registers
BYTE *WriteLocation; // value to calculate
// calculate writing location
WriteLocation = BufferContents
+ BufferStride * dstAddress
+ 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(INT32));
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.
dest kann nur über eine Schreibmaske verfügen, die eine der folgenden ist: .x, .xy, .xyz, .xyzw. Die Schreibmaske bestimmt die Anzahl der 32-Bit-Komponenten, die lückenlos geschrieben werden sollen.
Out of bounds address on u# casued by dstAddress bedeutet, dass nichts in den Out-of-Bounds-Speicher geschrieben wird.
Wenn das dstByteOffset, einschließlich dstWriteMask, der Zugriff außerhalb der Grenzen auf Sie# verursacht, wird der gesamte Inhalt des UAV nicht definiert.
Out of bounds addressing on g# (the bounds of that particular g#, as as all shared memory) for any given 32-bit component that the all contents of all shared memory to unefined.
dstByteOffset ist ein separates Argument von dstAddress , da es sich in der Regel um ein Literal handelt. Diese Parametertrennung wurde für Atome im strukturierten Speicher nicht durchgeführt.
cs_4_0 und cs_4_1 unterstützen diese Anweisung für UAV und TGSM.
Diese Anweisung gilt für die folgenden Shaderphasen:
Scheitelpunkt | Hull | Domain | Geometrie | Pixel | Compute |
---|---|---|---|---|---|
X | X |
Da UAVs in allen Shaderphasen für Direct3D 11.1 verfügbar sind, gilt diese Anweisung für alle Shaderstufen 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 |