if_comp - ps

Start an if bool - ps...else - ps...endif - ps block, with a condition based on values that could be computed in a shader. This instruction is used to skip a block of code, based on a condition.

Syntax

if_comp src0, src1

 

Where:

  • _comp is a comparison between the two source registers. It can be one of the following:

    Syntax Comparison
    _gt Greater than
    _lt Less than
    _ge Greater than or equal
    _le Less than or equal
    _eq Equal to
    _ne Not equal to

     

  • src0 is a source register. Replicate swizzle is required to select a component.

  • src1 is a source register. Replicate swizzle is required to select a component.

Remarks

Pixel shader versions 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
if_comp x x x x

 

This instruction is used to skip a block of code, based on a condition.

if (src0 comparison src1)
   jump to the corresponding else or endif instruction;

Be careful using the equals and not equals comparison modes on floating point numbers. Because rounding occurs during floating point calculations, the comparison can be done against an epsilon value (small nonzero number) to avoid errors.

Restrictions include:

  • if_comp...else - ps...endif - ps blocks (along with the predicated if blocks) can be nested up to 24 layers deep.
  • src0 and src1 registers require a replicate swizzle.
  • if_comp blocks must end with an else - vs or endif - vs instruction.
  • if_comp...else - ps...endif - ps blocks cannot straddle a loop block. The if_comp block must be completely inside or outside the loop block.

Example

This instruction provides conditional dynamic flow control.

if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y

else
// Instructions to run otherwise

endif

Pixel Shader Instructions