Les développeurs de Dolphin se débarrassent du support de Direct3D 9
. Découvrez leur point de vue sur la bibliothèque de Microsoft

Le , par LittleWhite, Responsable 2D/3D/Jeux
Les développeurs de l'émulateur GameCube/Wii Dolphin ont retiré le support de la bibliothèque 3D de Microsoft à l'occasion de la version 4.X du logiciel. Seuls les rendus utilisant Direct3D 11 et OpenGL (> 3) restent.
Ceux-ci s'expliquent sur ce choix.

Direct3D 9 est défectueux

Même si le rendu Direct3D 9 était le plus rapide des moteurs de rendu, notamment pour les cartes graphiques AMD et les cartes intégrés, la bibliothèque est très vieille. Elle a été publiée en 2001 et sa dernière mise à jour date de 2004. Du coup, énormément de fonctionnalités nécessaires pour réaliser une émulation correcte de la console ne sont pas disponibles dans la bibliothèque. C'est aussi pour cela qu'il est très rapide, car il passe sur certains effets.
Plusieurs exemples sont donnés par les développeurs :
  • largeur des lignes / taille des points : les GPU de la GameCube et de la Wii ont la possibilité de changer la largeur des lignes et la taille des points. Avec Direct3D 11 et OpenGl, il est possible de les émuler avec un geometry shader, mais ceux-ci ne sont pas disponibles dans Direct3D 9 (sauf si vous utilisez des astuces tordues).

    Effet corrompu (Direct3D 9) | Effet correct (OpenGL/Direct3D 11)


    Effet corrompu (Direct3D 9) | Effet correct (OpenGL/Direct3D 11)
  • l'alpha de destination : une autre fonctionnalité du GPU de la Wii qui est utilisée dans de nombreux jeux et ne pouvant pas être implémentée proprement avec Direct3D 9. Un possible contournement est d'effectuer deux fois le rendu. Cela n'est pas parfait mais fonctionne dans la plupart des jeux. Malheureusement, cela entraîne une augmentation de complexité du code et cela dans plusieurs fichiers. Dans Direct3D 10 et OpenGL, la fonctionnalité pouvant émuler l'effet est le mixage de deux sources (« dual source blending »). À vrai dire, Direct3D 9 possède aussi cette fonctionnalité, mais elle n'est pas répandue et même si un pilote prétend l'implémenter, cela peut finir en un crash, rendant la détection de la fonctionnalité impossible.
  • ZCompLoc : une fonctionnalité permettant d'effectuer le test de transparence avant le test de profondeur. Direct3D 11 et OpenGL le supporte à l'aide d'extensions très récentes mais Direct3D 9 n'est absolument pas capable de l'émuler. Même si un hack a été mis en place, les développeurs ne sont même pas sûrs de comprendre pourquoi cela fonctionne.

    Effet corrompu (Direct3D 9 avec le hack) | Effet correct (OpenGL)


D'après les développeurs, le moteur de rendu été très difficile à garder. Direct3D 9 possède notamment des traces de Direct3D 5 (publié en 1997). À cause des différentes couches superposées de Direct3D 9, les développeurs ne voulaient pas travailler avec.

Le support de Direct3D empêchait l'intégration de fonctionnalités.

Depuis l'abandon des plugins, l'émulateur utilise un code commun pour le rendu vidéo. Cela évite évidemment la duplication de code et permet d'ajouter de nouvelles fonctionnalités plus facilement. Malheureusement, cela implique qu'un changement dans l'un des moteurs de rendu les affecte tous. Avec les problèmes liés à Direct3D 9, les fonctionnalités ajoutées pour Direct3D 11 ou OpenGL cassaient le moteur Direct3D 9. Et comme certaines fonctionnalités, pouvant améliorer la stabilité et la vitesse de Dolphin, auraient cassé entièrement Direct3D 9, elles n'ont pas été ajoutées. Parmi celles-ci, nous comptons :
  • TEV : les environnements de textures (« Texture EnVironment ») sont une importante fonctionnalité dans le pipeline du rendu de la Wii. Une mauvaise émulation de cette fonctionnalité entraîne de très mauvais rendus (couleurs incorrectes, graphismes manquants). La plupart des calculs de TEV sont effectués avec des nombres entiers alors que la carte graphique travaille généralement avec des nombres à virgule flottante et le support des nombres entiers est un ajout récent. Il était donc nécessaire d'émuler ces calculs avec Direct3D 9 et encore, cela ne fonctionnait que pour les cas simples. Même si Direct3D 10 et OpenGL supporte les calculs avec des nombres entiers, pour le faire en Direct3D 9 il aurait fallu réécrire tout le générateur de shaders, cassant entièrement le support de Direct3D 9.

    Effet corrompu (impossible à corriger avec Direct3D 9) | Effet correct (dans la branche expérimentale)
  • Transform Feedback : le chargement des sommets est un goulot d'étranglement dans Dolphin qui peut être évité avec le « Transform Feedback ». Mais cela ne pouvait pas être implémenté car Direct3D 9 ne le supportait pas ;
  • Compute shaders : Dolphin pourrait décoder toutes les textures dans les compute shaders mais Direct3D 9 ne supporte ce type de shaders ;
  • de très nombreuses optimisations pour OpenGL et Direct3D 11.


Mais la question que l'on est en droit de se poser si le support de Direct3D 9 est enlevé est à propos du support de machines plus anciennes, notamment celles fonctionnant sous Windows XP. Sauf que cela n'est pas exact, car Windows XP supporte pleinement OpenGL 3.3 et donc, le moteur de rendu OpenGL continuera de fonctionner sous Windows XP. Mais la réalité, d'après les développeurs de Dolphin est qu'il n'y a aucune obligation de supporter un système vieux de douze ans. Si un système retarde les avancées de Dolphin, alors son support doit être stoppé.

La conclusion est que la suppression du support de Direct3D 9 permettra de grandement améliorer l'émulateur, que ce soit dans son support des fonctionnalités ou en termes de stabilité et de vitesse. De plus, les développeurs auront plus de facilité à faire progresser le développement du logiciel.

Votre opinion

Pensez-vous que la décision des développeurs de Dolphin est correcte ?
Avez-vous rencontré ce genre de problématiques dans vos développements ? Comment les avez-vous résolues ?
Pensez-vous que tous ces problèmes ne viendraient t-ils pas d'une mauvaise architecture dans le code ? Comment auriez-vous fait pour faire abstraction des bibliothèques de rendu ?

Voir aussi

Les développeurs de Dolphin dressent un tableau de la qualité du support d'OpenGL, NVIDIA et l'implémentation libre Mesa donnent de bons résultats.

Source

Blog officiel de Dolphin


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Dalini71 Dalini71 - Membre averti https://www.developpez.com
le 23/10/2013 à 10:58
Pensez-vous que la décision des développeurs de Dolphin est correcte ?

Carrément, Quand une bibliothèque est vieille et surtout plus maintenue, c'est une perte de temps que d'essayer d'adapter son code à celle-ci. Cela obligerait l'utilisation d'un tas d'astuces tordues qui nuiraient à la lisibilité et la qualité du code.

Pensez-vous que tout ces problèmes ne viendraient t-ils pas d'une mauvaise architecture dans le code ?

C'est toujours possible, mais honnêtement je pense pas. Les développeurs de Dolphin sont quand même vraiment talentueux, s'il y avait eu un moyen de contourner le problème, ils l'auraient surement trouvé.
Avatar de Markand Markand - Membre averti https://www.developpez.com
le 23/10/2013 à 16:50
C'est évidemment une très bonne nouvelle, de plus DirectX n'est compatible que Windows. Avec OpenGL on ouvre un large éventail de système d'exploitation supplémentaire.
Avatar de Nicam Nicam - Membre confirmé https://www.developpez.com
le 23/10/2013 à 17:37
Commentaire hors sujet : le support d'openGL n'est pas une nouveauté.
Il s'agit de la disparition du support de D3D 9. Tant pis pour ceux qui ont une vieille carte donc, mais est ce vraiment la cible des utilisateurs de Dolphin ? je ne pense pas.
Offres d'emploi IT
Ingénieur it
Atos - Provence Alpes Côte d'Azur - Aix-en-Provence (13100)
Développeur php / drupal
AMETIX - Ile de France - Aubervilliers (93300)
Chef de projet - amoa
INEAT Conseil - Ile de France - Ile de France

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique 2D - 3D - Jeux : LittleWhite -