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

Shadermodell 5-Assembly (DirectX HLSL)