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

Anweisungen des Pixel-Shaders