Projet Wine version du paquet avec la mise en œuvre de Direct3D 12, fonctionnant par la traduction des appels vers l'API graphique Vulkan. Le paquet comprend des bibliothèques libvkd3d avec des implémentations de Direct3D 12, libvkd3d-shader avec le 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 de démonstrations, y compris le port de glxgears vers Direct3D 12. Le code du projet sous licence LGPLv2.1.
Bibliothèque libvkd3d 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 mémoire, les signatures racines, l'accès non ordonné, les échantillonneurs, les signatures de commandes, 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 plus significatifs dans Vkd3d 1.2, on note :
- La disponibilité de la bibliothèque libvkd3d-shader pour une utilisation dans des projets tiers.
- Prise en charge des shaders de tesselation.
- Prise en charge de la conversion, la sérialisation et la désérialisation des signatures racines (vkd3d_serialize_versioned_root_signature() et vkd3d_create_versioned_root_signature_deserializer()).
- Prise en charge du streaming de données.
- Implémentation de nombreuses fonctionnalités auparavant indisponibles dans Direct3D 12, y compris la prise en charge du multisampling, la réservation de ressources,
le rendu avec indexation indirecte, le rendu de profondeur sans shaders de pixels, l'accès simultané aux ressources à partir de différentes files d'attente de commandes, les vues nulles (Null-views). - Ajout de variables d'environnement : VKD3D_CONFIG pour définir des options pour modifier le comportement de la libvkd3d et VKD3D_VULKAN_DEVICE pour redéfinir l'appareil pour l'API Vulkan.
- Ajout de la prise en charge des instructions de shader bufinfo,
eval_centroid,
eval_sample_index,
ld2ms,
sample_b,
sample_d,
sample_info,
samplepos.
Source : opennet.ru
