Das Wine-Projekt hat die Veröffentlichung des Pakets vkd3d 1.11 mit einer Implementierung von Direct3D 12 veröffentlicht, die über Broadcast-Aufrufe an die Vulkan-Grafik-API funktioniert. Das Paket enthält libvkd3d-Bibliotheken mit Implementierungen von Direct3D 12, libvkd3d-shader mit einem Übersetzer der Shader-Modelle 4 und 5 und libvkd3d-utils mit Funktionen zur Vereinfachung der Portierung von Direct3D 12-Anwendungen sowie eine Reihe von Demobeispielen, einschließlich einer Portierung von glxgears auf Direct3D 12. Der Projektcode wird unter LGPLv2.1 lizenziert verteilt.
Die libvkd3d-Bibliothek unterstützt die meisten Direct3D 12-Funktionen, einschließlich Grafik- und Rechenfunktionen, Warteschlangen und Befehlslisten, Handles und Heap-Handles, Root-Signaturen, Out-of-Order-Zugriff, Sampler, Befehlssignaturen, Root-Konstanten, indirektes Rendering, Clear-Methoden *( ) und Copy*(). In libvkd3d-shader ist die Übersetzung des Bytecodes der Shader-Modelle 4 und 5 in eine SPIR-V-Zwischendarstellung implementiert. Unterstützt Vertex-, Pixel-, Tessellations-, Compute- und einfache Geometrie-Shader sowie Root-Signatur-Serialisierung und -Deserialisierung. Shader-Anweisungen umfassen arithmetische, atomare und Bitoperationen, Vergleichs- und Datenflusskontrolloperatoren, Sample-, Gather- und Load-Anweisungen sowie ungeordnete Zugriffsoperationen (UAV, Unordered Access View).
In der neuen Version:
- Erste Unterstützung für das Kompilieren von Legacy-Direct3D-Bytecode in eine Zwischendarstellung von SPIR-V-Shadern hinzugefügt.
- Dem HLSL-Compiler wurde erste Unterstützung für das Kompilieren von Direct3D-Effektprofilen („fx_2_0“, „fx_4_0“, „fx_4_1“ und „fx_5_0“) hinzugefügt.
- Experimentelle Unterstützung für das Kompilieren von DXIL (DirectX Intermediate Language) in die SPIR-V-Darstellung und Direct3D-Shader-Assembly-Anweisungen hinzugefügt.
- HLSL hat Unterstützung für die Profile „fx_2_0“, „fx_4_0“, „fx_4_1“ und „fx_5_0“ hinzugefügt, integrierte Funktionen acos(), asin(), atan() und atan2() implementiert und Unterstützung für „Buffer“ bereitgestellt ” Ressourcen.
- Es wurde eine Optimierung hinzugefügt, die Handles asynchron aktualisiert, was zu schnelleren Anwendungen führen kann, die bei jedem Frame eine große Anzahl von Handles aktualisieren.
- Die Verwendung der Vulkan-Erweiterungen VK_EXT_mutable_descriptor_type und VK_EXT_shader_viewport_index_layer wird bereitgestellt, um die Effizienz der Arbeit mit dem Deskriptorpool zu verbessern und das Rendern von Vertex- und Tessellation-Shader-Arrays zu beschleunigen.
- Unterstützung für die Programmschnittstellen ID3D12Device7 und ID3D12Resource2 hinzugefügt. Die Methode GetResourceAllocationInfo3() wurde der Schnittstelle ID12D4Device1 hinzugefügt.
- Unterstützung für die Schnittstellen D3DReflect() und D3DDisassemble() hinzugefügt.
- Implementierte Testanfragen D3D12_FEATURE_D3D12_OPTIONS6 D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, FEATURE_D3D12_OPTIONS3, D12D11 3_FEATURE_D12D3_OPTIONS12, D12D3_FEATURE_D12D3_OPTIONS12.
- Neue Assembly-Optionen hinzugefügt: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 und VKD3D_SHADER_SPIRV_EXTENS _INDEX_LAYER.
- Die Funktionen D3D12CreateDeviceVKD3D() und D3D12CreateDevice() verwenden die Vulkan-Erweiterungen VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface und VK_MVK_ios_surface.
Source: opennet.ru
