Partager via


m3x2 - ps

Multiplie un vecteur à 3 composants par une matrice 3x2.

Syntaxe

m3x2 dst, src0, src1

 

where

  • dst est le registre de destination. Le résultat est un vecteur à 2 composants.
  • src0 est un registre source représentant un vecteur à 3 composants.
  • src1 est un registre source représentant une matrice 3x2, qui correspond au premier des 2 registres consécutifs.

Notes

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

 

Le masque xy est requis pour le registre de destination. Les modificateurs Negate et swizzle sont autorisés pour src0, mais pas pour src1.

Les équations suivantes montrent le fonctionnement de l’instruction :

dest.x = (src0.x*src1.x) + (src0.y*src1.y) + (src0.z*src1.z);
dest.y = (src0.x*src2.x) + (src0.y*src2.y) + (src0.z*src2.z);

Le vecteur d’entrée se trouve dans le registre src0. La matrice d’entrée 3x2 se trouve dans le registre src1 et le registre supérieur suivant dans le même fichier de registre, comme indiqué dans l’extension suivante. Un résultat 2D est généré, sans que les autres éléments du registre de destination (dest.z et dest.w) ne soient affectés.

Cette opération est couramment utilisée pour les transformations 2D. Cette instruction est implémentée sous la forme d’une paire de produits point, comme illustré ici.

m3x2   r0.xy, r1, c0   which will be expanded to:

dp3   r0.x, r1, c0
dp3   r0.y, r1, c1

Les modificateurs Swizzle et negate ne sont pas valides pour le registre src1. Les registres dst et src0, ou l’un des registres src1+i, ne peuvent pas être identiques.

Instructions du nuanceur de pixels