if _ comp - ps

Starten Sie eine , wenn bool - ps... else - ps... endif: ps-Block mit einer Bedingung, die auf Werten basiert, die in einem Shader berechnet werden können. 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. Replizieren von Swizzle ist erforderlich, um eine Komponente auszuwählen.

  • src1 ist ein Quellregister. Replizieren von Swizzle ist erforderlich, um eine Komponente auszuwählen.

Bemerkungen

Pixel-Shaderversionen 1_1 1_2 1 _ 3 1_4 2 _ 0 2 _ x 2 _ sw 3 _ 0 3 _ sw
, wenn _ 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;

Seien Sie vorsichtig, wenn Sie die Vergleichsmodi "Gleich" und "Nicht gleich" für Gleitkommazahlen verwenden. Da die Rundung während gleitkommaberechnungen erfolgt, kann der Vergleich mit einem Epsilon-Wert (kleine Zahl ungleich 0) durchgeführt werden, um Fehler zu vermeiden.

Es gelten folgende Beschränkungen:

  • , _ wenn comp... else - ps... endif: PS-Blöcke (zusammen mit den prädikatierten if-Blöcken) können bis zu 24 Ebenen tief geschachtelt werden.
  • Für src0- und src1-Register ist ein Replizieren von Swizzle erforderlich.
  • , _ wenn comp-Blöcke mit einer else - vs oder endif - vs-Anweisung enden müssen.
  • , _ wenn comp... else - ps... endif: PS-Blöcke können einen Schleifenblock nicht umverschnallen. Der if _ comp-Block muss vollständig innerhalb oder außerhalb des Schleifenblocks sein.

Beispiel

Diese Anweisung bietet eine bedingte dynamische Flusssteuerung.

if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y

else
// Instructions to run otherwise

endif

Anweisungen für Pixel-Shader