if_comp — ps
Запустите если логическое - ps...else - ps...endif — блок ps, с условием на основе значений, которые можно вычислить в шейдере. Эта инструкция используется для пропуска блока кода на основе условия.
Синтаксис
if_comp src0, src1 |
---|
Где:
_comp — это сравнение двух исходных регистров. Может принимать одно из следующих значений:
Синтаксис Сравнение _Gt Больше _Lt Меньше _Ge Больше или равно _Le Меньше или равно _Эквалайзер Равно _Ne Не равно src0 — это исходный регистр. Репликация swizzle необходима для выбора компонента.
src1 — это исходный регистр. Репликация swizzle необходима для выбора компонента.
Замечания
Версии шейдера пикселей | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
if_comp | x | х | х | x |
Эта инструкция используется для пропуска блока кода на основе условия.
if (src0 comparison src1)
jump to the corresponding else or endif instruction;
Будьте осторожны, используя равные и не равные режимы сравнения на числах с плавающей запятой. Так как округление происходит во время вычислений с плавающей запятой, сравнение можно сделать с значением epsilon (небольшое ненулевое число), чтобы избежать ошибок.
К ним относятся указанные ниже ограничения.
- if_comp...else - ps...endif — блоки ps (а также предикаты , если блоки) можно вложить до 24 слоев глубоко.
- для регистров src0 и src1 требуется реплика te swizzle.
- if_comp блоки должны заканчиваться иначе — vs или endif — и инструкцией.
- 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
См. также