Le projet Wine a publié la version du paquet vkd3d 1.16 avec l'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 le translateur pour les modèles de shaders 4 et 5, ainsi que libvkd3d-utils avec des fonctions pour faciliter le portage des applications Direct3D 12, en plus d'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 supporte la plupart des fonctionnalités de Direct3D 12, y compris les outils pour les graphismes et le calcul, les files d'attente et les listes de commandes, les descripteurs et les descripteurs de tas, les signatures racines, l'accès désordonné, les Sampler, les signatures de commandes, les constantes racines, le rendu indirect, les méthodes Clear*() et Copy*(). Dans libvkd3d-shader, la translation du bytecode des modèles de shaders en représentation intermédiaire SPIR-V est réalisée. Les shaders de sommet, de pixel, de tessellation, de calcul et de géométrie simple sont supportés, ainsi que la sérialisation et la désérialisation des signatures racines. Parmi les instructions de shader, des opérations arithmétiques, atomiques et bit à bit, des opérateurs de comparaison et de contrôle de flux, des instructions sample, gather et load, ainsi que des opérations d'accès désordonné (UAV, Unordered Access View) ont été implémentées.
Dans la nouvelle version :
- La prise en charge des shaders DXIL (DirectX Intermediate Language) a été stabilisée et est activée par défaut.
- Le compilateur de langage de shaders HLSL a obtenu un support initial pour les shaders géométriques. Pour les modèles de shaders 1, 2, et 3, la prise en charge de l'adressage indirect, des modules et des restrictions de valeurs a été implémentée.
- La bibliothèque libvkd3d annonce le support du modèle de shader 6.0. Dans la l'interface ID3D12Device1, la méthode SetEventOnMultipleFenceCompletion() a été mise en œuvre. Support ajouté pour l'extension Vulkan VK_KHR_zero_initialize_workgroup_memory pour initialiser à zéro la mémoire pour les shaders. L'extension Vulkan VK_KHR_maintenance2 a été rendue obligatoire, comme proposé dans la spécification Vulkan 1.1.
- Ajout du support pour le désassemblage des shaders SPIR-V et des effets binaires « fx_2_0 ».
- Ajout d'un support expérimental pour l'adressage indirect des tampons constants en GLSL (OpenGL Shading Language).
- L'implémentation du langage de shaders MSL (Metal Shading Language), utilisé par Apple dans l'API graphique Metal, a été élargie pour inclure la possibilité de charger des textures.
- Ajout du support pour les fonctions intégrées HLSL : AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() et GroupMemoryBarrierWithGroupSync().
- Les drapeaux VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY, VKD3D_SHADER_COMPONENT_INT64, VKD3D_SHADER_COMPONENT_FLOAT16, VKD3D_SHADER_COMPONENT_UINT16, VKD3D_SHADER_COMPONENT_INT16, VKD3D_SHADER_RESOURCE_DATA_NONE et VKD3D_SHADER_RESOURCE_DATA_UINT ont été implémentés.
Source : opennet.ru
