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.