if_comp - ps
Beginnen Sie einen if bool - ps...else - ps...endif - ps-Block mit einer Bedingung, die auf in einem Shader berechneten Werten basiert. Diese Anweisung wird verwendet, um einen Codeblock basierend auf einer Bedingung zu überspringen.
Syntax
if_comp src0, src1 |
---|
Hierbei gilt:
_comp ist ein Vergleich zwischen den beiden Quellregistern. Folgende Werte sind möglich:
Syntax Vergleich _gt Größer als _lt Kleiner als _ge Größer als oder gleich _le Kleiner als oder gleich _eq Gleich _ne Ungleich src0 ist ein Quellregister. Das Replizieren von Swizzle ist erforderlich, um eine Komponente auszuwählen.
src1 ist ein Quellregister. Das Replizieren von Swizzle ist erforderlich, um eine Komponente auszuwählen.
Hinweise
Versionen des Pixel-Shaders | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
if_comp | x | x | x | x |
Diese Anweisung wird verwendet, um einen Codeblock basierend auf einer Bedingung zu überspringen.
if (src0 comparison src1)
jump to the corresponding else or endif instruction;
Achten Sie darauf, die Vergleichsmodi „Gleich“ und „Ungleich“ bei Gleitkommazahlen zu verwenden. Da die Rundung bei Gleitkommaberechnungen auftritt, kann der Vergleich mit einem Epsilon-Wert (kleine Zahl ungleich null) durchgeführt werden, um Fehler zu vermeiden.
Es gelten folgende Beschränkungen:
- if_comp...else - ps...endif - ps-Blöcke (zusammen mit den prädizierten if-Blöcken) können bis zu 24 Ebenen tief geschachtelt werden.
- src0- und src1-Register erfordert das Replizieren von Swizzle.
- if_comp-Blöcke müssen mit einer else - vs oder endif - vs-Anweisung enden.
- if_comp...else - ps...endif - ps-Blöcke können einen Loop-Block nicht überspannen. Der if_comp-Block muss sich vollständig innerhalb oder außerhalb des Loop-Blocks befinden.
Beispiel
Diese Anweisung stellt die bedingte dynamische Flusssteuerung bereit.
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif
Zugehörige Themen