Usando a precisão mínima de HLSL

Começando com Windows 8, os drivers gráficos podem implementar tipos de dados escalares HLSL de precisão mínima usando qualquer precisão maior ou igual à precisão de bit especificada. Quando o código do sombreador de precisão mínima HLSL é usado no hardware que implementa a precisão mínima de HLSL, você usa menos largura de banda de memória e, como resultado, também usa menos energia do sistema.

Você pode consultar o suporte de precisão mínima que o driver gráfico fornece chamando ID3D11Device::CheckFeatureSupport com o valor D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Para obter mais informações, consulte Suporte de precisão mínima HLSL.

Declarar variáveis com tipos de dados de precisão mínima

Para usar a precisão mínima no código do sombreador HLSL, declare variáveis individuais com tipos como min16float (min16float4 para um vetor), min16int, min10float e assim por diante. Com essas variáveis, o código do sombreador indica que ele não requer mais precisão do que as variáveis indicam. Mas o hardware pode ignorar os indicadores mínimos de precisão e ser executado com precisão total de 32 bits. Quando o código do sombreador é usado em hardware que aproveita a precisão mínima, você usa menos largura de banda de memória e, como resultado, também usa menos energia do sistema, desde que o código do sombreador não espere mais precisão do que o especificado.

Você não precisa criar vários sombreadores que fazem e não usam precisão mínima. Em vez disso, crie sombreadores com precisão mínima e as variáveis de precisão mínima se comportem com precisão total de 32 bits se o driver gráfico relatar que ele não dá suporte a nenhuma precisão mínima. Sombreadores de precisão mínima HLSL não funcionam em sistemas operacionais anteriores a Windows 8 portanto, se você planeja direcionar sistemas operacionais anteriores, precisará criar vários sombreadores, alguns que fazem e outros que não usam precisão mínima.

Observação

Não faça mudanças de dados entre diferentes níveis de precisão dentro de um sombreador porque esses tipos de conversões são um desperdício e reduzem o desempenho. A exceção é que as constantes de sombreador ainda são sempre de 32 bits, mas os fornecedores podem criar hardware gráfico que pode converter livremente para baixo em qualquer precisão mais baixa que a leitura de instrução HLSL possa usar.

 

Usando a precisão mínima, você pode controlar a precisão dos cálculos em várias partes do código do sombreador.

As regras para precisão mínima de HLSL são semelhantes a C/C++, em que os tipos em uma expressão determinam a precisão da operação, não o tipo que está sendo gravado eventualmente.

Testando seu código de sombreador de precisão mínima

O rasterizador de referência (D3D_DRIVER_TYPE_REFERENCE) fornece uma ideia aproximada de como a precisão mínima no código do sombreador HLSL se comporta quantificando cada instrução HLSL para a precisão especificada. Isso ajuda você a descobrir o código que pode depender acidentalmente de mais do que a precisão mínima. O rasterizador de referência não é executado mais rapidamente quando o código do sombreador HLSL usa precisão mínima, mas você pode usá-lo para verificar a exatidão do código. O WARP (D3D_DRIVER_TYPE_WARP) não dá suporte ao uso de precisão mínima no código do sombreador HLSL; WARP é executado com precisão total de 32 bits.

Guia de programação para HLSL