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

Vertex-Shaderanweisungen