La nouvelle interface de programmation 3D proposée par Microsoft a beaucoup fait parler d’elle ne serait-ce que pour son nom qui n’a cessé d’évoluer tout au long de son développement. Appelée Windows Graphic Fundation WGF, WGF 2.0 ou encore DirectX Next, la nouvelle version de la célèbre API (Application Programming Interface) de Microsoft a finalement été baptisée "DirectX 10". Mais pourquoi Microsoft aurait-il essayé de changer le nom d’une API connu de tous ?
Si le géant du logiciel de Redmond  a essayé de trouver un nouveau nom pour son API, c’est tout simplement parce que DirectX 10 n’est pas une simple évolution de DirectX 9 mais plutôt une version entièrement repensée qui part sur de nouvelles bases pour offrir plus de performances et de fonctions tout en sollicitant moins le processeur central. Pour réaliser ce travail, Microsoft a donc mis au rebut toutes les fonctions précédemment intégrées dans DiretcX 9 pour en créer de nouvelles plus évoluées. C’est essentiellement pour cette raison que DirectX 10 n’est pas compatible avec les cartes graphiques, les jeux et les systèmes d’exploitation optimisés pour DirectX 9.
Windows Vista est  le seul système d’exploitation capable de prendre en charge DirectX 10. Pour faire fonctionner vos cartes graphiques et jeux actuels, Windows Vista intègre aussi une variante de DirectX 9 appelée "Direct3D 9Ex". DirectX 10 marque donc un véritable tournant dans la gestion de la 3D sous Windows tout en apportant son lot de nouveautés comme les Shader Model 4.0 avec l’ajout des geometry shaders, un pipeline repensé en conséquence ou encore les tableaux de textures.Â
Quoi de neuf dans DirectX 10 ?
DirectX est lui-même composé de plusieurs API : Direct3D (Accélération graphique 3D), DirectDraw (Accélération graphique 2D), DirectVideo (Accélération des séquences vidéos), DirectSound: (pour le son) (...) et c’est donc naturellement sur Direct3D 10 que nous nous sommes penchés avec l’aide de ce document fourni par Microsoft pour mieux comprendre les évolutions apportées à DirectX 10.
Une API moins gourmande en ressources CPU:
Comme nous vous l’avions déjà indiqué un peu plus haut, un des principaux objectifs de Microsoft était de diminuer le nombre de cycle CPU nécessaire pour piloter la carte graphique et son GPU.
Pour obtenir ce résultat, Microsoft a tout simplement tiré un trait sur toutes les instructions fixes intégrées à DirectX 9 pour partir d’une "feuille blanche" et réaliser un code propre qui hélas n’est pas compatible avec Windows XP.
Les programmeurs de Microsoft ont aussi procédé à l’unification de la programmation des vertex shaders et des pixels shaders obligeant les constructeurs de cartes graphiques à proposer eux aussi une architecture unifiée de leurs GPU afin de tirer partie de DiretcX 10. Si Microsoft a fait ce choix, c’est pour une raison assez simple : dans les GPU des cartes graphiques comptibles DirectX 9 que nous connaissons, on trouvait des processeurs dédiés au traitement des vertex shaders et d’autres dédiées aux pixels shaders. Selon les jeux ou les applications 3D, ces unités de traitement étaient plus ou moins exploitées. Et une unité de traitement inutilisée parce qu’elle ne sait faire qu’un seul type de tâche, c’est de la puissance inexploitée pour accélérer la 3D. Avec l’unification, les unités de traitements des shaders ne sont plus dédiées à une tâche précise mais peuvent selon les besoins traiter des pixel shaders, des vertex shaders, ou encore des geometry shaders. Avec DirectX 10 et une carte graphique compatible, on est ainsi certain  que quel que soit la tâche en cours, tous les processeurs de rendu de la carte graphique sont utilisés. Cette unification contribue à réduire le nombre de cycles nécessaires à un rendu aussi bien du côté de la carte graphique que du processeur central. Â
Pour finir et c’est un peu logique vu les changements cités plus haut, Microsoft a intégré un nouveau pipeline 3D ainsi que les Shader Model 4.0 qui l’un comme l’autre contribuent aussi à diminuer le nombre de cycle CPU nécessaire pour réaliser une opération 3D.   Â
Nombre de cycle nécessaire à l’éxécution d’une commande 3D avec un Pentium IV.
A en voir le tableau ci-dessus, on peut dire que c’est un pari réussi par Microsoft. Avec DirectX 10, une carte graphique aussi puissante soit-elle ne sera plus pénalisée par un petit processeur. Passons maintenant aux nouveautés...
Les Shader Model 4.0:
Comme nous l’indiquions un peu plus haut, DirectX 10 introduit un nouveau pipeline 3D qui en plus de son optimisation intègre un nouveau modèle de programmation: les Shader Model 4.0
Pipeline de Direct3D 10 (nouveautés en vert)
Si l’on observe rapidement le schéma ci-dessus, on constate en un coup d’oeil que les geometry shaders (Nuanciers de géométrie) constituent la principale nouveauté apportée à ce pipeline et donc aux Shaders Model 4.0. Alors que les Vertex Shader servent à manipuler la géométrie crée par le CPU pour la déformer, les Geometry Shaders se servent des primitives (points, lignes ou triangles) pour en créer d’autres. En agissant sur les données fournies par les Vertex Shaders (situé juste avant dans le pipeline: voir schéma ci-dessus) les Geométry Shaders peuvent ajouter infiniment des polygones à une forme géométrique afin de la rendre plus réaliste.
Exemple d’augmentation des détails en utilisant les Geometry Shaders
Toutefois, cette technique qui permet d’améliorer les détails n’a pas grand chose de nouveau hormis le fait que c’est la première fois qu’une carte graphique peut la prendre en charge délestant ainsi un peu plus le processeur central (CPU) des opérations liées à l’accélération 3D.
Parmi les autres nouveautés notables sur le schéma du pipeline, on remarque le "Stream Output" qui permet d’écrire en mémoire les données déjà traitées par les Vertex Shaders et les Geometry Shaders. Cela permet de traiter les Vertex Shaders et les Geometry Shaders en plusieurs passes sans arriver aux Pixel Shaders ce qui bien sûr contribue là encore à  accélérer le traitement de l’information.
Des limites repoussées:
Chaque évolution de DirectX arrive avec une évolution du Shader Model qui pour rappel vient de passer en version 4.0. Cette nouvelle version n’a pas engendrer que des modifications du pipeline. Dans le tableau ci-dessous qui représente les différentes évolutions du Shader Model, on constate que Microsoft en a profité pour revoir à la hausse certaines valeurs comme le nombre d’instruction, le nombre de registre temporaires (...) afin d’éviter de limiter les développeurs. Par exemple, on peut citer le nombre d’instructions qui passe à 65536 au lieu de 512 ou encore les registres temporaires qui passent 4096 au lieu de 32.Â
Les lignes en pointillé séparent les vertex shaders (au dessus) et les pixels shaders (en dessous).
‡texture load + arithmetic instructions;     §texture + color registers;
Grâce à l’unification des Shaders, on remarque aussi que les spécifications des Shader Model 4.0 sont plus simples (colonne de droite) avec des valeurs logiquement similaires pour les Pixel et Vertex Shaders.Â
Il y aurait encore de nombreuses choses à dire sur DirectX 10 mais nous n’irons pas plus loin... Tout d’abord, nous ne voudrions pas vous donner une bonne migraine, et ensuite, nous en savons largement assez pour comprendre l’impact de DirectX 10 sur le fonctionnement d’une GeForce 8800. Par conséquent nous savons aussi ce qu’il manque à DirectX 9 pour tirer la pleine quintessence d’une carte graphique compatible avec DiretcX 10. Passons maintenant à l’architecture du G80, le GPU qui intègre les GeForce 8800.