texldl - ps

É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. Consultez Registre des coordonnées 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 pixels 1_1 1_2 1_3 1_4 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 (plus grand mappage) 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 texture définie, 0001 est obtenu dans le registre de destination.

Voici un algorithme approximatif que l’appareil de référence suit :

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 Masque d’écriture 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-ps) (s#). src1 ne peut pas utiliser de modificateur de negate (voir Masque d’écriture du registre de destination). src1 peut utiliser swizzle (voir Source Register Swizzling), qui est appliqué après l’échantillonnage, mais avant que le masque d’écriture (voir Masque d’écriture du registre de destination) ne soit respecté. L’échantillonneur doit avoir été déclaré (à l’aide de dcl_samplerType (sm2, sm3 - ps 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 à tex_ldl 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 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 est illégal.
  • Si le src0 (coordonnée de texture) est Registre temporaire, 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 du nuanceur de pixels