Projekt Wine opublikował wersję pakietu vkd3d 1.11 z implementacją Direct3D 12, działającą poprzez translację wywołań do graficznego interfejsu API Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z implementacją Direct3D 12, libvkd3d-shader z translatory modelu shaderów 4 i 5 oraz libvkd3d-utils z funkcjami ułatwiającymi portowanie aplikacji Direct3D 12, a także zestaw przykładów demonstracyjnych, w tym port glxgears na Direct3D 12. Kod projektu jest dystrybuowany na licencji LGPLv2.1.
Biblioteka libvkd3d obsługuje większość funkcji Direct3D 12, w tym narzędzia do grafiki i obliczeń, kolejki i listy poleceń, deskryptory i deskryptory sterty, sygnatury korzeni, dostęp nieuporządkowany, Samplery, sygnatury poleceń, stałe korzeniowe, niebezpośrednie rysowanie, metody Clear*() i Copy*(). W libvkd3d-shader zaimplementowano translację kodu bajtowego modeli shaderów w wersji 4 i 5 do pośredniej reprezentacji SPIR-V. Obsługiwane są shadery wierzchołkowe, pikselowe, tesselacyjne, obliczeniowe i proste shadery geometryczne, a także serializacja i deserializacja sygnatury korzeniowej. Z instrukcji shaderowych zaimplementowano operacje arytmetyczne, atomowe i bitowe, operatory porównania oraz sterowania przepływem danych, instrukcje sample, gather i load oraz operacje dostępu nieuporządkowanego (UAV, Unordered Access View).
W nowej wersji:
- Dodano początkowe wsparcie dla kompilacji starego bajtkodu Direct3D do pośredniego reprezentacji shaderów SPIR-V.
- Do kompilatora HLSL dodano początkowe wsparcie dla kompilacji profili efektów Direct3D („fx_2_0”, „fx_4_0”, „fx_4_1” i „fx_5_0”).
- Dodano eksperymentalne wsparcie dla kompilacji pośredniego języka DXIL (DirectX Intermediate Language) do reprezentacji SPIR-V oraz instrukcji asemblerowych shaderów Direct3D.
- W HLSL dodano wsparcie dla profili „fx_2_0”, „fx_4_0”, „fx_4_1” i „fx_5_0”, wprowadzono wbudowane funkcje acos(), asin(), atan() i atan2(), zapewniono wsparcie dla zasobów „Buffer”.
- Dodano optymalizację, która wykonuje aktualizację deskryptorów w trybie asynchronicznym, co może przyspieszyć aplikacje aktualizujące dużą liczbę deskryptorów w każdej klatce.
- Zaimplementowano wykorzystanie rozszerzeń Vulkan VK_EXT_mutable_descriptor_type i VK_EXT_shader_viewport_index_layer dla zwiększenia efektywności pracy z pulą deskryptorów i przyspieszenia renderowania tablic shaderów wierzchołkowych i teselacyjnych.
- Dodano wsparcie dla interfejsów ID3D12Device7 i ID3D12Resource2. Do interfejsu ID3D12Device4 dodano metodę GetResourceAllocationInfo1().
- Dodano wsparcie dla interfejsów D3DReflect() i D3DDisassemble().
- Zaimplementowano zapytania funkcji D3D12_FEATURE_D3D12_OPTIONS6, D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, D3D12_FEATURE_D3D12_OPTIONS11, D3D12_FEATURE_D3D12_OPTIONS12, D3D12_FEATURE_D3D12_OPTIONS13.
- Dodano nowe opcje kompilacji: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 i VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- W funkcjach D3D12CreateDeviceVKD3D() i D3D12CreateDevice() zaangażowano rozszerzenia Vulkan VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface i VK_MVK_ios_surface.
Źródło: opennet.ru
