Istruzione if
Eseguire in modo condizionale una serie di istruzioni, in base alla valutazione dell'espressione condizionale.
[Attribute] if ( Condizionale ) { Statement Block; }
Parametri
-
Attributo
-
Parametro facoltativo che controlla la modalità di compilazione dell'istruzione.
Attributo Descrizione ramo Valutare solo un lato dell'istruzione if in base alla condizione specificata. Nota: Quando si usa il modello di shader 2.x o il modello di shader 3.0, ogni volta che si usano rami dinamici si utilizzano le risorse. Pertanto, se si usa la diramazione dinamica in modo eccessivo quando si esegue la destinazione di questi profili, è possibile ricevere errori di compilazione. rendere bidimensionale Valutare entrambi i lati dell'istruzione if e scegliere tra i due valori risultanti. -
Condizionale
-
Espressione condizionale. L'espressione viene valutata e, se true, viene eseguito il blocco di istruzioni.
-
Blocco di istruzioni
-
Una o più istruzioni HLSL.
Commenti
Quando il compilatore usa il metodo branch per la compilazione di un'istruzione if, genererà codice che valuterà solo un lato dell'istruzione if a seconda della condizione specificata. Ad esempio, nell'istruzione if:
[branch] if(x)
{
x = sqrt(x);
}
L'istruzione if ha un blocco else implicito, equivalente a x = x. Poiché il compilatore ha detto al compilatore di usare il metodo branch con l'attributo branch precedente, il codice compilato valuterà x ed eseguirà solo il lato che deve essere eseguito; se x è zero, eseguirà l'altro lato e, se è diverso da zero, eseguirà il lato then .
Viceversa, se viene usato l'attributo flat , il codice compilato valuterà entrambi i lati dell'istruzione if e sceglierà tra i due valori risultanti usando il valore originale di x. Di seguito è riportato un esempio di utilizzo dell'attributo flat:
[flatten] if(x)
{
x = sqrt(x);
}
Esistono alcuni casi in cui l'uso del ramo o degli attributi flat può generare un errore di compilazione. L'attributo branch può avere esito negativo se uno dei lati dell'istruzione if contiene una funzione sfumatura, ad esempio tex2D. L'attributo flatten può avere esito negativo se una delle istruzioni if contiene un'istruzione di accodamento del flusso o qualsiasi altra istruzione con effetti collaterali.
Un'istruzione if può anche usare un blocco else facoltativo. Se l'espressione if è true, viene elaborato il codice nel blocco di istruzioni associato all'istruzione if. In caso contrario, viene elaborato il blocco di istruzioni associato al blocco else facoltativo.