texldl - vs

Échantillonner une texture avec un échantillonneur particulier. Le niveau de détail mipmap particulier échantillonné doit être spécifié en tant que quatrième composant de la coordonnée de texture.

Syntaxe

texldl dst, src0, src1

 

Où :

  • dst est un registre de destination.
  • src0 est un registre source qui fournit les coordonnées de texture pour l’exemple de texture.
  • src1 identifie le registre de l’échantillonneur source (s#), où # spécifie le numéro d’échantillonneur de texture à échantillonner. L’échantillonneur lui a associé une texture et un état de contrôle définis par l’énumération D3DSAMPLERSTATETYPE (par exemple, D3DSAMP_MINFILTER).

Notes

Versions du nuanceur de vertex 1_1 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl recherche le jeu de textures à l’étape de l’échantillonneur référencé par src1. Le niveau de détail est sélectionné dans src0.w. Cette valeur peut être négative, auquel cas le niveau de détail sélectionné est le « zéro » (carte la plus grande) avec magfilter. Étant donné que src0.w est une valeur à virgule flottante, la valeur fractionnaire est utilisée pour interpoler (si MIPFILTER a la valeur LINEAR) entre deux niveaux mip. Les états de l’échantillonneur MIPMAPLODBIAS et MAXMIPLEVEL sont honorés. Pour plus d’informations sur les états de l’échantillonneur, consultez D3DSAMPLERSTATETYPE.

Si un programme de nuanceur échantillonne un échantillonneur qui n’a pas de jeu de textures, 0001 est obtenu dans le registre de destination.

Il s’agit d’une approximation de l’algorithme d’appareil de référence.

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD);
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

Restrictions :

  • Les coordonnées de texture ne doivent pas être mises à l’échelle par taille de texture.
  • dst doit être un registre temporaire (r#).
  • dst peut accepter un masque d’écriture. Consultez Masquage du registre de destination.
  • Les valeurs par défaut des composants manquants sont 0 ou 1 et dépendent du format de texture.
  • src1 doit être un sampler (Direct3D 9 asm-vs) (s#). src1 ne peut pas utiliser de modificateur de négation. src1 peut utiliser swizzle, qui est appliqué après l’échantillonnage avant que le masque d’écriture ne soit respecté. L’échantillonneur doit avoir été déclaré (à l’aide de dcl_samplerType (sm3 - vs asm)) au début du nuanceur.
  • Le nombre de coordonnées requises pour effectuer l’exemple de texture dépend de la façon dont l’échantillonneur a été déclaré. S’il a été déclaré en tant que cube, une coordonnée de texture à trois composants est requise (.rgb). La validation impose que les coordonnées fournies à texldl sont suffisantes pour la dimension de texture déclarée pour l’échantillonneur. Toutefois, il n’est pas garanti que l’application définit réellement une texture (via l’API) avec des dimensions égales à la dimension déclarée pour l’échantillonneur. Dans ce cas, le runtime tente de détecter les incompatibilités (éventuellement dans le débogage uniquement). L’échantillonnage d’une texture dont les dimensions sont inférieures à celles présentes dans la coordonnée de texture sera autorisé et sera supposé ignorer les composants de coordonnées de texture supplémentaires. À l’inverse, l’échantillonnage d’une texture dont les dimensions sont supérieures à celles présentes dans la coordonnée de texture n’est pas autorisé.
  • Si le src0 (coordonnée de texture) est un registre temporaire (r#), les composants requis pour la recherche (décrits ci-dessus) doivent avoir été écrits précédemment.
  • L’échantillonnage des textures RVB non signées entraîne des valeurs float comprises entre 0,0 et 1,0.
  • L’échantillonnage des textures signées entraîne des valeurs float comprises entre -1.0 et 1.0.
  • Lors de l’échantillonnage de textures à virgule flottante, Float16 signifie que les données seront comprises dans MAX_FLOAT16. Float32 signifie que la plage maximale du pipeline sera utilisée. L’échantillonnage en dehors de l’une ou l’autre plage n’est pas défini.
  • Il n’existe aucune limite de lecture dépendante.

Instructions sur le nuanceur de vertex