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

Assembly modello shader 5 (DirectX HLSL)