if_comp - ps
Avviare un se bool - ps...else - ps...endif : blocco ps , con una condizione basata su valori che possono essere calcolati in uno shader. Questa istruzione viene usata per ignorare un blocco di codice, in base a una condizione.
Sintassi
if_comp src0, src1 |
---|
Dove:
_comp è un confronto tra i due registri di origine. I possibili valori sono i seguenti:
Sintassi Confronto _Gt Maggiore di _Tenente Minore di _Ge Maggiore di o uguale a _le Minore di o uguale a _Eq Uguale a _ne Diverso da src0 è un registro di origine. Per selezionare un componente, è necessario eseguire la replica swizzle.
src1 è un registro di origine. Per selezionare un componente, è necessario eseguire la replica swizzle.
Osservazioni:
Versioni del pixel shader | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
if_comp | x | x | x | x |
Questa istruzione viene usata per ignorare un blocco di codice, in base a una condizione.
if (src0 comparison src1)
jump to the corresponding else or endif instruction;
Prestare attenzione usando le modalità di confronto uguali e non uguali ai numeri a virgola mobile. Poiché l'arrotondamento si verifica durante i calcoli a virgola mobile, è possibile eseguire il confronto con un valore epsilon (numero diverso da zero) per evitare errori.
Tali restrizioni includono:
- if_comp...else - ps...endif : i blocchi ps (insieme al predicato se i blocchi) possono essere annidati fino a 24 livelli profondi.
- I registri src0 e src1 richiedono uno swizzle replicato.
- if_comp blocchi devono terminare con un'istruzione else - vs o endif - vs .
- if_comp...else - ps...endif: i blocchi ps non possono allontanarsi da un blocco ciclo. Il blocco if_comp deve trovarsi completamente all'interno o all'esterno del blocco del ciclo.
Esempio
Questa istruzione fornisce il controllo del flusso dinamico condizionale.
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif
Argomenti correlati