texbeml - ps
Microsoft DirectX 9.0 SDK Update (October 2004)

texbeml - ps


Apply a fake bump environment-map transform with luminance correction. This is accomplished by modifying the texture address data of the destination register, using address perturbation data (du,dv), a 2-D bump environment matrix, and luminance.

Syntax

texbeml dst, src

where

Remarks

Pixel shader versions1_11_21_31_42_02_x2_sw3_03_sw
texbemlxxx

The red and green color data in the src register is interpreted as the perturbation data (du,dv). The blue color data in the src register is interpreted as the luminance data.

This instruction transforms the red and green components in the source register using the 2-D bump environment mapping matrix. The result is added to the texture coordinate set corresponding to the destination register number. A luminance correction is applied using the luminance value and the bias texture stage values. The result is used to sample the current texture stage.

This can be used for a variety of techniques based on address perturbation such as fake per-pixel environment mapping.

This operation always interprets du and dv as signed quantities. For versions 1_0 and 1_1, the Source Register Signed Scaling input modifier (_bx2) is not permitted on the input argument.

This instruction produces defined results when input textures contain mixed format data. For more information about surface formats, see D3DFORMAT.

// When using this instruction, texture registers must follow 
//   the following sequence:
// The texture assigned to stage tn contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)					
texbeml t(m),  t(n)      where m > n

This example shows the calculations done within the instruction.

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
// 3. Luminance correction is applied
u' = TextureCoordinates(stage m)u + 
	D3DTSS_BUMPENVMAT00(stage m)*t(n)R +
	D3DTSS_BUMPENVMAT10(stage m)*t(n)G
	  
v' = TextureCoordinates(stage m)v + 
	D3DTSS_BUMPENVMAT01(stage m)*t(n)R +
	D3DTSS_BUMPENVMAT11(stage m)*t(n)G

t(m)RGBA = TextureSample(stage m) using (u',v') as coordinates

t(m)RGBA = t(m)RGBA*
	[(t(n)B * D3DTSS_BUMPENVLSCALE(stage m)) + 
		D3DTSS_BUMPENVLOFFSET(stage m)]

Register data that has been read by a texbem or texbeml instruction cannot be read later, except by another texbem or texbeml.

// This example demonstrates the validation error caused by 
//   t0 being reread
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0

(Instruction Error) (Statement 4) Register data that has been read by 
texbem or texbeml instruction cannot be read by other instructions

Examples

Here is an example shader with the texture maps identified and the texture stages identified.

ps_1_1
tex t0              ; Define t0 to get a 2-tuple DuDv
texbeml t1, t0      ; Compute (u',v')
                    ; Apply luminance correction                    
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

This example requires the following textures in the following texture stages.



© 2004 Microsoft Corporation. All rights reserved.
Feedback? Please provide us with your comments on this topic.
For more help, visit the DirectX Developer Center.