Das Wine-Projekt hat die Version vkd3d 1.7 veröffentlicht, die eine Implementierung von Direct3D 12 bietet, die über eine Übersetzung von Aufrufen in die Vulkan-Grafik-API funktioniert. Das Paket umfasst die libvkd3d-Bibliotheken mit der Implementierung von Direct3D 12, libvkd3d-shader mit einem Übersetzer für Shader der Modelle 4 und 5 sowie libvkd3d-utils mit Funktionen, um das Portieren von Direct3D 12-Anwendungen zu erleichtern. Zudem enthält es eine Reihe von Beispielen, einschließlich des Ports von glxgears auf Direct3D 12. Der Code des Projekts wird unter der LGPLv2.1-Lizenz verbreitet.
Die libvkd3d-Bibliothek unterstützt einen Großteil der Funktionen von Direct3D 12, einschließlich Grafik- und Rechenmittel, Warteschlangen und Befehlslisten, Beschreibungen und Heap-Deskriptoren, Root-Signaturen, ungeordneter Zugriff, Sampler, Befehls-Signaturen, Root-Konstanten, indirektes Rendering, Clear*()- und Copy*()-Methoden. In libvkd3d-shader wird die Übersetzung von Shader-Modellen 4 und 5 Bytecode in das Zwischenformat SPIR-V realisiert. Es werden Vertex-, Pixel-, Tessellations-, Compute- und einfache geometrische Shader unterstützt, sowie die Serialisierung und Deserialisierung von Root-Signaturen. Aus den Shader-Anweisungen sind arithmetische, atomare und bitweise Operationen, Vergleichsoperatoren und Datenflusssteuerungsanweisungen, Sample-, Gather- und Load-Anweisungen sowie Operationen für ungeordneten Zugriff (UAV, Unordered Access View) implementiert.
In der neuen Version:
- Die Arbeiten zur Verbesserung des HLSL (High-Level Shader Language) Shader-Compilers wurden fortgesetzt:
- Die Möglichkeit, benutzerdefinierte Funktionen aufzurufen und Arrays als Parameter für benutzerdefinierte Funktionen zu verwenden, wurde hinzugefügt.
- Die Unterstützung für die Parameter SV_DispatchThreadID, SV_GroupID und SV_GroupThreadID wurde hinzugefügt.
- Neu hinzugefügte integrierte Funktionen: all(), distance(), exp(), exp2(), frac(), lit(), reflect(), sin(), cos(), smoothstep(), sqrt(), rsqrt(), step(), transpose().
- Erste Unterstützung für Typen mit geringer Genauigkeit wie «min16float» wurde hinzugefügt.
- Die Unterstützung für die Shader-Modellprofile Direct3D 1/2/3 wurde erheblich verbessert.
- Eine öffentliche API zum Parsen (vkd3d_shader_parse_dxbc) und zur Serialisierung (vkd3d_shader_serialize_dxbc) von DXBC-Binärdaten wurde hinzugefügt.
Quelle: opennet.ru
