Modificateurs pour ps_1_X

Les modificateurs d’instructions affectent le résultat de l’instruction avant qu’elle soit écrite dans le registre de destination. Par exemple, utilisez-les pour multiplier ou diviser le résultat par un facteur de deux, ou pour limiter le résultat entre zéro et un. Les modificateurs d’instructions sont appliqués après l’exécution de l’instruction, mais avant d’écrire le résultat dans le registre de destination.

Une liste des modificateurs est indiquée ci-dessous.

Modificateur Description Syntaxe Version 1_1 Version 1_2 Version 1_3 Version 1_4
_x2 Multiplier par 2 instruction_x2 X X X X
_x4 Multiplier par 4 instruction_x4 X X X X
_x8 Multiplier par 8 instruction_x8 X
_d2 Diviser par 2 instruction_d2 X X X X
_d4 Diviser par 4 instruction_d4 X
_d8 Diviser par 8 instruction_d8 X
_sam Saturé (pince comprise entre 0 et 1) instruction_sat X X X X

 

  • Le modificateur multiplié multiplie les données de registre par une puissance de deux après sa lecture. C’est la même chose qu’un décalage vers la gauche.
  • Le modificateur de division divise les données de registre par une puissance de deux après sa lecture. C’est la même chose qu’un décalage vers la droite.
  • Le modificateur saturé limite la plage de valeurs d’enregistrement comprises entre zéro et un.

Les modificateurs d’instructions peuvent être utilisés sur des instructions arithmétiques. Ils ne peuvent pas être utilisés dans les instructions d’adresse de texture.

Multiplier le modificateur

Cet exemple charge le registre de destination (dest) avec la somme des deux couleurs dans les opérandes sources (src0 et src1) et multiplie le résultat par deux.

add_x2 dest, src0, src1

Cet exemple combine deux modificateurs d’instructions. Tout d’abord, deux couleurs dans les opérandes sources (src0 et src1) sont ajoutées. Le résultat est ensuite multiplié par deux, et limité entre 0,0 et 1,0 pour chaque composant. Le résultat est enregistré dans le registre de destination.

add_x2_sat dest, src0, src1

Modificateur de division

Cet exemple charge le registre de destination (dest) avec la somme des deux couleurs dans les opérandes sources (src0 et src1) et divise le résultat par deux.

add_d2 dest, src0, src1

Modificateur saturé

Pour les instructions arithmétiques, le modificateur de saturation limite le résultat de cette instruction dans la plage 0.0 à 1.0 pour chaque composant. L’exemple suivant montre comment utiliser ce modificateur d’instruction.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

Cette opération se produit après tout modificateur d’instruction de multiplication ou de division. _sat est le plus souvent utilisé pour limiter les résultats du produit point. Toutefois, elle permet également une émulation cohérente des méthodes multipasses où la mémoire tampon de trame est toujours comprise entre 0 et 1 et la syntaxe multitexture DirectX 6 et 7.0, dans laquelle la saturation est définie à chaque étape.

Cet exemple charge le registre de destination (dest) avec la somme des deux couleurs dans les opérandes sources (src0 et src1) et limite le résultat dans la plage 0,0 à 1,0 pour chaque composant.

add_sat dest, src0, src1

Cet exemple combine deux modificateurs d’instructions. Tout d’abord, deux couleurs dans les opérandes sources (src0 et src1) sont ajoutées. Le résultat est multiplié par deux et limité entre 0,0 et 1,0 pour chaque composant. Le résultat est enregistré dans le registre de destination.

add_x2_sat dest, src0, src1

Instructions de nuanceur de pixels