if_comp - ps
Démarrez un bloc if bool - ps...else - ps...endif - ps, avec une condition basée sur des valeurs qui peuvent être calculées dans un nuanceur. Cette instruction est utilisée pour ignorer un bloc de code en fonction d’une condition.
Syntaxe
if_comp src0, src1 |
---|
Où :
_comp est une comparaison entre les deux registres sources. Les valeurs possibles sont les suivantes :
Syntaxe Comparaison _gt Supérieur(e) à _lt Inférieur(e) à _ge Supérieur ou égal à _le Inférieur ou égal à _eq Égal à _ne Non égal à src0 est un registre source. Une réplication swizzle est nécessaire pour sélectionner un composant.
src1 est un registre source. Une réplication swizzle est nécessaire pour sélectionner un composant.
Notes
Versions du nuanceur de pixels | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
if_comp | x | x | x | x |
Cette instruction est utilisée pour ignorer un bloc de code en fonction d’une condition.
if (src0 comparison src1)
jump to the corresponding else or endif instruction;
Veillez à utiliser les modes de comparaison égaux et non égaux sur des nombres à virgule flottante. Étant donné que l’arrondi se produit pendant des calculs à virgule flottante, la comparaison peut être effectuée sur une valeur epsilon (petit nombre différent de zéro) pour éviter les erreurs.
Les restrictions sont les suivantes :
- Les blocs if_comp...else - ps...endif - ps (ainsi que les blocs prédits if) peuvent avoir 24 couches de profondeur d’imbrication.
- Les registres src0 et src1 nécessitent une réplication swizzle.
- Les blocs if_comp doivent se terminer par une instruction else - vs ou endif - vs.
- Les blocs if_comp...else - ps...endif - ps ne peuvent pas chevaucher un bloc de boucle. Le bloc if_comp doit être complètement à l’intérieur ou à l’extérieur du bloc de boucle.
Exemple
Cette instruction fournit un contrôle de flux dynamique conditionnel.
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif
Rubriques connexes