Après une année et demie de développement, le projet Wine a publié la version du paquet vkd3d 1.3 avec une implémentation de Direct3D 12, fonctionnant via la traduction des appels dans l'API graphique Vulkan. Le paquet comprend des bibliothèques libvkd3d avec des implémentations de Direct3D 12, libvkd3d-shader avec le traducteur de modèles de shaders 4 et 5, et libvkd3d-utils avec des fonctions pour faciliter le portage des applications Direct3D 12, ainsi qu'un ensemble d'exemples de démonstration, y compris le port de glxgears vers Direct3D 12. Le code du projet est distribué sous la licence LGPLv2.1.
La bibliothèque libvkd3d prend en charge la majorité des fonctionnalités de Direct3D 12, y compris les outils pour la graphique et les calculs, les files d'attente et les listes de commandes, les descripteurs et les descripteurs de tas, les signatures racines, l'accès non ordonné, les échantillonneurs, les signatures de commande, les constantes racines, le rendu indirect, les méthodes Clear*() et Copy*().
Dans libvkd3d-shader, la traduction du bytecode des modèles de shaders 4 et 5 en représentation intermédiaire SPIR-V est mise en œuvre. Les shaders de vertex, de pixel, de tessellation, de calcul et de géométrie basique sont pris en charge, ainsi que la sérialisation et la désérialisation des signatures racines. Parmi les instructions de shaders, des opérations arithmétiques, atomiques et bit à bit, des opérateurs de comparaison et de contrôle du flux de données, des instructions sample, gather et load, ainsi que des opérations d'accès non ordonné (UAV, Unordered Access View) sont mises en œuvre.
Parmi les innovations les plus significatives dans Vkd3d 1.3, on note :
- Ajout d'un support initial pour la compilation et le prétraitement des shaders en HLSL (High-Level Shader Language), fourni depuis DirectX 9.0.
- Ajout du support pour les tableaux de descripteurs définis dans le modèle de shaders 5.1.
- Prise en charge des opérations avec des nombres à virgule flottante double précision dans les shaders, d'adressage indirect pour les shaders de tessellation, d'exportation de masques depuis les shaders, du modificateur de shaders « precise » et de barrières globales pour les ressources en mémoire.
- Mise en œuvre de la possibilité de désassembler des shaders Direct3D depuis le bytecode vers la représentation assembleur.
- Ajout de la prise en charge de l'analyse de l'ancien format de bytecode Direct3D utilisé dans les modèles de shaders Direct3D 1, 2 et 3.
- Dans libvkd3d, des fonctionnalités telles que les signatures racines, les compteurs de visualisation à accès non ordonné, les opérateurs logiques de fusion pour la sortie et le mode d'adressage des textures mirror_once pour Direct3D 12 ont été ajoutés. La structure vkd3d_host_time_domain_info a été ajoutée.
Source : opennet.ru
