Compartilhar via


Instrução if

Execute condicionalmente uma série de instruções com base na avaliação da expressão condicional.

[Atributo] if ( Condicional ) { Statement Block; }

Parâmetros

Atributo

Um parâmetro opcional que controla como a instrução é compilada.

Atributo Descrição
branch Avalie apenas um lado da instrução if, dependendo da condição fornecida. Nota: Ao usar o Modelo de Sombreador 2.x ou o Modelo de Sombreador 3.0, cada vez que você usa a ramificação dinâmica, consome recursos. Portanto, se você usar a ramificação dinâmica excessivamente ao direcionar esses perfis, poderá receber erros de compilação.
mesclar Avalie os dois lados da instrução if e escolha entre os dois valores resultantes.

Condicional

Uma expressão condicional. A expressão é avaliada e, se true, o bloco de instrução é executado.

Bloco de instrução

Uma ou mais instruções HLSL.

Comentários

Quando o compilador usa o método branch para compilar uma instrução if, ele gerará um código que avaliará apenas um lado da instrução if, dependendo da condição fornecida. Por exemplo, na instrução if:

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

A instrução if tem um bloco senão implícito, que é equivalente a x = x. Como dissemos ao compilador para usar o método branch com o atributo de branch anterior, o código compilado avaliará x e executará apenas o lado que deve ser executado; se x for zero, ele executará o outro lado e, se for diferente de zero, executará o lado então .

Por outro lado, se o atributo de nivelamento for usado, o código compilado avaliará ambos os lados da instrução if e escolherá entre os dois valores resultantes usando o valor original de x. Aqui está um exemplo de uso do atributo flatten:

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

Há certos casos em que o uso do branch ou dos atributos de nivelamento pode gerar um erro de compilação. O atributo branch poderá falhar se um dos lados da instrução if contiver uma função de gradiente, como tex2D. O atributo flatten poderá falhar se um dos lados da instrução if contiver uma instrução de acréscimo de fluxo ou qualquer outra instrução que tenha efeitos colaterais.

Uma instrução if também pode usar um bloco opcional else. Se a expressão if for true, o código no bloco de instrução associado à instrução if será processado. Caso contrário, o bloco de instrução associado ao bloco opcional else será processado.

Confira também

Controle de fluxo