Partager via


if, instruction

Exécutez de manière conditionnelle une série d’instructions, en fonction de l’évaluation de l’expression conditionnelle.

[Attribut] if ( Conditionnel ) { Statement Block; }

Paramètres

Attribut

Paramètre facultatif qui contrôle la façon dont l’instruction est compilée.

Attribut Description
branche Évaluez un seul côté de l’instruction if en fonction de la condition donnée. Note: Lorsque vous utilisez le modèle de nuanceur 2.x ou le modèle de nuanceur 3.0, chaque fois que vous utilisez la branchement dynamique, vous consommez des ressources. Par conséquent, si vous utilisez la branche dynamique de manière excessive lorsque vous ciblez ces profils, vous pouvez recevoir des erreurs de compilation.
aplatir Évaluez les deux côtés de l’instruction if et choisissez entre les deux valeurs résultantes.

Conditionnelle

Expression conditionnelle. L’expression est évaluée, et si la valeur est true, le bloc d’instruction est exécuté.

Bloc d’instructions

Une ou plusieurs instructions HLSL.

Notes

Lorsque le compilateur utilise la méthode branch pour compiler une instruction if, il génère du code qui n’évalue qu’un seul côté de l’instruction if en fonction de la condition donnée. Par exemple, dans l’instruction if :

[branch] if(x)
{
    x = sqrt(x);
}

L’instruction if a un bloc else implicite, qui équivaut à x = x. Étant donné que nous avons demandé au compilateur d’utiliser la méthode branch avec l’attribut de branche précédent, le code compilé évaluera x et exécutera uniquement le côté qui doit être exécuté ; si x a la valeur zéro, il exécutera le côté de l’autre et, s’il n’est pas égal à zéro, il exécutera le côté alors .

À l’inverse, si l’attribut aplati est utilisé, le code compilé évalue les deux côtés de l’instruction if et choisit entre les deux valeurs résultantes à l’aide de la valeur d’origine x. Voici un exemple d’utilisation de l’attribut aplatissement :

[flatten] if(x)
{
    x = sqrt(x);
}

Dans certains cas, l’utilisation de la branche ou des attributs aplatissement peut générer une erreur de compilation. L’attribut de branche peut échouer si l’un ou l’autre côté de l’instruction if contient une fonction de dégradé, telle que tex2D. L’attribut aplatissement peut échouer si l’un ou l’autre côté de l’instruction if contient une instruction d’ajout de flux ou toute autre instruction qui a des effets secondaires.

Une instruction if peut également utiliser un bloc else facultatif. Si l’expression if a la valeur true, le code du bloc d’instruction associé à l’instruction if est traité. Sinon, le bloc d’instructions associé au bloc else facultatif est traité.

Voir aussi

Contrôle de flux