Das Wine-Projekt hat die Version 1.14 des Pakets vkd3d veröffentlicht, die die Implementierung von Direct3D 12 über die Übersetzung von Aufrufen in die Grafik-API Vulkan umfasst. Das Paket enthält die libvkd3d-Bibliotheken mit der Umsetzung von Direct3D 12, die libvkd3d-shader mit einem Übersetzer für Shader-Modelle der Version 4 und 5 sowie die libvkd3d-utils mit Funktionen zur Vereinfachung der Portierung von Direct3D 12-Anwendungen, sowie eine Sammlung 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 Rechenressourcen, Warteschlangen und Befehlslisten, Deskriptoren und Speicher-Deskriptoren, Root-Signaturen, ungeordneter Zugriff, Sampler, Befehls-Signaturen, Root-Konstanten, indirekte Renderings, Clear*()-Methoden und Copy*(). In libvkd3d-shader ist die Übersetzung von Bytecode der Shader-Modelle in das Intermediate Representation SPIR-V implementiert. Unterstützt werden Vertex-, Pixel-, Tessellation-, Compute- und einfache geometrische Shader, sowie die Serialisierung und Deserialisierung von Root-Signaturen. Unter den Shader-Anweisungen sind arithmetische, atomare und bitweise Operationen, Vergleichsoperatoren und Anweisungen zur Steuerung des Datenflusses, die Anweisungen sample, gather und load, sowie Operationen für ungeordneten Zugriff (UAV, Unordered Access View) implementiert.
In der neuen Version:
- Die erste Unterstützung für die Programmiersprache MSL (Metal Shading Language), die von Apple in der Grafik-API Metal verwendet wird, wurde hinzugefügt.
- Die Unterstützung für einen Disassembler für binäre Effekte wurde implementiert.
- In der Bibliothek libvkd3 wurde im Interface ID3D12GraphicsCommandList1 die Methode OMSetDepthBounds() implementiert, um den zulässigen Bereich von Z-Werten im Z-Puffer dynamisch zu ändern.
- Die Umgebungsvariable VKD3D_CAPS_OVERRIDE wurde hinzugefügt, um die Informationen über verfügbare Funktionen, wie die maximal unterstützten Funktionalitätsstufen und Ressourcenbindungen, die an Anwendungen ausgegeben werden, zu überschreiben.
- Die Implementierung der HLSL-Shader-Sprache hat erste Unterstützung für tessellierende Shader erhalten. Eingebaute Funktionen wie dst(), f32tof16(), mad(), modf() und sincos() wurden umgesetzt. Für Shader-Modelle der Profile 1, 2 und 3 wurde die Unterstützung für die "discard"-Operation hinzugefügt. Die Unterstützung für die Semantik der Eingabedaten SV_SampleIndex für Fragment-Shader und SV_GroupIndex für Compute-Shader wurde ebenfalls hinzugefügt.
- Eine Vielzahl neuer Anweisungen für die GLSL-Shader-Sprache wurde implementiert.
Quelle: opennet.ru
