DirectX 10 : En avant la 3D unifiée !
La nouvelle version majeure du système d'exploitation grand public de Microsoft, j'ai nommé
Windows Vista, intègre une toute nouvelle interface de programmation 3D. Celle-ci, qui a portée presque tous les noms de la création (Windows Graphic Fundation, DirectX Next, etc.) se nomme finalement DirectX 10 et est exclusivement réservée à Windows Vista, Microsoft n'ayant pas l'intention de la porter sous Windows XP. Bien que DirectX 10 succède à DirectX 9.0, toute la partie concernant le rendu graphique a été totalement revue et repensée. DirectX 10 abandonne en effet toutes les fonctions fixes héritées des précédentes moutures de l'API et n'est donc compatible qu'avec les puces graphiques DirectX 10. C'est précisément pour cette raison que Windows Vista intègre également une version adaptée de DirectX 9.0 nommée Direct3D 9Ex pour permettre le bon fonctionnement des jeux actuels sur ce nouveau système.
En repartant sur de nouvelles bases, Microsoft vise avant tout à rendre son API plus légère afin que celle-ci consomme moins de temps processeur. L'éviction du support des fonctions fixes n'est pas la seule raison expliquant la diminution de la consommation processeur de DirectX 10. Par exemple, quand DirectX 9.0 procède à une validation systématique des ressources à chaque utilisation, DirectX 10 le fait une seule fois à la création, réduisant ainsi les cycles processeur. Ce n'est bien sûr pas le seul changement puisque DirectX 10 propose un tout nouveau pipeline 3D ainsi qu'un tout nouveau modèle de programmation. Les ingénieurs de Microsoft ont en effet procédé à l'unification des instructions que ce soit pour la programmation des pixels shaders ou celles des vertex shaders toujours dans le but de faciliter la vie des programmeurs. Reste que ceci ne signifie pas nécessairement qu'une puce graphique DirectX 10 se doit de disposer d'une architecture unifiée. Qui dit nouvelle version de DirectX, dit généralement nouvelle version du modèle de Shaders et avec DirectX 10 Microsoft inaugure le Shader Model 4.0.
DirectX 10 : Seulement disponible sous Windows Vista
En avant la géométrie avec DirectX 10 !
Parmi les nouveautés du Shader Model 4.0, on note bien sûr l'apparition des nuanciers de géométrie ou Geometry Shaders en anglais. Il s'agit ici de permettre au GPU de générer de la géométrie et non plus seulement de la manipuler (ce à quoi servent les Vertex Shaders). Les Geometry Shaders se servent des primitives (points, lignes ou triangles) pour générer in fine la création de formes entières, une tâche autrefois dévolue au CPU. Si un Geometry Shader ne peut générer des types de primitives différentes de celles sur lesquelles il travaille, il peut en revanche accéder aux informations des formes adjacentes, ce qui sera utile pour par exemple calculer les bords d'une silhouette. S'appuyant sur les données fournies par les Vertex Shaders, d'ailleurs situés immédiatement avant dans le nouveau pipeline 3D de DirectX, l'un des usages des Geometry Shaders sera d'augmenter les détails géométriques des objets 3D pour toujours plus de réalisme. Il s'agit de rajouter des polygones à un modèle existant, chose que l'on ne sait pas faire avec les Vertex Shaders (ce qui n'est pas sans rappeler le TruForm d'ATI). Malgré tout, les Geometry Shaders devraient permettre d'autres usages comme la génération de systèmes de particules ou encore d'effets de type fourrure. NVIDIA évoque également des effets de simulation de chevelure. Reste que la puissance exigée pour le traitement des Geometry Shaders est telle que les premières générations de GPU DirectX 10 ne devraient pas être capables d'en faire un usage intensif.
Exemple fournit par Microsoft d'utilisation de Geometry Shaders pour augmenter le détail d'une figure
Le passage au Shader Model 4.0 s'accompagne de bien d'autres nouveautés comme le Stream Output qui permet d'écrire en mémoire les données résultantes d'un traitement au niveau des Vertex Shaders ou des Geometry Shaders, et ce, avant le traitement des Pixels Shaders. Ceci devrait être particulièrement utile dans le cas où un calcul nécessite plusieurs passes d'autant que jusqu'à présent, les GPU ne pouvaient écrire en mémoire que les pixels. En plus de l'unification des instructions au niveau de la programmation, les limitations imposées au niveau de la programmation des vertex ou des pixels shaders sont maintenant unifiées. Comme à chaque nouvelle version de DirectX, le nombre maximum d'instructions augmente de 512 à 65536 alors que le nombre d'instructions exécutées atteint dorénavant l'infini et que le nombre de registres temporaires est lui aussi revu à la hausse, et pas de peu, puisqu'il passe de 32 à 4096. Bien entendu, les fabricants de
Processeurs graphiques n'auront pas à intégrer un tel nombre de registres dans leurs puces, mais en revanche leurs
pilotes se doivent de les gérer.
Aperçu du nouveau pipeline Direct3D de DirectX 10