| Microsoft DirectX 8.1 (pixel shader versions 1.0, 1.1, 1.2, 1.3) | 
Performs a 3×3 matrix multiply and uses the result to do a texture lookup. texm3x3tex must be used with two texm3x3pad instructions.
texm3x3tex dest, src
| Argument | Description | Registers | Version | |||
|---|---|---|---|---|---|---|
| vn | cn | tn | rn | |||
| dest | Destination register | x | 1.0, 1.1, 1.2, 1.3 | |||
| src | Source register | x | 1.0, 1.1, 1.2, 1.3 | |||
To learn more about registers, see Registers.
This instruction is used as the final of three instructions representing a 3×3 matrix multiply operation, followed by a texture lookup. The 3×3 matrix is comprised of the texture coordinates of the third texture stage and the two preceding texture stages. The resulting three-component vector (u,v,w) is used to sample the texture in stage 3. Any texture assigned to the preceding two texture stages is ignored. The 3×3 matrix multiply is typically useful for orienting a normal vector to the correct tangent space for the surface being rendered.
This instruction must be used with two texm3x3pad instructions. Texture registers must use the following sequence.
tex t(n)                 // Define tn as a standard 3-vector (tn must
                         // be defined in some way before it is used).
texm3x3pad t(m),   t(n)  // where m > n
                         // Perform first row of matrix multiply.
texm3x3pad t(m+1), t(n)  // Perform second row of matrix multiply.
texm3x3tex t(m+2), t(n)  // Perform third row of matrix multiply to get a
                         // 3-vector with which to sample texture
                         // associated with texture stage m+2.
Here is more detail about how the 3×3 multiply is accomplished.
// The first texm3x3pad instruction performs the first row of the multiply // to find u'. u' = TextureCoordinates(stage m)UVW  t(n)RGB // The second texm3x3pad instruction performs the second row of the multiply // to find v'. v' = TextureCoordinates(stage m+1)UVW  t(n)RGB // The texm3x3spec instruction performs the third row of the multiply // to find w'. w' = TextureCoordinates(stage m+2)UVW  t(n)RGB // Lastly, the texm3x3tex instruction samples t(m+2) with (u',v',w') // and stores the result in t(m+2). t(m+2)RGBA = TextureSample(stage m+2)RGBA using (u', v', w') as coordinates.
// Here is an example shader with the texture maps identified and
// the texture stages identified.
ps.1.0
tex t0                // Bind texture in stage 0 to register t0.
texm3x3pad  t1,  t0   // First row of matrix multiply.
texm3x3pad  t2,  t0   // Second row of matrix multiply.
texm3x3tex  t3,  t0   // Third row of matrix multiply to get a
                      // 3-vector with which to sample texture at stage 3
mov r0, t3            // output result.
// This example requires the following texture stage setup.
//
// Stage 0 is assigned a texture map with normal data. This is often 
// referred to as a bump map. The data is (XYZ) normals for 
// each texel. Texture coordinate set 0 defines how to sample this 
// normal map.
//
// Texture coordinate set 1 is assigned to row 1 of the 3×3 matrix. 
// Any texture assigned to stage 1 is ignored.
//
// Texture coordinate set 2 is assigned to row 2 of the 3×3 matrix. 
// Any texture assigned to stage 2 is ignored.
//
// Texture coordinate set 3 is assigned to row 3 of the 3×3 matrix. 
// A volume or cube texture should be set to stage 3  for lookup by the 
// transformed 3-D vector.
//