m4x3: frente a

Multiplica un vector de 4 componentes por una matriz 4x3.

Sintaxis

m4x3 dst, src0, src1

 

where

  • dst es el registro de destino. El resultado es un vector de 3 componentes.
  • src0 es un registro de origen que representa un vector de 4 componentes.
  • src1 es un registro de origen que representa una matriz 4x3, que corresponde al primero de 3 registros consecutivos.

Comentarios

Versiones del sombreador de vértices 1_1 2_0 2_x 2_sw 3_0 3_sw
m4x3 x x x x x x

 

La máscara xyz es necesaria para el registro de destino. Se permiten modificadores negate y swizzle para src0, pero no para src1.

En el fragmento de código siguiente se muestran las operaciones realizadas.

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);

El vector de entrada está en el registro src0. La matriz de entrada 4x3 está en el registro src1 y los dos registros más altos siguientes, como se muestra en la expansión siguiente. Se genera un resultado 3D, lo que deja sin afectar al otro elemento del registro de destino (dest.w).

Esta operación se usa normalmente para transformar un vector de posición por una matriz que no tiene ningún efecto projectivo, como ocurre en las transformaciones del espacio del modelo. Esta instrucción se implementa como un par de productos de puntos, como se muestra a continuación.

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

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

Los modificadores Swizzle y negate no son válidos para el registro src1. El registro dst y src0 no pueden ser los mismos.

Instrucciones del sombreador de vértices