store_raw (sm5 - asm)
Zufälliger Schreibzugriff von 1-4 32-Bit-Komponenten in typlosen Arbeitsspeicher.
store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
---|
Element | BESCHREIBUNG |
---|---|
Dest |
[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 dest am Offset in dstByteOffset geschrieben wurden. Es gibt keine Formatkonvertierung.
dest muss ein UAV (u#) sein, oder im Compute-Shader kann es sich auch um freigegebenen Threadgruppenspeicher (g#) handeln.
dstByteOffset gibt den 32-Bit-Basiswert im Arbeitsspeicher für ein Fenster mit vier sequenziellen 32-Bit-Werten an, in das Daten je nach Swizzle und Maskierung für andere Parameter geschrieben werden können.
Der Speicherort der geschriebenen Daten entspricht dem folgenden Pseudocode, der die Adresse, den Zeiger auf den Pufferinhalt und die linear gespeicherten Daten anzeigt.
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. 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-Adressierung auf u# bedeutet, dass nichts in den Arbeitsspeicher außerhalb der Grenzen geschrieben wird. alle Teile, die sich in Begrenzungen befindet, werden korrekt geschrieben.
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.
cs_4_0 und cs_4_1 unterstützen diese Anweisung für UAV.
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 |