ld_structured (sm5 - asm)
Lettura ad accesso casuale di componenti a 1-4 a 32 bit da un buffer strutturato.
ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle] |
---|
Elemento | Descrizione |
---|---|
Dest |
[in] Indirizzo dei risultati dell'operazione. |
srcAddress |
[in] Specifica l'indice della struttura da leggere. |
srcByteOffset |
[in] Specifica l'offset di byte nella struttura da cui iniziare la lettura. |
src0 |
Buffer da cui leggere. Questo parametro deve essere SRV (t#), UAV (u#). Nello shader di calcolo può anche essere la memoria condivisa del gruppo di thread (g#). |
Commenti
I dati letti dalla struttura sono equivalenti allo pseudocodice seguente: dove è presente l'offset, l'indirizzo, il puntatore al contenuto del buffer, lo stride dell'origine e i dati archiviati in modo lineare.
BYTE *BufferContents; // from SRV or UAV
UINT BufferStride; // from base resource
UINT srcAddress, srcByteOffset; // from source registers
BYTE *ReadLocation; // value to calculate
ReadLocation = BufferContents
+ BufferStride * srcAddress
+ srcByteOffset;
UINT32 Temp[4]; // used to make code shorter
// apply the source resource swizzle on source data
Temp = read_and_swizzle(ReadLocation, srcSwizzle);
// write the components to the output based on mask
ApplyWriteMask(dstRegister, dstWriteMask, Temp);
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.
L'indirizzamento out of bounds in u#/t# di qualsiasi componente a 32 bit specificato restituisce 0 per tale componente, tranne se srcByteOffset, più swizzle è ciò che causa l'accesso a te#/t#, il valore restituito per tutti i componenti non è definito.
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 specificato restituiscono un risultato non definito.
srcByteOffset è un argomento separato da srcAddress 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, SRV e TGSM.
Questa istruzione si applica alle fasi dello shader seguenti:
Vertice | Scafo | Dominio | Geometria | Pixel | Calcolo |
---|---|---|---|---|---|
X | X | X | X | 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 gli UAV 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 | 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 |
cs_4_0 e cs_4_1 supportano questa istruzione per UAV, SRV e TGSM.