if_comp - ps

启动 if bool - ps...else - ps...endif - ps 块,其条件基于可在着色器中计算的值。 此指令用于根据条件跳过代码块。

语法

if_comp src0, src1

 

其中:

  • _comp 是两个源寄存器之间的比较。 该参数可以是下列值之一:

    语法 比较
    _gt 大于
    _lt 小于
    _ge 大于或等于
    _le 小于或等于
    _eq 等于
    _ne 不等于

     

  • src0 是源寄存器。 若要选择组件,需要复制重排。

  • src1 是源寄存器。 若要选择组件,需要复制重排。

备注

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
if_comp x x x x

 

此指令用于根据条件跳过代码块。

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

对浮点数使用等于和不等于比较模式时要小心。 由于舍入发生在浮点计算期间,因此可以对 epsilon 值(小非零数)进行比较以避免错误。

具体限制包括:

  • if_comp...else - ps...endif - ps 块(以及谓词 if 块)最多可以嵌套 24 层。
  • src0 和 src1 寄存器需要副本重排。
  • if_comp 块必须以 else - vsendif - vs 指令结尾。
  • if_comp...else - ps...endif - ps 块无法横跨循环块。 if_comp 块必须完全位于循环块内部或外部。

示例

此指令提供条件动态流控制。

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

else
// Instructions to run otherwise

endif

像素着色器指令