Das Wine-Projekt hat die Version vkd3d 1.16 veröffentlicht, die Direct3D 12 implementiert und über die Übersetzung von Aufrufen in die Vulkan-Grafik-API arbeitet. Im Paket enthalten sind die Bibliotheken libvkd3d mit der Implementierung von Direct3D 12, libvkd3d-shader mit einem Übersetzer für Shader-Modelle 4 und 5 sowie libvkd3d-utils mit Funktionen zur Erleichterung des Portierens von Direct3D 12-Anwendungen, sowie eine Reihe von Demonstrationsbeispielen, einschließlich des Ports von glxgears zu Direct3D 12. Der Code des Projekts wird unter der Lizenz LGPLv2.1 verbreitet.
Die Bibliothek libvkd3d unterstützt einen Großteil der Funktionen von Direct3D 12, einschließlich Grafik- und Berechnungsmittel, Warteschlangen und Befehlslisten, Deskriptoren und Deskriptortabellen, Wurzel-Signaturen, ungeordneten Zugriff, Sampler, Befehls-Signaturen, Wurzel-Konstanten, indirektes Rendering, sowie die Methoden Clear*() und Copy(). In libvkd3d-shader wurde die Übersetzung von Bytecode der Shader-Modelle in die Intermediate Representation SPIR-V implementiert. Es werden Vertex-, Pixel-, Tessellierungs-, Compute- und einfache Geometrie-Shader unterstützt, sowie die Serialisierung und Deserialisierung der Wurzel-Signatur. Zu den Shader-Instruktionen gehören arithmetische, atomare und bitweise Operationen, Vergleichsoperatoren und Kontrollströme, sowie die Instruktionen sample, gather und load und die Operationen des ungeordneten Zugriffs (UAV, Unordered Access View).
In der neuen Version:
- Die Unterstützung für DXIL-Shader (DirectX Intermediate Language) wurde stabilisiert und ist standardmäßig aktiviert.
- Der Compiler für die Shader-Sprache HLSL hat eine Anfangsunterstützung für Geometri shader erhalten. Für Shader-Modelle 1, 2 und 3 wurde die Unterstützung für indirekte Adressierung, Module und Wertbeschränkungen implementiert.
- In der Bibliothek libvkd3d wird Unterstützung für das Shader-Modell 6.0 deklariert. Im Interface ID3D12Device1 wurde die Methode SetEventOnMultipleFenceCompletion() implementiert. Unterstützung für die Vulkan-Erweiterung VK_KHR_zero_initialize_workgroup_memory zur Nullinitialisierung von Speicher für Shader wurde hinzugefügt. Die Vulkan-Erweiterung VK_KHR_maintenance2, die in der Vulkan-Spezifikation 1.1 vorgeschlagen wurde, ist nun verpflichtend.
- Die Unterstützung für die Disassemblierung von SPIR-V-Shadern und binären Effekten 'fx_2_0' wurde hinzugefügt.
- Die experimentelle Unterstützung für die indirekte Adressierung von konstanten Puffern in GLSL (OpenGL Shading Language) wurde hinzugefügt.
- Die Implementierung der Shader-Sprache MSL (Metal Shading Language), die von Apple in der Grafik-API Metal verwendet wird, hat die Möglichkeit zur Texturladung hinzugefügt.
- Die Unterstützung für die eingebauten HLSL-Funktionen: AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() und GroupMemoryBarrierWithGroupSync() wurde hinzugefügt.
- Die Flags VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY, VKD3D_SHADER_COMPONENT_INT64, VKD3D_SHADER_COMPONENT_FLOAT16, VKD3D_SHADER_COMPONENT_UINT16, VKD3D_SHADER_COMPONENT_INT16, VKD3D_SHADER_RESOURCE_DATA_NONE und VKD3D_SHADER_RESOURCE_DATA_UINT wurden implementiert.
Quelle: opennet.ru
