if_comp - vs
Beginnen Sie einen if bool - vs...else - vs...endif - vs-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. Swizzle muss repliziert werden, um eine Komponente auswählen zu können.
src1 ist ein Quellregister. Swizzle muss repliziert werden, um eine Komponente auswählen zu können.
Hinweise
Vertex-Shaderversionen | 1_1 | 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_lt src0, src1
jump to the corresponding else or endif instruction;
Achten Sie darauf, die Vergleichsmodi „Gleich“ und „Ungleich“ bei Gleitkommazahlen zu verwenden. Da bei Gleitkommaberechnungen gerundet wird, kann der Vergleich mit einem Epsilonwert (kleine Zahl ungleich null) durchgeführt werden, um Fehler zu vermeiden.
Es gelten folgende Beschränkungen:
- if_comp...else - vs...endif - vs-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 - vs...endif - vs-Blöcke können einen Loop-Block nicht überspannen. Der if_comp-Block muss sich vollständig innerhalb oder außerhalb des loop - vs-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