m4x3 - vs

Multiplie un vecteur à 4 composants par une matrice 4x3.

Syntaxe

m4x3 dst, src0, src1

 

where

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

Notes

Versions du nuanceur de vertex 1_1 2_0 2_x 2_sw 3_0 3_sw
m4x3 x x x x x x

 

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

Le fragment de code suivant montre les opérations effectuées.

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

Le vecteur d’entrée se trouve dans le registre src0. La matrice d’entrée 4x3 se trouve dans le registre src1, et les deux registres supérieurs suivants, comme indiqué dans l’extension ci-dessous. Un résultat 3D est généré, ce qui laisse l’autre élément du registre de destination (dest.w) non affecté.

Cette opération est couramment utilisée pour transformer un vecteur de position par une matrice qui n’a aucun effet projectif, comme cela se produit dans les transformations d’espace de modèle. Cette instruction est implémentée sous la forme d’une paire de produits point comme indiqué ci-dessous.

m4x3   r0.xyz, r1, c0    will be expanded to:

dp4   r0.x, r1, c0
dp4   r0.y, r1, c1
dp4   r0.z, r1, c2

Les modificateurs Swizzle et negate ne sont pas valides pour le registre src1. Les registres dst et src0 ne peuvent pas être identiques.

Instructions sur le nuanceur de vertex