Se connecter avec
S'enregistrer | Connectez-vous

Direct3D 11

AMD Radeon HD 5870 : redoutablement efficace !
Par

Comme nous venons de le voir si la puissance brute de ce nouveau GPU a connu une sérieuse remise à niveau, les bases de l’architecture n’ont pas vraiment évoluées depuis le RV770. Cependant il ne faut pas négliger le fait que ce nouveau GPU est le premier à supporter la toute dernière API graphique de Microsoft : Direct3D 11 il est donc temps de nous attarder sur les nouveautés de cette API.

Avec Direct 3D 10 Microsoft promettait une petite révolution et le moins qu’on puisse dire est que la transition s’est faite dans la douleur. Les raisons de ces difficultés sont multiples : tout d’abord Direct3D 10 imposait des changements radicaux par rapport à son prédécesseur ce qui imposait aux programmeurs, bien rodés à DirectX 9 après des années de pratique, de réapprendre les nouvelles bonnes façons de procéder pour obtenir le meilleur de l’API.

Un autre problème de Direct3D 10 venait de son lien exclusif à Windows Vista. Sans entrer dans un débat sur la qualité de cet OS il faut objectivement reconnaître que son succès n’a pas vraiment été à la hauteur des attentes, particulièrement chez les joueurs. En conséquence la base installée de plateformes supportant la dernière API de Microsoft est restée relativement limitée. Du côté des développeurs les choses n’étaient pas vraiment roses non plus, Drect3D 10 n’était compatible qu’avec les GPU Direct3D 10, comme une grosse majorité de joueurs utilisaient encore des cartes DirectX 9 les développeurs devaient donc écrire deux versions différentes de leurs moteurs : une pour chaque API et comme le fonctionnement des deux API était largement différent il ne s’agissait pas vraiment d’une tâche triviale pouvant se réduire à quelques directives au processeur pour interchanger les appels d’API.

Avec Direct3D 11 Microsoft a reconnu les erreurs commises avec sa précédente API et tenté d’y remédier. Pour résoudre le problème que nous évoquions, la firme de Redmond a introduit un système de feature levels, permettant d’utiliser un GPU DirectX 9, Direct3D 10 ou Direct3D 10.1 par l’intermédiaire de l’API de Direct3D 11. Evidemment ce n’est pas magique : l’utilisation de Direct 3D 11 sur un GPU DirectX 9 ne lui permettra pas de supporter les dernières fonctionnalités introduites par l’API, il faudra se limiter au sous ensemble supporté par le hardware. Ceci simplifiera tout de même grandement la tâche des programmeurs souhaitant supporter un large parc de hardware. Pas de miracle en revanche : Direct3D 11 reste lié à Windows Vista et à Windows 7, mais l’arrivée de ce dernier, dont les premières évaluations sont particulièrement enthousiastes devraient finir de convaincre les derniers amoureux de Windows XP d’abandonner enfin leur OS fétiche.

Nous avons déjà consacré un dossier à Direct3D 11 il y a environ un an, vous pouvez le consulter pour avoir une idée des nouveautés introduites par l’API mais depuis cette introduction basée sur les présentations de Microsoft à la GameFest le SDK a été rendu disponible et de plus amples détails sont accessibles nous allons donc compléter les informations de notre précédent dossier.

Shader Model 5 : de nouvelles instructions

Comme à chaque nouvelle version Microsoft introduit à son langage de shaders de nouvelles instructions le rendant plus flexible. Parmi celles-ci on trouve ainsi une nouvelle valeur disponible en entrée d’un Pixel Shader : SV_Coverage, qui permet de connaître quels échantillons d’un pixel sont couverts par une primitive. Cela ouvre des possibilités intéressantes comme notamment une façon rapide de déterminer si on se situe sur les bords d’une primitive (si tous les échantillons n’ont pas la même valeur).

L’instruction Gather4 qui permet de récupérer 4 valeurs d’une texture à un composant avec un seul adressage de texture a vu ses fonctionnalités étendues : il est désormais possible de l’utiliser dans les textures à plusieurs composants en spécifiant le canal (rouge, vers, bleu, alpha) que l’on souhaite récupérer.

Les fonctions de dérivée partielles qui sont utiles pour implémenter des filtrages de texture particuliers sont complétées par de nouvelles instructions permettant d’obtenir une approximation plus rapide.

Microsoft a également ajouté un tas d’instructions de manipulation de bit qui si elles n’étaient pas forcément utiles dans le domaine graphique feront le bonheur des adeptes du GPGPU en permettant d’accélérer tout un tas de technique de compression/décompression des données par exemple. Un support optionnel des nombres flottant double précision a également été mis en place et enfin on trouve des instructions de conversion des nombres flottants 32 bit (single précision) en flottants 16 bit (half precision).