Après six mois de développement, une nouvelle version de DXVK (Direct3D to Vulkan Translation Layer) a été publiée. Il s'agit d'une bibliothèque open-source qui convertit les appels API Direct3D 8, 9, 10 et 11 en commandes Vulkan. Cela permet d'exécuter des applications et des jeux 3D conçus pour Windows sur des systèmes dépourvus de support natif de Direct3D, tout en exploitant les capacités du graphique API Vulkan, plus efficace.
Principales modifications
La nouvelle version a fait la transition vers l'utilisation des spécifications et extensions Vulkan 1.4, ce qui nécessitera donc un pilote compatible.
DXVK utilise maintenant dxbc-spirv pour compiler les shaders pour tous les modèles de shaders pris en charge. Cela élimine un certain nombre de problèmes qui ne pouvaient pas être résolus auparavant :
Problèmes de rendu dans les jeux, causés soit par le fait que les jeux comptent sur un comportement indéfini, soit par le fait que FXC génère dans certains cas du code incorrect, comme dans Postal : Brain Damaged, Snowrunner.
Le code généré est plus compact que le simple code SPIR-V converti, ce qui réduit considérablement l'espace mémoire occupé par DXVK. Dans des jeux comme Overwatch ou God of War, cela permet d'économiser environ 1 Go de mémoire système.
La compilation des shaders a maintenant complètement été transférée aux threads de travail, ce qui peut réduire le temps de démarrage dans des jeux comme Days Gone et Final Fantasy XIV, ou dans certains cas, diminuer les blocages. Auparavant, DXVK effectuait la traduction SPIR-V dans le thread de l'application et ne compilait que de vrais pipelines Vulkan dans des processus de travail.
La représentation intermédiaire des shaders compilés par DXVK est maintenant mise en cache sur le disque dans le répertoire AppData/Local du préfixe Wine actuel. Cela est nécessaire car le temps de compilation a augmenté par rapport à l'ancien compilateur. Le chemin du cache peut être modifié via la variable d'environnement DXVK_SHADER_CACHE_PATH.
La nouvelle extension Vulkan VK_EXT_descriptor_heap est maintenant utilisée par défaut dans les pilotes qui la prennent en charge.
Il est attendu qu'en comparaison avec l'ancienne mise en œuvre du modèle de liaison, basée sur VK_EXT_descriptor_buffer, ce nouveau modèle offrira un niveau de performance similaire lié au CPU tout en évitant la rétrogradation de performance sur les GPU Nvidia (requiert nvidia-drivers-595.84 et plus récent).
Modifications D3D9
Pour émuler un ancien pipeline à fonctionnalités fixes permettant aux jeux D3D8 et D3D9 de rendre sans shaders, DXVK générait auparavant son propre code de shaders à la volée en fonction de l'état du pipeline. Dans certains jeux, comme Unreal Tournament 2004, cela pouvait entraîner des ralentissements notables même après de longues périodes de jeu.
Pour remédier à cela, DXVK implémente désormais un pipeline à fonctionnalités fixes sous la forme d'une paire d'ubershaders, dont les variantes optimisées sont compilées en arrière-plan.
Optimisation du chargement des buffers
Pour correspondre plus précisément au comportement de Windows, différents types de buffers qui étaient auparavant placés directement dans la VRAM sont maintenant chargés à la demande, et une stratégie de limitation de la mémoire vive a également été mise en œuvre pour corriger les plantages liés à l'espace d'adressage dans plusieurs jeux D3D9 32 bits.
Ces changements peuvent également améliorer les performances sur les systèmes sans taille BAR variable dans des jeux comme GTA IV.
Dans les systèmes qui prennent suffisamment en charge VK_EXT_sample_locations et VK_EXT_extended_dynamic_state3, l'état de rendu D3DRS_MULTISAMPLEANTIALIAS fonctionne désormais correctement, permettant aux applications d'utiliser la rasterisation avec un échantillon lors du rendu dans des cibles de rendu multisample. Cela résout les problèmes de dessin de l'interface utilisateur dans Anno 1701, Men of War Assault Squad et d'autres problèmes similaires dans d'autres jeux avec MSAA activés.
Les ressources communes fonctionnent désormais avec l'implémentation originale de Wine et ne nécessitent plus de correctifs spécifiques à Proton.
Il convient également de mentionner de nombreux correctifs pour différents jeux qui fonctionneront désormais mieux.
Source : linux.org.ru
