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

Инструкции по шейдеру пикселей