m3x4 - ps

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

Syntaxe

m3x4 dst, src0, src1

 

where

  • dst est le registre de destination. Le résultat est un vecteur à 4 composants.
  • src0 est un registre source représentant un vecteur à 3 composants.
  • src1 est un registre source représentant une matrice 3x4, qui correspond au premier des 4 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
m3x4 x x x x x

 

Le masque xyzw (par défaut) est requis pour le registre de destination. Les modificateurs Negate et swizzle sont autorisés pour src0, mais pas pour src1.

L’extrait de code suivant montre les opérations effectuées.

 
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);
dest.z = (src0.x*src3.x) + (src0.y*src3.y) + (src0.z*src3.z);
dest.w = (src0.x*src4.x) + (src0.y*src4.y) + (src0.z*src4.z);

Le vecteur d’entrée se trouve dans le registre src0. La matrice d’entrée 3x4 se trouve dans le registre src1, et les deux registres supérieurs suivants, comme indiqué dans l’extension ci-dessous.

Cette opération est couramment utilisée pour transformer un vecteur de position par une matrice qui a un effet projectif mais qui n’applique aucune traduction. Cette instruction est implémentée sous la forme d’une paire de produits point, comme illustré ici.

m3x4   r0.xyzw, r1, c0   will be expanded to: 

dp3 r0.x, r1, c0
dp3 r0.y, r1, c1
dp3 r0.z, r1, c2
dp3 r0.w, r1, c3

Instructions du nuanceur de pixels