La société veut proposer une bibliothèque plus rapide et efficace que jamais. Le but est de permettre l'affiche de scènes plus riches, ayant plus d'objets et d'utiliser la totalité des dernières cartes graphiques. Contrairement aux anciennes versions, DirectX 12, n'est pas uniquement pensé pour les PC et fonctionnera aussi sur les téléphones, les tablettes et bien sûr, la Xbox One.
Différences d'utilisation du CPU sur 3DMark (en haut DirectX 11, en bas DirectX12)
Pour remplir ces objectifs, DirectX 12 introduit un nouveau pipeline permettant une très grande amélioration de l'efficacité des algorithmes, notamment ceux liés à la transparence indépendante de l'ordre d'affichage, la détection de collision et la sélection de géométrie (geometry culling). Les jeux vont bénéficier d'un surcoût diminué pour le GPU grâce à des fonctionnalités telles que les tables de descripteurs et des objets d'états du pipeline concis.
En plus des améliorations de la bibliothèque, DirectX 12 sera accompagné d'outils dès sa sortie. Ceux-ci vous permettront de mieux tirer parti des nouvelles fonctionnalités et d'améliorer grandement les performances de vos jeux.
Objets d'états du pipeline
La représentation du pipeline disponible dans Direct3D 11, à travers les objets d'états de assembleur d'entrées, du pixel shader ou du rasterizer donnaient un convenable niveau d'abstraction mais ne correspondait pas assez bien avec le matériel. Souvent, cela est dû aux dépendances entre les états. Par exemple, les GPU rassemblent le pixel shader et l'output merger en une simple représentation matérielle mais pas pour la bibliothèque Direct3D 11 faisant que le pilote ne peut gérer cela que lorsque les deux états sont définis (souvent, au moment du rendu). Dans Direct3D 12, ce problème est réglé à l'aide des objets d'état du pipeline (Pipeline State Object (PSO)) qui sont finalisés dès la création. Cela permet aux pilotes et aux cartes graphiques de directement convertir l'objet en instructions natives. Le PSO actuellement en cours d'utilisation peut être changé dynamiquement et le matériel n'aura qu'à copier les quelques données dans les registres adéquats sans avoir à recalculer l'ensemble.
Listes de commandes et bundles
Dans Direct3D 11, toutes les soumissions de jobs sont effectuées dans le contexte immédiat faisant qu'il n'y a qu'un seul flux allant au GPU. Afin de gérer le multithreading, les jeux utilisent des contextes différés, mais ceux-ci ne correspondent pas parfaitement au matériel. Direct3D 12 introduit donc un nouveau modèle pour soumettre des jobs basés sur des listes de commandes contenant toutes les informations nécessaires à exécuter le job. Chaque nouvelle liste contiendra les informations telles que le PSO à utiliser, quels sont les textures et tampons nécessaires et les arguments de l'appel de rendu. Comme chaque liste de commandes est indépendante, le pilote peut précalculer toutes les commandes GPU nécessaires.
En plus des listes de commandes, Direct3D 12 introduit un second niveau de pré-calcul : les bundles. Contrairement aux listes de commandes les bundles intègrent une forme d'héritage permettant leur réutilisation. Par exemple, si un jeu souhaite dessiner deux personnages avec différentes textures, la première approche serait d'enregistrer la liste de commandes avec deux ensembles identiques d'appels aux fonctions de rendu. Mais la seconde approche serait d'enregistrer un bundle qui dessine un seul personnage, puis "rejoue" le bundle une seconde fois sur la liste de commandes en utilisant d'autres textures. Dans ce second cas, le pilote n'a besoin de calculer les commandes qu'une seule fois.
Descripteurs de tas et tables
La liaison de ressources de Direct3D 11 est hautement abstraite et pratique, mais ne permet pas l'utilisation complète du matériel. À chaque fois qu'un jeu souhaite utiliser différentes ressources, il doit lier à nouveau les ressources et appeler la fonction de rendu.
Direct3D 12 change la façon de lier les ressources pour mieux correspondre au matériel et améliorer les performances. Pour cela, Direct3D 12 fournit un descripteur de tas dans lequel les jeux peuvent créer leurs vues de ressources permettant ainsi un mécanisme au GPU pour écrire directement la description de la ressource d'une manière native dans la mémoire. Ensuite, le jeu doit simplement spécifier les descripteurs utiles pour son rendu et le matériel n'a plus qu'à faire une simple copie de ces descripteurs pour les utiliser.
De plus, il est possible d'indexer dynamiquement les ressources dans les shaders et permettant de se passer des g-buffer.
Pour prouver cela, Microsoft montre le jeu Forza Motosport 5, un jeu de courses pour la XBox One. Grâce à DirectX 12, il a été possible aux développeurs de retrouver l'efficacité des consoles sur un PC.
NVIDIA a annoncé avoir travaillé en étroite collaboration avec Microsoft pour l'élaboration de cette nouvelle version de la bibliothèque. La société affirme avoir fourni déjà des kits de développement et des pilotes à 15 studios de développement.
La nouvelle version de DirectX est prévue pour 2015.
Votre opinion
Pensez-vous que Mantle a jeté un pavé dans la mare et force les autres bibliothèques à s'aligner sur la réduction du surcoût du pilote ? Pourquoi pensez-vous que cela est un point essentiel pour les prochaines versions de bibliothèques ?
Pensez-vous que les consoles seront rapidement rattrapées par les performances des PC ?
Que pensez-vous des bibliothèques comme Direct3D et OpenGL ? Quelles bibliothèques choisiriez-vous ?
Voir aussi
Actualité sur Mantle.
Ressource
Les tutoriels DirectX de Developpez.com. Aidez et investissez-vous dans la vie de la rubrique et la mis à disposition de tutoriel DirectX récents pour la communauté en me contactant !
Un aperçu détaillé de l'architecture de la PS4.
Source
Blog de développement Microsoft