Questions/réponses
- Les HLSL permettent la virtualisation des ressources ?
Le compilateur serait à même de décomposer un shader trop complexe pour la cible en plusieurs passes supprimant ainsi les limites physiques que les shaders connaissent actuellement et avec lesquels les développeurs doivent jongler. Autrement dit le shader ne serait écrit qu’une fois et ensuite exécuté sur les différents chips, or si vous avez bien suivi cet article depuis le début vous savez que ce n’est pas le cas actuellement : les compile targets ou les profils sont justement le résultat de cette carence. Présenté de cette manière la virtualisation des ressources semble être la solution à tous les problèmes alors pourquoi n’est elle pas supportée ? Tout simplement parce que c’est très complexe à mettre en place, arriver à décomposer automatiquement un shader en succession de passes est loin d’être un problème trivial.
Ensuite parce qu’étant donné l’énorme delta qui existe entre les différentes versions des shaders ce serait quasiment inutile : décomposer un pixel shader d’une centaine d’instructions pour le faire tourner sur un chip DirectX 8 demanderait tellement de passes que le résultat serait d’une lenteur inexploitable.
Pour être complet à ce sujet il convient de signaler que GLSLANG virtualise certaines ressources en particulier le nombre d’instructions dans un shader n’est pas fixé mais ce n’est pas pour ça qu’il est illimité : en fait les limites restent fixés mais cette fois par le hardware et plus par l’API : le compilateur ne décomposera pas le shader en plusieurs passes automatiquement. Il s’agit donc plus de s’affranchir des limites qui pourraient brider les futurs chips graphiques à plus ou moins long terme plutôt que d’une réelle virtualisation au sens propre du terme.
Mais il faut bien garder cette notion à l’esprit car ce sera à n’en pas douter le prochain chantier dans le domaine des HLSL : quand les chips DirectX 8 n’auront plus aucune raison d’être supportés et que la base des fonctionnalités sera du niveau DirectX 9 à ce moment là une véritable virtualisation des ressources pourra être mise en place dans les compilateurs. Les HLSL seront obligés d’en venir par là à un moment ou à un autre.
A retenir : Ce n’est pas parce qu’un shader est écrit dans un langage de haut niveau qu’il tournera automatiquement sur l’ensemble des chips graphiques sans aucune modification. Aucun HLSL actuel ne permet de s’affranchir des limites physiques des chips en recourant au rendu multi passes ce sera sans doute la prochaine évolution des HLSL.
- Quel est le rapport entre RenderMonkey et les HLSL ?
A retenir : RenderMonkey est un environnement de développement. Ce n’est ni un langage, ni un compilateur : juste une interface graphique basé sur une architecture ouverte à base de plug-ins permettant de supporter les différents HLSL.
- Qu’est ce qu’Ashli ?
L’exécution de shaders RenderMan en temps réel a fait grand bruit il y a quelques temps mais il convient de relativiser l’évènement. Tout d’abord on savait depuis l’an 2000 que cela était possible. En effet Peercy avait démontré que tout shader RenderMan pouvait être décomposé en algorithme multi passes en utilisant les fonctionnalités de base d’OpenGL 1.2 étendus avec deux extensions : les lectures de texture dépendant (apparus avec le NV20 et dont la flexibilité a été améliorée ensuite) et le support des couleurs en virgule flottante (apparu avec le R300). Et ensuite Ashli ne supporte encore qu’un sous ensemble du RenderMan Shading Language. C’est donc un pas dans la bonne direction assurément mais il reste encore du travail à accomplir.
A retenir : Ashli est une interface permettant de faire le lien entre les outils de type DCC et le hardware afin d’utiliser les fonctionnalités de ce dernier pour accélérer le rendu.