store_structured (sm5 - asm)

Scrittura ad accesso casuale di componenti a 1-4 a 32 bit in una visualizzazione di accesso non ordinato (UAV) del buffer strutturato.

store_structured dst0[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
Elemento Descrizione
dst0
[in] Indirizzo dei risultati dell'operazione.
dstAddress
[in] Indirizzo in corrispondenza del quale scrivere.
dstByteOffset
[in] Indice della struttura da scrivere.
src0
[in] Componenti da scrivere.

Commenti

Questa istruzione esegue componenti a 1-4 bit *32bit scritti da src0 a dst0 all'indirizzo in dstAddress e dstByteOffset. Nessuna conversione del formato.

dst0 deve essere un UAV (u#). Nello shader di calcolo può anche essere la memoria condivisa del gruppo di thread (g#).

dstAddress specifica l'indice della struttura da scrivere.

La posizione dei dati scritti equivale allo pseudocodice seguente, che mostra l'offset, l'indirizzo, il puntatore al contenuto del buffer, lo stride dell'origine e i dati archiviati in modo lineare.

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

Questo pseudocodice mostra come funziona l'operazione, ma i dati effettivi non devono essere archiviati in modo lineare. Se i dati non vengono archiviati in modo lineare, l'operazione effettiva dell'istruzione deve corrispondere al comportamento dell'operazione precedente.

dst0 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 gap.

Gli indirizzi out of bounds in u# casued by dstAddress non significa che non viene scritto nulla nella memoria out of bounds.

Se dstByteOffset, incluso dstWriteMask, è ciò che causa l'accesso all'utente#, l'intero contenuto dell'UAV diventa indefinito.

Gli indirizzi out of bounds in g# (i limiti di quel particolare g#, invece di tutta la memoria condivisa) per qualsiasi componente a 32 bit specifico causano l'indefinimento dell'intero contenuto di tutta la memoria condivisa.

dstByteOffset è un argomento separato da dstAddress perché è in genere un valore letterale. Questa separazione dei parametri non è stata eseguita per le atomiche sulla memoria strutturata.

cs_4_0 e cs_4_1 supportano questa istruzione per UAV e TGSM.

Questa istruzione si applica alle fasi dello shader seguenti:

Vertice Scafo Dominio Geometria Pixel Calcolo
X X

Poiché gli UAV sono disponibili in tutte le fasi dello 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 minimo shader

Questa istruzione è supportata nei modelli di 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

Assembly modello shader 5 (DirectX HLSL)