store _ raw (sm5 - asm)

Schreibzugriff auf 1-4 32-Bit-Komponenten in typlosen Arbeitsspeicher.

store _ raw dst0 [ .write mask , _ ] dstByteOffset [ .select component , _ ] src0 [ .swizzle]
Element Beschreibung
dst0
[in ] Die Speicheradresse.
dstByteOffset
[in ] Der Offset.
src0
[in ] Die zu schreibenden Komponenten.

Hinweise

Diese Anweisung führt 1-4-Komponenten-32-Bit-Komponenten aus, die von * src0 in dst0 am Offset in dstByteOffset geschrieben werden. Es gibt keine Formatkonvertierung.

dst0 muss ein UAV (u) sein, oder im Compute-Shader kann es sich auch um freigegebenen Threadgruppenspeicher # (g ) # geben.

dstByteOffset gibt den 32-Bit-Basiswert im Arbeitsspeicher für ein Fenster mit vier sequenziellen 32-Bit-Werten an, in das Daten geschrieben werden können, je nach Swizzle und Maske für andere Parameter.

Der Speicherort der geschriebenen Daten entspricht dem folgenden Pseudocode, der die Adresse, den Zeiger auf den Pufferinhalt und die linear gespeicherten Daten zeigt.

                    BYTE *BufferContents;          // from src0
                    UINT dstByteOffset;            // source register
                    BYTE *WriteLocation;           // value to calculate

                    // calculate writing location
                    WriteLocation = BufferContents 
                                + 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(UINT32));

Dieser Pseudocode zeigt, wie der Vorgang funktioniert, aber die tatsächlichen Daten müssen nicht linear gespeichert werden. dst0 kann nur eine der folgenden Schreibmasken haben: .x, .xy, .xyz, .xyzw. Die Schreibmaske bestimmt die Anzahl der 32-Bit-Komponenten, die ohne Lücken geschrieben werden sollen.

Die Adressierung über grenzenlose Adressierung in u bedeutet, dass nichts in den arbeitsspeicherlosen Bereich geschrieben wird. Jeder Teil, der sich in Begrenzungen befindet, # wird ordnungsgemäß geschrieben.

Eine Nicht-Begrenzungs-Adressierung auf g (die Grenzen dieses bestimmten g im Gegensatz zum gesamten freigegebenen Speicher) für eine bestimmte # 32-Bit-Komponente führt dazu, dass der gesamte Inhalt des gesamten freigegebenen Speichers nicht definiert # wird.

cs _ 4 _ 0 und cs _ 4 _ 1 unterstützen diese Anweisung für UAV.

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.

Scheitelpunkt Rumpf 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

Shader Model 5-Assembly (DirectX HLSL)