Article de reference

Langage de shaders de haut niveau

Sémantique Préprocesseur Cg implémente de nombreuses directives du préprocesseur C et son système d'expansion de macros. Il implémente Fonctionnalités HLSL Espace de noms Annota...

Sémantique

Préprocesseur

Cg implémente de nombreuses directives du préprocesseur C et son système d'expansion de macros. Il implémente

Fonctionnalités HLSL

  • Espace de noms
  • Annotation

Environnement

Les programmes Cg sont conçus pour différents profils de shaders, correspondant à des GPU aux capacités variées. Ces profils déterminent notamment le nombre d'instructions par shader, le nombre de registres disponibles et les ressources utilisables. Même un programme correct peut s'avérer trop complexe pour fonctionner avec un profil donné.

Face à la multiplication des types de profils et de shaders, Microsoft a adopté le terme « modèle de shader » pour désigner un ensemble de profils présents dans une génération de GPU. Cg prend en charge certains des profils les plus récents jusqu’au modèle de shader 5.0, ainsi que la conversion vers GLSL ou HLSL.

Les GPU listés sont les premiers à avoir pris en charge les spécifications indiquées. Les fabricants prennent généralement en charge tous les modèles de shaders inférieurs via les pilotes. Notez que certains jeux peuvent exiger une version spécifique de DirectX sans pour autant nécessiter un GPU conforme à l'intégralité des spécifications de cette version. En effet, les développeurs peuvent utiliser une version plus récente de l'API DirectX pour cibler du matériel moins performant en Direct3D ; par exemple, DirectX 9 exploite des fonctionnalités du matériel DirectX 7 qui n'étaient pas prises en charge par DirectX 7, ciblant ainsi son pipeline T&L à fonction fixe.

comparaison des shaders de pixels

  • PS 1.03dfx Rampage non publié, DirectX 8
  • PS 1.1GeForce 3 , DirectX 8
  • PS 1.23Dlabs Wildcat VP, DirectX 8.1
  • PS 1.3GeForce 4 Ti , DirectX 8.1
  • PS 1.4Radeon 8500–9250 , Matrox Parhelia , DirectX 8.1
  • Shader Model 2.0Radeon 9500–9800/X300–X600 , DirectX 9
  • Shader Model 2.0a — Modèle optimisé pour GeForce FX/PCX , DirectX 9.0a
  • Shader Model 2.0b — Modèle de shader Radeon X700–X850 , DirectX 9.0b
  • Shader Model 3.0Radeon X1000 et GeForce 6 , DirectX 9.0c
  • Shader Model 4.0Radeon HD 2000 et GeForce 8 , DirectX 10
  • Shader Model 4.1Radeon HD 3000 et GeForce 200 , DirectX 10.1
  • Shader Model 5.0Radeon HD 5000 et GeForce 400 , DirectX 11
  • Shader Model 5.1GCN 1+ , Fermi+, DirectX 12 (11_0+) avec WDDM 2.0
  • Shader Model 6.0 — GCN 1+, Kepler+, DirectX 12 (11_0+) avec WDDM 2.1
  • Shader Model 6.1 — GCN 1+, Kepler+, DirectX 12 (11_0+) avec WDDM 2.3
  • Shader Model 6.2 — GCN 1+, Kepler+, DirectX 12 (11_0+) avec WDDM 2.4
  • Shader Model 6.3 — GCN 1+, Kepler+, DirectX 12 (11_0+) avec WDDM 2.5
  • Shader Model 6.4 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) avec WDDM 2.6
  • Shader Model 6.5 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) avec WDDM 2.7
  • Shader Model 6.6 — GCN 4+, Maxwell+, DirectX 12 (11_0+) avec WDDM 3.0
  • Shader Model 6.7 — GCN 4+, Maxwell+, DirectX 12 (12_0+) avec WDDM 3.1
  • Shader Model 6.8 — RDNA 1+, Maxwell 2+, DirectX 12 (12_0+) avec WDDM 3.1 / 3.2 et Agility SDK

« 32 + 64 » pour les instructions exécutées signifie « 32 instructions de texture et 64 instructions arithmétiques ».

comparaison des shaders de vertex

La bibliothèque standard

Comme en C, Cg/HLSL propose un ensemble de fonctions pour les tâches courantes de la programmation GPU. Certaines de ces fonctions ont des équivalents en C, comme les fonctions mathématiques abs et sin, tandis que d'autres sont spécialisées dans les tâches de programmation GPU, comme les fonctions de texturage tex1D et tex2D.

La bibliothèque d'exécution Cg/HLSL

Les programmes Cg/HLSL ne sont que des shaders de vertex et de pixels ; ils nécessitent des programmes auxiliaires pour gérer le reste du rendu. Cg peut être utilisé avec deux API graphiques : OpenGL ou DirectX . Chacune possède ses propres fonctions Cg pour communiquer avec le programme Cg, notamment pour définir le shader Cg courant, passer des paramètres, etc. (HLSL est compatible uniquement avec DirectX.)

Outre la possibilité de compiler le code source Cg en code assembleur, l'environnement d'exécution Cg peut également compiler les shaders lors de l'exécution du programme. Cela lui permet de compiler le shader en utilisant les dernières optimisations disponibles pour le matériel sur lequel le programme s'exécute. Cependant, cette technique exige que le code source du shader soit accessible en clair au compilateur, permettant ainsi à l'utilisateur du programme d'y accéder. Certains développeurs considèrent cela comme un inconvénient majeur.

Pour éviter d'exposer le code source du shader, tout en conservant certaines optimisations matérielles spécifiques, le concept de profils a été développé. Les shaders peuvent être compilés pour s'adapter à différentes plateformes matérielles graphiques (selon les profils). Lors de l'exécution du programme, le shader le plus performant/optimisé est chargé en fonction de son profil. Par exemple, il peut exister un profil pour une carte graphique prenant en charge des shaders de pixels complexes, et un autre profil pour une carte prenant uniquement en charge des shaders de pixels minimaux. En créant un shader de pixels pour chacun de ces profils, un programme peut étendre la compatibilité avec un plus grand nombre de plateformes matérielles sans compromettre la qualité d'image sur les systèmes puissants.

Compilateurs et dialectes

Le dialecte Cg n'a jamais eu qu'un seul compilateur, sous la forme du kit d'outils Cg de Nvidia.

Microsoft a publié deux compilateurs pour HLSL. Le compilateur d'origine était le compilateur propriétaire FXC (Effect Compiler), pris en charge jusqu'en 2015. Il a été déprécié au profit du compilateur open source DXC (DirectXShaderCompiler), basé sur LLVM et prenant en charge les nouvelles fonctionnalités HLSL. Les deux compilateurs génèrent du bytecode : tandis que l'ancien FXC utilisait DXBC, DXC utilise désormais DXIL. DXC peut également générer du bytecode SPIR-V .

Le groupe Khronos a également développé un compilateur HLSL basé sur LLVM, sous la forme d'une interface pour glslang , leur compilateur GLSL vers SPIR_V. La prise en charge de SPIR-V permet aux shaders d'être multiplateformes, ne les limitant plus à une pile DirectX. Cette tâche était auparavant effectuée par des convertisseurs au niveau du code source comme HLSL2GLSL , mais le code résultant est souvent volumineux.

Langues dérivées

Le langage de shaders PlayStation (PSSL) est basé sur Cg/HLSL.

Le langage de shaders ReshadeFX est également basé sur Cg/HLSL. Les shaders écrits en ReshadeFX sont compilés en OpenGL, DX ou Vulkan et injectés dans les jeux pour servir de filtres de post-traitement.

Depuis, Khronos a fait évoluer glslang en slang , un langage de shaders et un compilateur dont le code source est majoritairement compatible avec HLSL. Slang peut compiler vers des langages de shaders textuels (GLSL, MSL , CUDA, WGSL ), des bytecodes (D3D11, D3D12, Vulkan SPIR-V ) ainsi que vers le processeur. Il dispose également d'un mode de compatibilité GLSL.

Applications et jeux utilisant Cg ou HLSL

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index