| Microsoft DirectX 8.1 (vertex shader versions 1.0, 1.1) | 
Computes the product of the input vector and a 3x2 matrix.
m3x2 dest, src0, src1
To learn more about registers, see Registers.
// m3x2 operates as shown by the following equations 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);
The input vector is in register src0, the input 3x2 matrix is in register src1 (and the next higher register in the same register file--as shown in the expansion below). A 2-D result is produced, leaving the other elements of the destination register (dest.z and dest.w) unaffected.
This operation is commonly used for 2-D transforms. This macro instruction is implemented as a pair of dot products as shown below.
m3x2 r5, v0, c3 which is performed as two dot products: dp3 r5.x, v0, c3 dp3 r5.y, v0, c4
The swizzle and negate modifiers are not allowed on this instruction.
// This example scales the object in both the x and y direction. // shader file vs.1.0 mov r0, v0 ; load vertex position m3x2 r1, r0, c5 ; scale in x and y m4x4 oPos, r1, c0 ; transform vertices by view/projection matrix mov oD0, c4 ; output constant color // The resultant green object is half the width and 1/4 the height // and is shown below.
 
// Additional code is used to initialize the constant registers.
D3DXMATRIX mat, matView, matProj;
D3DXMatrixMultiply(&mat, &matView, &matProj);
D3DXMatrixTranspose(&mat, &mat);
// set C0 with the view and projection matrix
m_pd3dDevice->SetVertexShaderConstant(0, &mat, 4);
// set register c4
float colorGreen[4] = {0, 1, 0, 0};
m_pd3dDevice->SetVertexShaderConstant(4, &colorGreen, 1);
// set register c5 (also sets registers c6 and c7)
float scale[][4] = {{0.5f, 0, 0, 0}, {0, 0.25f, 0, 0}, {0, 0, 1, 0}};
m_pd3dDevice->SetVertexShaderConstant(5, &scale, 3);
// The first SetVertexShaderConstant method binds the c0 register 
// with the first row of the view/projection matrix (rows 2, 3, 4 are 
// bound to registers C2, C3, c4 also). The m4x4 instruction (in the 
// shader file) loads the data.
// The second SetVertexShaderConstant method binds the c4 register with 
// the data for the color green. The last SetVertexShaderConstant method 
// binds the c5 register with the first row of the scale matrix (rows 2 and 3 
// are bound to registers C6 and C7 also). The m3x3 instruction (in the shader 
// file) loads the data.