texldp - ps

Instruction de chargement de texture projetée. Cette instruction divise la coordonnée de texture d’entrée par le quatrième élément (.a ou .w) juste avant l’échantillonnage.

Syntaxe

texldp dst, src0, src1

 

where

Pour connaître l’ensemble des restrictions lors de l’utilisation de texldp, consultez texld.

Notes

texldp effectue une projection sur les coordonnées lues à partir de src0 avant d’exécuter l’exemple. Chaque coordonnée de texture est divisée par src0.w, puis la texture est échantillonnées. Lorsque texldp se termine, le contenu de src0 n’est pas affecté (sauf si dst est le même registre). Une alternative à l’utilisation de texldp consiste à effectuer manuellement la division de projection dans le nuanceur. Toutefois, l’exécution de la division dans le code de nuanceur est généralement plus lente que lorsque l’instruction texldp est effectuée. Par conséquent, évitez ces mathématiques supplémentaires lorsque cela est possible.

Le nombre de coordonnées requises pour src0 pour exécuter l’exemple de texture dépend de la façon dont src1 a été déclaré, ainsi que du composant .w. Les types d’échantillonneurs sont déclarés avec dcl_samplerType (sm2, sm3 - ps asm). Si src1 est déclaré en tant qu’échantillonneur 2D, src0 doit contenir des coordonnées .xyw ; si src1 est déclaré en tant qu’échantillonneur de cube ou échantillonneur de volume, src0 doit contenir des coordonnées .xyzw. L’échantillonnage d’une texture 2D avec des coordonnées .xyzw est autorisé (la coordonnée .z est ignorée).

Si la texture source contient moins de quatre composants, les valeurs par défaut sont placées dans les composants manquants. Les valeurs par défaut dépendent du format de texture, comme indiqué dans le tableau suivant.

Texture Format Valeurs par défaut pour les composants manquants
D3DFMT_R5G6B5, D3DFMT_R8G8B8, D3DFMT_L8, D3DFMT_L16, D3DFMT_R3G3B2, D3DFMT_CxV8U8, D3DFMT_L6V5U5 A = 1.0
D3DFMT_V8U8, D3DFMT_V16U16, D3DFMT_G16R16, D3DFMT_G16R16F, D3DFMT_G32R32F B = A = 1.0
D3DFMT_A8 R = G = B = 0,0
D3DFMT_R16F, D3DFMT_R32F G = B = A = 1.0
Tous les formats de profondeur/gabarit R = B = 0,0, A = 1.0

 

Cette instruction est prise en charge dans les versions suivantes :

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldp x x x x x

 

ps_2_0 et ps_2_x

dst doit être un registre temporaire (r#) et seul le masque .xyzw (masque par défaut) est autorisé.

src0 doit être un registre de coordonnées de texture (t#) ou un registre temporaire (r#), sans modificateur ni swizzle.

src1 doit être un sampler (Direct3D 9 asm-ps) (s#), sans modificateur ni swizzle.

Si le bit de cap de D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT n’est pas défini (dans D3DPSHADERCAPS2_0), une instruction de texture donnée (texld, texldp, texldb - ps, texldd ) peut dépendre, au maximum, du troisième ordre. Une instruction de texture dépendante de premier ordre est une instruction de texture dans laquelle :

Une instruction de texture dépendante de second ordre est définie comme une instruction de texture qui lit ou écrit dans un registre temporaire (r#) dont le contenu, avant d’exécuter l’instruction de texture, dépend (peut-être indirectement) du résultat d’une instruction de texture dépendante de premier ordre. Une instruction de texture dépendante (n)th-order dérive d’une instruction de texture (n - 1)th-order.

ps_3_0

Pour ps_3_0, src1 doit être un échantillonneur (Direct3D 9 asm-ps) (s#), sans modificateur. Swizzle est autorisé sur src1 et, lorsqu’il est appliqué, les résultats de la recherche de texture sont pré-swizzled avant d’être écrits dans dst.

Instructions du nuanceur de pixels