if_comp - vs
启动 if bool - vs...else - vs...endif - vs 块,其条件基于可在着色器中计算的值。 此指令用于根据条件跳过代码块。
语法
if_comp src0、src1 |
---|
其中:
_comp 是两个源寄存器之间的比较。 该参数可以是下列值之一:
语法 比较 _gt 大于 _lt 小于 _ge 大于或等于 _le 小于或等于 _eq 等于 _ne 不等于 src0 是源寄存器。 要选择组件,需要复制重排。
src1 是源寄存器。 要选择组件,需要复制重排。
备注
顶点着色器版本 | 1_1 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
if_comp | x | x | x | x |
此指令用于根据条件跳过代码块。
if_lt src0, src1
jump to the corresponding else or endif instruction;
对浮点数使用等于和不等于比较模式时要小心。 由于舍入发生在浮点计算期间,因此可以对 epsilon 值(小的非零数)进行比较以避免错误。
具体限制包括:
- if_comp...else - vs...endif - vs 块(以及谓词 if 块)最多可以嵌套 24 层。
- src0 和 src1 寄存器需要复制重排。
- if_comp 块结尾必须为 else - vs 或 endif - vs 指令。
- if_comp...else - vs...endif - vs 块不能跨越循环块。 if_comp 块必须完全位于 loop - vs 块内部或外部。
示例
此指令提供条件动态流控制。
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif
相关主题