Le projet Wine a publié la version du paquet vkd3d 1.14 avec une implémentation de Direct3D 12, fonctionnant via la traduction des appels vers l'API graphique Vulkan. Le paquet comprend les bibliothèques libvkd3d avec l'implémentation de Direct3D 12, libvkd3d-shader avec un traducteur pour les modèles de shaders 4 et 5, et libvkd3d-utils avec des fonctions pour simplifier le portage des applications Direct3D 12, ainsi qu'un ensemble d'exemples de démonstration, y compris le port de glxgears sur 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 le calcul, les files d'attente et les listes de commandes, les descripteurs et les descripteurs d'allocations, les signatures racines, un accès désordonné, des échantillonneurs, les signatures de commandes, des constantes racines, le rendu indirect, les méthodes Clear*() et Copy*(). Dans libvkd3d-shader, la traduction du bytecode des modèles de shaders en représentation intermédiaire SPIR-V est mise en œuvre. Les shaders de vertex, pixel, tessellation, calcul, et simples géométriques sont pris en charge, ainsi que la sérialisation et la désérialisation de la signature racine. Parmi les instructions de shaders, des opérations arithmétiques, atomiques et logiques, des opérateurs de comparaison et de contrôle aléatoire des flux de données, les instructions sample, gather et load, ainsi que les opérations d'accès désordonné (UAV, Unordered Access View) sont mises en œuvre.
Dans la nouvelle version :
- Ajout du support initial du langage de shaders MSL (Metal Shading Language) utilisé par Apple dans l'API graphique Metal.
- Support du désassembleur pour les effets binaires implémenté.
- Dans la bibliothèque libvkd3, la méthode ID3D12GraphicsCommandList1 OMSetDepthBounds() a été implémentée pour modifier dynamiquement le champ des valeurs de profondeur autorisées dans le Z-buffer.
- Ajout de la variable d'environnement VKD3D_CAPS_OVERRIDE pour remplacer les informations sur les capacités disponibles fournies aux applications, telles que les niveaux de fonctionnalité maximum pris en charge et les liaisons de ressources.
- L'implémentation du langage de shaders HLSL a été enrichie d'un support initial pour les shaders de tessellation. Les fonctions intégrées dst(), f32tof16(), mad(), modf() et sincos() ont été implémentées. Le support de l'opération « discard » a été ajouté pour les profils 1, 2 et 3 des modèles de shaders. Le support de la sémantique des données d'entrée SV_SampleIndex pour les shaders fragmentaires et SV_GroupIndex pour les shaders de calcul a été ajouté.
- Un grand nombre de nouvelles instructions pour le langage de shaders GLSL a été réalisé.
Source : opennet.ru
