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 - vs 或 endif - 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
相关主题