if_comp - ps

Inicie um bloco se bool - ps...else - ps...endif - ps, com uma condição baseada em valores que podem ser computados em um sombreador. Esta instrução é usada para ignorar um bloco de código, com base em uma condição.

Sintaxe

if_comp src0, src1

 

Em que:

  • _comp é uma comparação entre os dois registros de origem. Pode ser um dos seguintes:

    Sintaxe Comparação
    _gt Maior que
    _lt Menor que
    _ge Maior ou igual a
    _le Inferior ou igual
    _eq Igual a
    _ne Diferente de

     

  • src0 é um registro de origem. É necessário replicar o swizzle para selecionar um componente.

  • src1 é um registro de origem. É necessário replicar o swizzle para selecionar um componente.

Comentários

Versões do sombreador de pixel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
if_comp x x x x

 

Esta instrução é usada para ignorar um bloco de código, com base em uma condição.

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

Tenha cuidado ao usar os modos de comparação iguais e não iguais em números de ponto flutuante. Como o arredondamento ocorre durante cálculos de ponto flutuante, a comparação pode ser feita em relação a um valor de epsilon (pequeno número diferente de zero) para evitar erros.

As restrições incluem:

  • Os blocos if_comp...else - ps...endif - ps (juntamente com os blocos ifpredefinidos) podem ser aninhados até 24 camadas de profundidade.
  • os registros src0 e src1 exigem um swizzle de replicação.
  • blocos if_comp devem terminar com uma instrução else - vs ou endif - vs.
  • blocos if_comp...else - ps...endif - ps não podem bloquear um bloco de loop. O bloco if_comp deve estar completamente dentro ou fora do bloco de loop.

Exemplo

Esta instrução fornece controle de fluxo dinâmico condicional.

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

else
// Instructions to run otherwise

endif

Instruções do Sombreador de Pixel