Compartir a través de


if (Instrucción)

Ejecute condicionalmente una serie de instrucciones, en función de la evaluación de la expresión condicional.

[Attribute] if ( Conditional ) { Statement Block; }

Parámetros

Atributo

Parámetro opcional que controla cómo se compila la instrucción.

Atributo Descripción
branch Evalúe solo un lado de la instrucción if en función de la condición especificada. Nota: Cuando se usa shader Model 2.x o Shader Model 3.0, cada vez que se usa la bifurcación dinámica se consumen recursos. Por lo tanto, si usa la bifurcación dinámica excesivamente al dirigirse a estos perfiles, puede recibir errores de compilación.
quitar información de estructura jerárquica Evalúe ambos lados de la instrucción if y elija entre los dos valores resultantes.

Condicional

Expresión condicional. La expresión se evalúa y, si es true, se ejecuta el bloque de instrucciones.

Bloque de instrucciones

Una o varias instrucciones HLSL.

Comentarios

Cuando el compilador usa el método de rama para compilar una instrucción if, generará código que solo evaluará un lado de la instrucción if en función de la condición especificada. Por ejemplo, en la instrucción if:

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

La instrucción if tiene un bloque else implícito, que equivale a x = x. Dado que hemos dicho al compilador que use el método de rama con el atributo de rama anterior, el código compilado evaluará x y ejecutará solo el lado que se debe ejecutar; si x es cero, ejecutará el otro lado y, si es distinto de cero, ejecutará el lado después .

Por el contrario, si se usa el atributo flatten , el código compilado evaluará ambos lados de la instrucción if y elegirá entre los dos valores resultantes mediante el valor original de x. Este es un ejemplo de uso del atributo flatten:

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

Hay determinados casos en los que el uso de los atributos de rama o acoplado puede generar un error de compilación. El atributo de rama puede producir un error si cualquiera de los lados de la instrucción if contiene una función de degradado, como tex2D. El atributo flatten puede producir un error si el lado de la instrucción if contiene una instrucción append de secuencia o cualquier otra instrucción que tenga efectos secundarios.

Una instrucción if también puede usar un bloque else opcional. Si la expresión if es true, se procesa el código del bloque de instrucciones asociado a la instrucción if. De lo contrario, se procesa el bloque de instrucciones asociado al bloque opcional else.

Consulte también

Control de flujo