Das Wine-Projekt hat die Version vkd3d 1.7 veröffentlicht, die Direct3D 12 implementiert, welches durch die Übersetzung von Aufrufen in die Vulkan-Grafik-API funktioniert. Das Paket enthält die Bibliotheken libvkd3d mit Direct3D 12-Implementierungen, libvkd3d-shader mit einem Übersetzer für Shader der Modelle 4 und 5 sowie libvkd3d-utils mit Funktionen zur Vereinfachung des Portierens von Direct3D 12-Anwendungen, einschließlich einer Sammlung von Beispielen, die gxlgears auf Direct3D 12 portiert. Der Quellcode des Projekts wird unter der LGPLv2.1-Lizenz vertrieben.
Die Bibliothek libvkd3d unterstützt die meisten Funktionen von Direct3D 12, einschließlich Grafik- und Compute-Funktionen, Warteschlangen und Befehlslisten, Deskriptoren und Heap-Deskriptoren, Wurzel-Signaturen, ungeordneten Zugriff, Sampler, Befehls-Signaturen, Wurzel-Konstanten, indirekte Zeichnungen, Clear*()-Methoden und Copy*(). In libvkd3d-shader wurde die Übersetzung von Bytecode der Shader-Modellversionen 4 und 5 in das Intermediate-Format SPIR-V implementiert. Unterstützt werden Vertex-, Pixel-, Tessellations-, Compute- und einfache geometrische Shader, Serialisierung und Deserialisierung von Wurzel-Signaturen. Implementiert sind die arithmetischen, atomaren und Bitoperationen, Vergleichsoperatoren und Steueranweisungen, sowie die Anweisungen sample, gather und load, und Operationen mit ungeordnetem Zugriff (UAV, Unordered Access View).
In der neuen Version:
- Die Arbeiten zur Verbesserung des HLSL (High-Level Shader Language) Shader-Compilers wurden fortgesetzt:
- Die Möglichkeit zur Verwendung von benutzerdefinierten Funktionen und Arrays als Parameter für benutzerdefinierte Funktionen wurde hinzugefügt.
- Unterstützung für die Parameter SV_DispatchThreadID, SV_GroupID und SV_GroupThreadID wurde hinzugefügt.
- Integrierte Funktionen wie all(), distance(), exp(), exp2(), frac(), lit(), reflect(), sin(), cos(), smoothstep(), sqrt(), rsqrt(), step() und transpose() wurden hinzugefügt.
- Erste Unterstützung für Typen mit niedriger Fließkommapräzision, wie 'min16float', wurde hinzugefügt.
- Die Unterstützung für Direct3D Shader Model 1/2/3 Profile wurde erheblich verbessert.
- Eine öffentliche API zur Analyse (vkd3d_shader_parse_dxbc) und Serialisierung (vkd3d_shader_serialize_dxbc) von DXBC-Binärdaten wurde hinzugefügt.
Quelle: opennet.ru
