Nach anderthalb Jahren Entwicklung hat das Projekt Wine die Version vkd3d 1.3 veröffentlicht, die Direct3D 12 implementiert und über die Transkription von Aufrufen an die Grafik-API Vulkan funktioniert. Das Paket enthält die Bibliotheken libvkd3d mit der Implementierung von Direct3D 12, libvkd3d-shader mit einem Transpiler für Shader der Modelle 4 und 5 sowie libvkd3d-utils mit Funktionen zur Vereinfachung der Portierung von Direct3D 12-Anwendungen, sowie eine Sammlung von Demobeispielen, einschließlich des Ports glxgears auf Direct3D 12. Der Code des Projekts wird unter der Lizenz LGPLv2.1 veröffentlicht.
Die Bibliothek libvkd3d unterstützt den Großteil der Funktionen von Direct3D 12, einschließlich Grafik- und Berechnungswerkzeugen, Warteschlangen und Befehlslisten, Deskriptoren und Deskriptordateien, Root-Signaturen, ungeordnetem Zugriff, Samplern, Befehls-Signaturen, Root-Konstanten, indirekter Darstellung, Methoden wie Clear*() und Copy*().
In libvkd3d-shader wurde die Übersetzung von Bytecode der Shader-Modelle 4 und 5 in ein Zwischenergebnis vom Typ SPIR-V implementiert. Unterstützt werden Vertex-, Pixel-, Tessellation-, Compute- und einfache geometrische Shader, sowie die Serialisierung und Deserialisierung von Root-Signaturen. Aus den Shader-Anweisungen wurden arithmetische, atomare und bitweise Operationen, Vergleichsoperatoren und Steueranweisungen implementiert, Anweisungen wie sample, gather und load, sowie Operationen des ungeordneten Zugriffs (UAV, Unordered Access View).
Zu den auffälligsten Neuerungen in Vkd3d 1.3 gehören:
- Es wurde eine erste Unterstützung für die Kompilierung und Vorverarbeitung von Shadern in der HLSL (High-Level Shader Language), die seit DirectX 9.0 bereitgestellt wird, hinzugefügt.
- Unterstützung für Deskriptormengen, die in den Shader-Modellen 5.1 definiert sind, wurde hinzugefügt.
- Unterstützung für doppelt genauen Fließkommazahlen in Shadern, indirekte Adressierung für tessellierende Shader, den Export von Masken aus Shadern, den Modifier "precise" für Shader sowie globale Barrieren für Ressourcen im Speicher wurde bereitgestellt.
- Die Möglichkeit, Direct3D-Shader aus Bytecode in eine Assemblersprache zu disassemblieren, wurde implementiert.
- Die Unterstützung für das Parsen des alten Bytecode-Formats von Direct3D, das in den Shader-Modellen 1, 2 und 3 verwendet wird, wurde hinzugefügt.
- In libvkd3d wurden Funktionen von Direct3D 12 hinzugefügt, wie z. B. Root-Signaturen, View-Zähler mit ungeordnetem Zugriff, logische Merging-Operatoren für Ausgaben und der Texturadressierungsmodus mirror_once. Es wurde die Struktur vkd3d_host_time_domain_info hinzugefügt.
Quelle: opennet.ru
