ps_2_x Instructions

This section contains reference information for the pixel shader version 2_x instructions.

There are several types of pixel shader instructions, as shown in the table. Columns to the right mean the following:

  • Instruction slots - Number of instruction slots used by each instruction.
  • Setup - A pixel shader must have a version instruction and it must be the first instruction.
  • Arithmetic - These instructions provide the mathematical operations in a shader.
  • Texture - These instructions are used to load and sample texture data, and to modify texture coordinates.
  • Flow control - These instructions provide static and dynamic flow control to the execution of instructions.
  • New - These instructions are new to this version.

Instruction Set

NameDescriptionInstruction slotsSetupArithmeticTextureFlow controlNew
abs - ps Absolute value1x
add - ps Add two vectors1x
break - ps Break out of a rep...endrep block1xx
break_comp - ps Conditionally break out of a rep...endrep block, with a comparison3xx
breakp - ps Break out of a rep...endrep block, based on a predicate3xx
call - ps Call a subroutine2xx
callnz bool - ps Call a subroutine if a boolean register is not zero3xx
callnz pred - ps Call a subroutine if a predicate register is not zero3xx
cmp - ps Compare source to 01x
crs - ps Cross product2x
dcl_samplerType (sm2, sm3 - ps asm) Declare the texture dimension for a sampler0x
dcl - (sm2, sm3 - ps asm) Declare the association between vertex shader output registers and pixel shader input registers.0x
def - ps Define constants0x
defb - ps Define a Boolean constant0xx
defi - ps Define an integer constant0xx
dp2add - ps 2D dot product and add2x
dp3 - ps 3D dot product1x
dp4 - ps 4D dot product1x
dsx - ps Rate of change in the x-direction2xx
dsy - ps Rate of change in the y direction2xx
else - ps Begin an else block1xx
endif - ps End an if...else block1xx
endrep - ps End of a repeat block2xx
exp - ps Full precision 2x1x
frc - ps Fractional component1x
if bool - ps Begin an if block3xx
if_comp - ps Begin an if block with a comparison3xx
if pred - ps Begin an if block with predication3xx
label - ps Label0xx
log - ps Full precision log₂(x)1x
lrp - ps Linear interpolate2x
m3x2 - ps 3x2 multiply2x
m3x3 - ps 3x3 multiply3x
m3x4 - ps 3x4 multiply4x
m4x3 - ps 4x3 multiply3x
m4x4 - ps 4x4 multiply4x
mad - ps Multiply and add1x
max - ps Maximum1x
min - ps Minimum1x
mov - ps Move1x
mul - ps Multiply1x
nop - ps No operation1x
nrm - ps Normalize3x
pow - ps xy3x
ps Version0x
rcp - ps Reciprocal1x
rep - ps Repeat3xx
ret - ps End of a subroutine1xx
rsq - ps Reciprocal square root1x
setp_comp Set the predicate register1xx
sincos - ps Sine and cosine8x
sub - ps Subtract1x
texkill - ps Kill pixel renderSee note 1x
texld - ps_2_0 and up Sample a textureSee note 2x
texldb - ps Texture sampling with level-of-detail bias from w-componentSee note 3x
texldd - ps Texture sampling with user-provided gradients3xx
texldp - ps Texture sampling with projective divide by w-componentSee note 4x



  1. If D3DD3DPSHADERCAPS2_0_NOTEXINSTRUCTIONLIMIT is set, slots = 2; otherwise slots = 1.
  2. If D3DD3DPSHADERCAPS2_0_NOTEXINSTRUCTIONLIMIT is set and the texture is a cube map, slots = 4; otherwise slot = 1.
  3. If D3DD3DPSHADERCAPS2_0_NOTEXINSTRUCTIONLIMIT is set, slots = 6; otherwise slots = 1.
  4. If D3DD3DPSHADERCAPS2_0_NOTEXINSTRUCTIONLIMIT is not set, slots = 1; otherwise:

Related topics

Pixel Shader Instructions