store _ structured (sm5 – asm)

Schreiben von 1-4 32-Bit-Komponenten mit wahlfreiem Zugriff in eine strukturierte, ungeordnete Pufferzugriffsansicht (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 schreibende Struktur.
src0
[in ] Die zu schreibende Komponenten.

Hinweise

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

dst0 muss ein UAV (u # ) sein. Im Compute-Shader kann es sich auch um freigegebenen Speicher der Threadgruppe # (g) befinden.

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 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 mit dem Verhalten des obigen Vorgangs übereinstimmen.

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.

Die Adressierung außerhalb der Grenzen für u # casued by dstAddress bedeutet, dass nichts in den Arbeitsspeicher außerhalb der Grenzen geschrieben wird.

Wenn dstByteOffset, einschließlich dstWriteMask, den Zugriff außerhalb der Grenzen auf Sie # verursacht, wird der gesamte Inhalt des UAV nicht definiert.

Die Adressierung außerhalb der Grenzen von g # (die Begrenzungen dieses bestimmten g # im Gegensatz zum gesamten freigegebenen Arbeitsspeicher) für eine bestimmte 32-Bit-Komponente bewirkt, dass der gesamte Inhalt des gesamten freigegebenen Speichers nicht definiert wird.

dstByteOffset ist ein separates Argument von dstAddress, da es sich häufig um ein Literal handelt. Diese Parametertrennung wurde für Atomaren 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 Shaderstufen:

Scheitelpunkt Rumpf Domain Geometrie Pixel Compute
X X

Da UAVs in allen Shaderstufen 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 Rumpf Domain Geometrie Pixel Compute
X X X X X X

Shader-Mindestmodell

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)