DirectX 10

D’ici très peu de temps maintenant les premiers GPU Direct3D 10 devraient faire leur apparition, nous avons donc pensé qu’il était temps de nous attarder sur les nouveautés offertes par cette API qui est la première remise à plat complète initiée par Microsoft depuis son introduction il y a maintenant 10 ans.

Dans un premier temps l’API Direct3D a pris modèle sur sa grande sœur OpenGL, qui pouvait bénéficier de toute l’expertise et l’expérience de SGI (Silicon Graphics) dans le domaine, et a tenté d’implémenter le pipeline OpenGL dans son intégralité. Alors que les premiers GPU se contentaient du rendu, ils ont ensuite évolué pour intégrer une plus grande partie du pipeline 3D notamment le setup engine et finalement le fameux Transform & Lighing. Direct3D a donc évolué au fil des versions pour prendre en compte ces modifications ainsi que bien d’autres.

Mais une fois le pipeline de rendu complètement intégré, un point d’inflexion a été atteint, il a donc fallut entreprendre une réflexion sur l’avenir de la 3D pour ne pas se tromper de direction. Le résultat fut à la hauteur des attentes vu qu’il a donné naissance aux shaders, ces petits programmes qui permettent d’adapter le fonctionnement du GPU en fonction des besoins. Après 3 années d’évolutions rapides (cf notre article) les shaders sont arrivés à une certaine maturité et il est apparu évident qu’ils devaient occuper une position prépondérante au sein des futures API.

Les objectifs de Direct3D peuvent donc se résumer en 3 points :

  • Optimiser la performance : Direct3D 9 avait un surcoût CPU trop important, la nouvelle API devait réduire cet impact sur le CPU afin que les jeux ne soient pas artificiellement limités par le CPU.
  • Rationaliser les fonctionnalités : Depuis sa création il y a 10 ans Direct 3D a énormément évolué, de même que les GPU mais par souci de rétrocompatibilité toutes les fonctionnalités devenues obsolètes depuis bien longtemps sont toujours présentes. La nouvelle API devait donc être orthogonale c’est-à-dire n’offrir qu’une façon d’arriver à un résultat donné : la meilleure.
  • Imposer des règles strictes sur les fonctionnalités : Un des problèmes les plus handicapants pour un développeur a longtemps été les différences de comportement entre les différents GPU sur certaines fonctionnalités, voire même la différence de fonctionnalités tout court. Ils ont donc du apprendre à jouer avec les caps bits de DirectX et les extensions d’OpenGL pour arriver à leurs fins. La nouvelle API devait donc garantir un jeu de fonctionnalités fixe que tous les GPU devraient intégrer dans son intégralité.

La contrepartie de ces choix radicaux est qu’il est désormais impossible d’offrir des drivers compatibles Direct3D 10 pour un GPU DirectX 9. Comme nous l’avons vu plus haut la nouvelle API n’hésite pas à briser la rétrocompatibilité et un jeu Direct3D 10 ne tournera donc que sur une carte Direct3D 10. Notons que ça ne change pas fondamentalement les choses pour les joueurs : jusqu’ici un GPU DirectX 8 pouvait certes utiliser les interfaces DirectX 9 mais si un jeu faisait appel à des fonctions spécifiques à cette API il fallait de toute façon que le développeur ait prévu un code path adapté aux GPU DirectX 8. Avec la nouvelle API, vu que les jeux exclusivement DirectX 10 ne sont pas prêts d’arriver, les développeurs devront donc développer deux exécutables différents : l’un utilisant les bibliothèques DirectX 9, l’autre DirectX 10. En clair il s’agit donc plus d’un casse tête supplémentaire pour les développeurs que pour les joueurs qui devraient bénéficier de versions DirectX 9 de leurs jeux favoris pendant encore longtemps, le temps que Vista et les cartes Direct3D 10 se généralisent.