Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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