Modificateurs pour ps_1_X

Les modificateurs d’instruction affectent le résultat de l’instruction avant son écriture dans le registre de destination. Pour instance, utilisez-les pour multiplier ou diviser le résultat par un facteur de deux, ou pour serrer le résultat entre zéro et un. Les modificateurs d’instruction 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 présenté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 Saturation (pince à partir de 0 et 1) instruction_sat X X X X

 

  • Le modificateur de multiplication multiplie les données de registre par une puissance de deux après leur lecture. Il s’agit de 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 leur lecture. C’est la même chose qu’un décalage vers la droite.
  • Le modificateur saturé limite la plage de valeurs de registre de zéro à 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.

Modificateur de multiplication

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 serré 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 diviser

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 de saturation

Pour les instructions arithmétiques, le modificateur de saturation limite le résultat de cette instruction dans la plage de 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 n’importe quel modificateur d’instruction multiplier ou diviser. _sat est le plus souvent utilisé pour serrer les résultats du produit à points. Toutefois, elle permet également l’émulation cohérente des méthodes multipass où la mémoire tampon de trame est toujours comprise entre 0 et 1, et de la syntaxe multitexture DirectX 6 et 7.0, dans laquelle la saturation est définie pour se produire à 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 attache le résultat dans la plage de 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 serré 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 du nuanceur de pixels