Partager via


ld_structured (sm5 - asm)

Lecture en accès aléatoire de 1 à 4 composants 32 bits à partir d’une mémoire tampon structurée.

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
Élément Description
Dest
[in] Adresse des résultats de l’opération.
srcAddress
[in] Spécifie l’index de la structure à lire.
srcByteOffset
[in] Spécifie le décalage d’octets dans la structure à partir de laquelle commencer la lecture.
src0
Mémoire tampon à partir de laquelle lire. Ce paramètre doit être un SRV (t#), un UAV (u#). Dans le nuanceur de calcul, il peut également s’agir de la mémoire partagée du groupe de threads (g#).

Remarques

Les données lues à partir de la structure sont équivalentes au pseudocode suivant : où nous avons le décalage, l’adresse, le pointeur vers le contenu de la mémoire tampon, la foulée de la source et les données stockées linéairement.

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

Ce pseudo-code montre comment fonctionne l’opération, mais les données réelles n’ont pas besoin d’être stockées linéairement. Si les données ne sont pas stockées linéairement, l’opération réelle de l’instruction doit correspondre au comportement de l’opération ci-dessus.

L’adressage hors limites sur u#/t# d’un composant 32 bits donné retourne 0 pour ce composant, sauf si srcByteOffset, plus swizzle est ce qui provoque un accès hors limites à vous#/t#, la valeur retournée pour tous les composants n’est pas définie.

L’adressage hors limites sur g# (les limites de ce g# particulier, par opposition à toute la mémoire partagée) pour un composant 32 bits donné retourne un résultat non défini.

srcByteOffset est un argument distinct de srcAddress , car il s’agit généralement d’un littéral. Cette séparation de paramètre n’a pas été effectuée pour les atomiques sur la mémoire structurée.

cs_4_0 et cs_4_1 prennent en charge cette instruction pour les UAV, SRV et TGSM.

Cette instruction s’applique aux étapes suivantes du nuanceur :

Sommet Coque Domain Géométrie Pixel Compute
X X X X X X

Étant donné que les UAV sont disponibles à toutes les étapes du nuanceur pour Direct3D 11.1, cette instruction s’applique à toutes les étapes de nuanceur pour les UAV pour le runtime Direct3D 11.1, qui est disponible à partir de Windows 8.

Sommet Coque Domain Géométrie Pixel Compute
X X X X X X

Modèle de nuanceur minimal

Cette instruction est prise en charge dans les modèles de nuanceur suivants :

Modèle de nuanceur Pris en charge
Modèle de nuanceur 5 Oui
Modèle de nuanceur 4.1 Non
Modèle de nuanceur 4 Non
Modèle de nuanceur 3 (DirectX HLSL) Non
Shader Model 2 (DirectX HLSL) Non
Modèle de nuanceur 1 (DirectX HLSL) Non

cs_4_0 et cs_4_1 prennent en charge cette instruction pour les UAV, SRV et TGSM.

Shader Model 5 Assembly (DirectX HLSL)