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
Tópicos relacionados