Utilisation de la précision minimale HLSL

À compter de Windows 8, les pilotes graphiques peuvent implémenter des types de données scalaires HLSL de précision minimale en utilisant toute précision supérieure ou égale à la précision de bits spécifiée. Lorsque votre code de nuanceur de précision minimale HLSL est utilisé sur du matériel qui implémente la précision minimale HLSL, vous utilisez moins de bande passante mémoire et, par conséquent, vous utilisez également moins d’alimentation système.

Vous pouvez interroger la prise en charge de la précision minimale que fournit le pilote graphique en appelant ID3D11Device::CheckFeatureSupport avec la valeur D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Pour plus d’informations, consultez Prise en charge de la précision minimale HLSL.

Déclarer des variables avec des types de données de précision minimale

Pour utiliser une précision minimale dans le code de nuanceur HLSL, déclarez des variables individuelles avec des types tels que min16float (min16float4 pour un vecteur), min16int, min10float, etc. Avec ces variables, votre code de nuanceur indique qu’il ne nécessite pas plus de précision que ce qu’indiquent les variables. Mais le matériel peut ignorer les indicateurs de précision minimale et s’exécuter à une précision complète de 32 bits. Lorsque votre code de nuanceur est utilisé sur du matériel qui tire parti d’une précision minimale, vous utilisez moins de bande passante mémoire et, par conséquent, vous utilisez également moins d’alimentation système tant que votre code de nuanceur ne s’attend pas à plus de précision qu’il n’a spécifié.

Vous n’avez pas besoin de créer plusieurs nuanceurs qui n’utilisent pas une précision minimale. Au lieu de cela, créez des nuanceurs avec une précision minimale, et les variables de précision minimale se comportent à une précision totale de 32 bits si le pilote graphique indique qu’il ne prend pas en charge une précision minimale. Les nuanceurs de précision minimale HLSL ne fonctionnent pas sur les systèmes d’exploitation antérieurs à Windows 8 par conséquent, si vous envisagez de cibler des systèmes d’exploitation antérieurs, vous devez créer plusieurs nuanceurs, certains qui le font et d’autres qui n’utilisent pas une précision minimale.

Notes

N’effectuez pas de commutateurs de données entre différents niveaux de précision au sein d’un nuanceur, car ces types de conversions sont gaspiller et réduisent les performances. L’exception est que les constantes de nuanceur sont toujours 32 bits, mais les fournisseurs peuvent concevoir du matériel graphique qui peut librement effectuer une conversion descendante en toute précision inférieure que la lecture d’instructions HLSL peut utiliser.

 

En utilisant la précision minimale, vous pouvez contrôler la précision des calculs dans différentes parties de votre code de nuanceur.

Les règles de précision minimale HLSL sont similaires à C/C++, où les types d’une expression déterminent la précision de l’opération, et non le type dans lequel il est écrit.

Test de votre code de nuanceur de précision minimale

Le rastériseur de référence (D3D_DRIVER_TYPE_REFERENCE) vous donne une idée approximative de la façon dont la précision minimale de votre code de nuanceur HLSL se comporte en quantifiant chaque instruction HLSL à la précision spécifiée. Cela vous permet de découvrir du code qui peut accidentellement dépendre d’une précision supérieure à la précision minimale. Le rastériseur de référence ne s’exécute pas plus rapidement lorsque votre code de nuanceur HLSL utilise une précision minimale, mais vous pouvez l’utiliser pour vérifier l’exactitude de votre code. WARP (D3D_DRIVER_TYPE_WARP) ne prend pas en charge l’utilisation d’une précision minimale dans le code de nuanceur HLSL ; WARP s’exécute simplement à une précision 32 bits complète.

Guide de programmation pour HLSL