Share via


ld (sm4 - asm)

Récupère des données à partir de la mémoire tampon ou de la texture spécifiée sans filtrage (par exemple, échantillonnage de points) à l’aide de l’adresse entière fournie. Les données sources peuvent provenir de n’importe quel type de ressource autre que TextureCube.

ld[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle]
Élément Description
dest
[in] L’adresse du résultat de l’opération.
srcAddress
[in] Les coordonnées de texture nécessaires pour effectuer l’échantillon.
srcResource
[in] Un registre de texture (t#) qui doit avoir été déclaré identifiant la texture ou la mémoire tampon source pour la récupération.

Notes

Cette instruction est une alternative simplifiée à l’instruction sample. Contrairement à sample, ld est également capable de récupérer des données à partir de mémoires tampons. ld peut également extraire des ressources à plusieurs échantillons (sur le nuanceur de pixels uniquement).

srcAddress fournit l’ensemble de coordonnées de texture nécessaire pour effectuer l’échantillon sous la forme d’entiers non signés. Si srcAddress est hors de la plage[0...( #texels dans la dimension -1)], puis le comportement hors limites est appelé, où ld retourne 0 dans tous les composants non manquants du format de srcResource et la valeur par défaut pour les composants manquants. Une application souhaitant un contrôle plus flexible sur le comportement d’adresse hors plage doit utiliser l’instruction sample à la place, car elle respecte le comportement wrap/mirror/clamp/border défini comme état de l’échantillonneur.

srcAddress.a (POS-swizzle) fournit toujours un niveau mipmap entier non signé. Si la valeur est hors de la plage [0...(nombre de miplevels dans la ressource -1)]), puis le comportement hors limites est appelé. Si la ressource est une mémoire tampon, qui ne peut pas avoir de mipmaps, srcAddress.a est alors ignoré

srcAddress.gb (POS-swizzle) est ignoré pour les mémoires tampons et texture1D (non-tableau). srcAddress.b (POS-swizzle) est ignoré pour les tableaux texture1D et texture2D.

Pour les tableaux texture1D, srcAddress.g (POS-swizzle) fournit l’index de tableau en tant qu’entier non signé. Si la valeur est hors de la plage des index de tableau disponibles [0...(taille du tableau -1)], puis le comportement hors limites est appelé.

Pour les tableaux texture2D, srcAddress.b (POS-swizzle) fournit l’index de tableau, sinon avec la même sémantique que pour texture1D.

La récupération à partir de t# auquel rien n’est lié retourne 0 pour tous les composants.

Décalage d’adresse

Le suffixe facultatif [_aoffimmi(u,v,w)] (décalage d’adresse par entier immédiat) indique que les coordonnées de texture de ld doivent être décalées par un ensemble de valeurs constantes entières d’espace texel immédiat fournies. Les valeurs littérales sont un ensemble de nombres de compléments de 4 bits 2, avec une plage entière [-8,7]. Ce modificateur est défini uniquement pour texture1D/2D/3D, y compris les tableaux, et non pour les mémoires tampons.

Les décalages sont ajoutés aux coordonnées de texture, dans l’espace texel, par rapport au miplevel accessible par le ld.

Les décalages d’adresse ne sont pas appliqués le long de l’axe des tableaux texture1D/2D.

Les composants _aoffimmi v,w sont ignorés pour les tableaux texture1D.

Le composant _aoffimmi w est ignoré pour les tableaux texture2D.

Étant donné que les coordonnées de texture pour ld sont des entiers non signés, si le décalage réduit l’adresse en dessous de zéro, elle s’encapsule à une adresse volumineuse et entraîne un accès hors limites.

Contrôle de type de retour

Le format de données retourné par ld au registre de destination est déterminé de la même façon que décrit pour l’instruction sample. Il est basé sur le format lié au paramètre srcResource (t#).

Comme pour l’instruction sample, les valeurs retournées pour ld sont des éléments à 4 vecteurs avec des valeurs par défaut spécifiques au format pour les composants qui ne sont pas présents dans le format. Le réagencement des données en surface sur srcResource détermine comment réagencer les données en surface du résultat de 4 composants qui revient à partir de la charge de texture, après quoi .mask sur dest détermine quels composants dans dest sont mis à jour.

Lorsqu’une valeur flottante 32 bits est lue par ld dans un registre 32 bits, les bits ne sont pas touchés. Autrement dit, les valeurs dénormales restent dénormales. Cela est différent de l’instruction sample.

Détails divers

Comme il n’existe aucun filtrage associé à l’instruction ld , les concepts tels que le biais LOD ne s’appliquent pas à ld. En conséquence, il n’existe aucun paramètre s# de l’échantillonneur.

Restrictions

  • srcResource doit être un registre t# et non un TextureCube. srcResource ne peut pas non plus être un objet constantbuffer, qui ne peut pas être lié aux registres t#.
  • L’adressage relatif sur srcResource n’est pas autorisé.
  • srcAddress doit être un registre temp (r#/x#), constant (cb#) ou input (v#).
  • dest doit être un registre temp (r#/x#) ou output (o*#).

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

Nuanceur de sommets Nuanceur de géométrie Nuanceur de pixels
x x x

Modèle de nuanceur minimal

Cette fonction 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 4.1 de nuanceur oui
Modèle 4 de nuanceur oui
Modèle 3 de nuanceur (DirectX HLSL) non
Modèle de nuanceur 2 (DirectX HLSL) non
Modèle de nuanceur 1 (DirectX HLSL) non

Assembly du modèle 4 de nuanceur (DirectX HLSL)