Projekt Wine opublikował wersję pakietu vkd3d 1.16 z realizacją Direct3D 12, działającą poprzez tłumaczenie wywołań w interfejsie API Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z realizacją Direct3D 12, libvkd3d-shader z translatorem modeli 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 udostępniany na licencji LGPLv2.1.
Biblioteka libvkd3d obsługuje większość możliwości Direct3D 12, w tym narzędzia do grafiki i obliczeń, kolejki i listy poleceń, deskryptory i deskryptory sterty, sygnały korzenia, dostęp nieuporządkowany, Samplery, sygnały poleceń, stałe korzenia, niezależne renderowanie, metody Clear*() i Copy*(). W libvkd3d-shader zrealizowano translację kodu bajtowego modeli shaderów do pośredniego formatu SPIR-V. Obsługiwane są shadery wierzchołków, pikseli, tesselacyjne, obliczeniowe i proste shadery geometryczne, serializacja i deserializacja sygnału korzenia. Z instrukcji shaderowych zrealizowane zostały operacje arytmetyczne, atomowe i bitowe, operatory porównania i zarządzania przepływem danych, instrukcje sample, gather i load, operacje dostępu nieuporządkowanego (UAV, Unordered Access View).
W nowej wersji:
- Stabilizowane i domyślnie włączone wsparcie dla shaderów DXIL (DirectX Intermediate Language).
- W kompilatorze języka shaderów HLSL dodano wstępną obsługę shaderów geometrii. Dla modeli shaderów 1,2,3 zrealizowano obsługę pośredniego adresowania, modułów oraz ograniczenia wartości.
- W bibliotece libvkd3d zadeklarowano wsparcie dla modelu shaderów 6.0. W interfejsie ID3D12Device1 zaimplementowano metodę SetEventOnMultipleFenceCompletion(). Dodano wsparcie dla rozszerzenia Vulkan VK_KHR_zero_initialize_workgroup_memory do inicjalizacji pamięci zerami dla shaderów. W skład obligatoryjnych wchodzi rozszerzenie Vulkan VK_KHR_maintenance2, zaproponowane w specyfikacji Vulkan 1.1.
- Dodano wsparcie dla dezasemblacji shaderów SPIR-V i binarnych efektów „fx_2_0”.
- Dodano eksperymentalne wsparcie dla pośredniego adresowania stałych buforów w GLSL (OpenGL Shading Language).
- Do realizacji języka shaderów MSL (Metal Shading Language), używanego przez firmę Apple w interfejsie API Metal, dodano możliwość ładowania tekstur.
- Dodano wsparcie dla wbudowanych funkcji HLSL: AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() i GroupMemoryBarrierWithGroupSync().
- Zrealizowano flagi 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 i VKD3D_SHADER_RESOURCE_DATA_UINT.
Źródło: opennet.ru
