store_structured (sm5 - asm)

Zufälliger Zugriff auf 1-4-32-Bit-Komponenten in eine strukturierte nicht angeordnete Zugriffsansicht (UAV).

store_structured dst0[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
Element BESCHREIBUNG
dst0
[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.

Bemerkungen

Diese Anweisung führt 1-4-Komponenten *32bit-Komponenten aus, die von src0 bis dst0 geschrieben wurden, an der Adresse in dstAddress und dstByteOffset. Keine Formatkonvertierung.

dst0 muss ein UAV (u#) sein. Im Compute-Shader kann es auch Threadgruppe freigegebenen Arbeitsspeicher (g#) sein.

dstAddress gibt den Index der zu schreibenden Struktur an.

Der Speicherort der geschriebenen Daten entspricht dem folgenden Pseudocode, der den Offset, die Adresse, den Zeiger auf den Pufferinhalt, den Schritt der Quelle und die daten, die linear gespeichert sind.

                    BYTE *BufferContents;             // from dst0
                    UINT BufferStride;                // from dst0
                    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 dem Verhalten des obigen Vorgangs entsprechen.

dst0 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 ohne Lücken geschrieben werden sollen.

Von dstAddress ausgehende Adressierung von u# bedeutet, dass nichts an den Außerhalb des gebundenen Arbeitsspeichers geschrieben wird.

Wenn das dstByteOffset, einschließlich dstWriteMask, die Ursache für den Zugriff auf Sie#verursacht, werden die gesamten Inhalte des UAV nicht definiert.

Die Adressierung auf g# (die Grenzen dieses bestimmten g#, im Gegensatz zu allen freigegebenen Arbeitsspeicher) für jede bestimmte 32-Bit-Komponente bewirkt, dass der gesamte Inhalt aller freigegebenen Speicher nicht definiert wird.

dstByteOffset ist ein separates Argument von dstAddress , da es häufig ein Literal ist. Diese Parametertrennung wurde für Atome auf strukturiertem Arbeitsspeicher nicht durchgeführt.

cs_4_0 und cs_4_1 diese Anweisung für UAV und TGSM unterstützen.

Diese Anweisung gilt für die folgenden Shaderphasen:

Scheitelpunkt Rumpf Domain Geometrie Pixel Compute
X X

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

Scheitelpunkt Rumpf Domain Geometrie Pixel Compute
X X X X X X

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