Share via


store_raw (sm5 - asm)

Scrittura casuale di accesso casuale di componenti da 1 a 4 32 bit in memoria senza tipi.

store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle]
Elemento Descrizione
Dest
[in] Indirizzo di memoria.
dstByteOffset
[in] Offset.
src0
[in] Componenti da scrivere.

Commenti

Questa istruzione esegue componenti a 1-4 bit *32 bit scritti da src0 al massimo all'offset in dstByteOffset. Non esiste alcuna conversione di formato.

dest deve essere un UAV (u#) o nel compute shader può essere anche la memoria condivisa del gruppo di thread (g#).

dstByteOffset specifica il valore di base a 32 bit in memoria per una finestra di 4 valori sequenziali a 32 bit in cui i dati possono essere scritti, a seconda dello swizzle e della maschera su altri parametri.

La posizione dei dati scritti equivale allo pseudocode seguente che mostra l'indirizzo, il puntatore al contenuto del buffer e i dati archiviati in modo lineare.

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

Questo pseudocodice mostra come funziona l'operazione, ma i dati effettivi non devono essere archiviati in modo lineare. dest può avere solo una maschera di scrittura che è una delle seguenti: .x, .xy, .xyz, .xyzw. La maschera di scrittura determina il numero di componenti a 32 bit da scrivere senza lacune.

L'indirizzamento non limitato su u# significa che non viene scritto nulla nella memoria non associata; qualsiasi parte presente nei limiti viene scritta correttamente.

L'indirizzamento out of bounds on g# (i limiti di quel determinato g#, anziché a tutti i componenti condivisi) per qualsiasi componente a 32 bit determinato causa l'indefinimento dell'intero contenuto di tutta la memoria condivisa.

cs_4_0 e cs_4_1 supportano questa istruzione per L'UAV.

Questa istruzione si applica alle fasi dello shader seguenti:

Vertice Scafo Dominio Geometria Pixel Calcolo
X X

Poiché le UAV sono disponibili in tutte le fasi shader per Direct3D 11.1, questa istruzione si applica a tutte le fasi dello shader per il runtime Direct3D 11.1, disponibile a partire da Windows 8.

Vertice Scafo Dominio Geometria Pixel Calcolo
X X X X X X

Modello di shader minimo

Questa istruzione è supportata nei modelli shader seguenti:

Modello di shader Supportato
Modello shader 5
Modello shader 4.1 no
Modello shader 4 no
Modello shader 3 (DirectX HLSL) no
Modello shader 2 (DirectX HLSL) no
Modello shader 1 (DirectX HLSL) no

Shader Model 5 Assembly (DirectX HLSL)