Compartir a través de


Uso de la precisión mínima de HLSL

A partir de Windows 8, los controladores gráficos pueden implementar tipos de datos escalares HLSL de precisión mínima mediante cualquier precisión mayor o igual que su precisión de bits especificada. Cuando se usa el código de sombreador de precisión mínima de HLSL en el hardware que implementa la precisión mínima de HLSL, se usa menos ancho de banda de memoria y, como resultado, también se usa menos energía del sistema.

Puede consultar la compatibilidad de precisión mínima que proporciona el controlador de gráficos llamando a ID3D11Device::CheckFeatureSupport con el valor de D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Para obtener más información, consulta Compatibilidad con la precisión mínima de HLSL.

Declarar variables con tipos de datos de precisión mínima

Para usar la precisión mínima en el código del sombreador HLSL, declare variables individuales con tipos como min16float (min16float4 para un vector), min16int, min10float, etc. Con estas variables, el código del sombreador indica que no requiere más precisión que lo que indican las variables. Pero el hardware puede ignorar los indicadores de precisión mínima y ejecutarse con una precisión completa de 32 bits. Cuando se usa el código del sombreador en el hardware que aprovecha la precisión mínima, se usa menos ancho de banda de memoria y, como resultado, también se usa menos energía del sistema, siempre y cuando el código del sombreador no espere más precisión de lo especificado.

No es necesario crear varios sombreadores que sí y no usen la precisión mínima. En su lugar, cree sombreadores con precisión mínima y las variables de precisión mínima se comportan con precisión completa de 32 bits si el controlador de gráficos informa de que no admite ninguna precisión mínima. Los sombreadores de precisión mínima de HLSL no funcionan en sistemas operativos anteriores a Windows 8, por lo que si tiene previsto dirigirse a sistemas operativos anteriores, deberá crear varios sombreadores, algunos que no usan precisión mínima.

Nota:

No haga que los datos cambien entre distintos niveles de precisión dentro de un sombreador porque estos tipos de conversiones son desperdiciados y reducen el rendimiento. La excepción es que las constantes de sombreador siguen siendo siempre de 32 bits, pero los proveedores pueden diseñar hardware gráfico que pueda reducir libremente la conversión a cualquier precisión inferior que pueda usar la lectura de instrucciones HLSL.

 

Mediante el uso de la precisión mínima, puede controlar la precisión de los cálculos en varias partes del código del sombreador.

Las reglas para la precisión mínima de HLSL son similares a C/C++, donde los tipos de una expresión determinan la precisión de la operación, no el tipo en el que finalmente se escribe.

Prueba del código de sombreador de precisión mínima

El rasterizador de referencia (D3D_DRIVER_TYPE_REFERENCE) proporciona una idea aproximada de cómo se comporta la precisión mínima en el código de sombreador HLSL cuantificando cada instrucción HLSL con la precisión especificada. Esto le ayuda a detectar código que podría depender accidentalmente de más de la precisión mínima. El rasterizador de referencia no se ejecuta más rápido cuando el código del sombreador HLSL usa una precisión mínima, pero puede usarlo para comprobar la corrección del código. WARP (D3D_DRIVER_TYPE_WARP) no admite el uso de la precisión mínima en el código del sombreador HLSL; WARP solo se ejecuta con precisión completa de 32 bits.

Guía de programación para HLSL