store_structured (sm5 - asm)
Scrittura di accesso casuale di componenti a 1-4 a 32 bit in una visualizzazione di accesso non ordinata del buffer strutturato.
store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle] |
---|
Elemento | Descrizione |
---|---|
Dest |
[in] Indirizzo dei risultati dell'operazione. |
dstAddress |
[in] Indirizzo in cui scrivere. |
dstByteOffset |
[in] Indice della struttura da scrivere. |
src0 |
[in] Componenti da scrivere. |
Commenti
Questa istruzione esegue componenti a 1-4 componenti *32bit scritti da src0 al più dest all'indirizzo in dstAddress e dstByteOffset. Nessuna conversione di formato.
dest deve essere un UAV (u#). Nello shader di calcolo può essere anche 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 dest
UINT BufferStride; // from dest
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.
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 fuori limiti su u# casued da dstAddress significa che non viene scritto nulla nella memoria out of bounds.
Se dstByteOffset, incluso dstWriteMask, è ciò che causa l'accesso a te#, l'intero contenuto dell'UAV diventa non definito.
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.
dstByteOffset è un argomento separato da dstAddress perché è comunemente 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é 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 | sì |
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 |