Projekt Wine Release des Pakets mit der Implementierung von Direct3D 12, das durch die Übersetzung von Aufrufen in die Grafik-API Vulkan funktioniert. Das Paket umfasst die Bibliotheken libvkd3d mit der Implementierung von Direct3D 12, libvkd3d-shader mit dem Übersetzer für Shader der Modelle 4 und 5 sowie libvkd3d-utils mit Funktionen zur Vereinfachung der Portierung von Direct3D 12-Anwendungen, sowie ein Set von Demobeispielen, einschließlich des Ports von glxgears auf Direct3D 12. Der Code des Projekts unter LGPLv2.1 lizenziert.
Die Bibliothek libvkd3d deckt die meisten Möglichkeiten von Direct3D 12 ab, einschließlich Grafik- und Berechnungswerkzeuge, Warteschlangen und Befehlslisten, Deskriptoren und Heap-Deskriptoren, Root-Signaturen, ungeordneter Zugriff, Sampler, Befehls-Signaturen, Root-Konstanten, indirekte Rendering-Methoden, Clear*()- und Copy*()-Methoden.
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 bedeutendsten Merkmalen von Vkd3d 1.2 gehören:
- Die Bereitschaft der Bibliothek libvkd3d-shader zur Verwendung in Drittanbieterprojekten.
- Unterstützung für Tessellations-Shader.
- Unterstützung für die Umwandlung, Serialisierung und Deserialisierung von Root-Signaturen (vkd3d_serialize_versioned_root_signature() und vkd3d_create_versioned_root_signature_deserializer()).
- Unterstützung für Streaming-Ausgaben.
- Implementierung vieler zuvor nicht verfügbarer Funktionen von Direct3D 12, einschließlich Unterstützung für Multisampling, Ressourcenreservierung,
indirektes indiziertes Rendering, Tiefenscanning ohne Pixel-Shader, gleichzeitigen Zugriff auf Ressourcen aus verschiedenen Befehlswarteschlangen und Nullansichten (Null-views). - Umgebungsvariablen hinzugefügt: VKD3D_CONFIG zur Festlegung von Optionen zur Änderung des Verhaltens von libvkd3d und VKD3D_VULKAN_DEVICE zur Überschreibung des Geräts für die Vulkan-API.
- Unterstützung von Shader-Anweisungen bufinfo,
eval_centroid,
eval_sample_index,
ld2ms,
sample_b,
sample_d,
sample_info,
samplepos.
Quelle: opennet.ru
