Das Wine-Projekt hat die Version vkd3d 1.4 veröffentlicht, die eine Umsetzung von Direct3D 12 bietet, die über die Übersetzung von Aufrufen in die Grafik-API Vulkan funktioniert. Das Paket enthält die Bibliotheken libvkd3d mit der Implementierung von Direct3D 12, libvkd3d-shader mit einem Übersetzer für Shader-Modell 4 und 5 sowie libvkd3d-utils mit Funktionen zur Erleichterung des Portierens von Direct3D 12-Anwendungen. Darüber hinaus gibt es eine Reihe von Demobeispielen, einschließlich des Ports von glxgears auf Direct3D 12. Der Code des Projekts wird unter der LGPLv2.1-Lizenz veröffentlicht.
Die Bibliothek libvkd3d unterstützt die meisten Funktionen von Direct3D 12, einschließlich Grafik- und Berechnungsfunktionen, Warteschlangen und Befehlslisten, Deskriptoren und Deskriptor-Pools, Root-Signaturen, ungeordnenten Zugriff, Sampler, Befehls-Signaturen, Root-Konstanten, indirektes Rendering sowie die Methoden Clear*() und Copy*().
Im libvkd3d-shader wurde die Übersetzung von Bytecode der Shader-Modelle 4 und 5 in die intermediate repräsentation SPIR-V implementiert. Unterstützt werden Vertex-, Pixel-, Tessellations-, Compute- und einfache Geometrie-Shader, sowie die Serialisierung und Deserialisierung der Root-Signatur. Von den Shader-Anweisungen werden arithmetische, atomare und bitweise Operationen, Vergleichsoperatoren und Steueranweisungen, sowie die Befehle sample, gather und load umgesetzt, ebenso wie Operationen für unordentlichen Zugriff (UAV, Unordered Access View).
In der neuen Version:
- Zahlreiche Verbesserungen wurden am HLSL (High-Level Shader Language) Shader-Compiler vorgenommen, der seit DirectX 9.0 bereitgestellt wird.
- Eine neue Implementierung von Deskriptorheaps (Descriptor Heap) wurde vorgeschlagen, die die Vulkan-Erweiterung VK_EXT_descriptor_indexing verwendet.
- Eine neue Implementierung von Grenzen (fence) wurde hinzugefügt, die auf der Vulkan-Erweiterung K_KHR_timeline_semaphore basiert.
Quelle: opennet.ru
