Po roku i pół prac projekt Wine opublikował wersję pakietu vkd3d 1.3 z implementacją Direct3D 12, działającą poprzez translację wywołań do API graficznego Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z implementacją Direct3D 12, libvkd3d-shader z translatorem shaderów wersji 4 i 5 oraz libvkd3d-utils z funkcjami ułatwiającymi portowanie aplikacji Direct3D 12, a także zestaw przykładowych demon-stracji, w tym port glxgears na Direct3D 12. Kod projektu jest udostępniany na licencji LGPLv2.1.
Biblioteka libvkd3d obsługuje większość funkcji Direct3D 12, w tym źródła do grafiki i obliczeń, kolejki i listy poleceń, deskryptory oraz deskryptory kopii, root signature, dostęp nieuporządkowany, Samplery, sygnatury poleceń, root constants, pośrednie (indirect) renderowanie, metody Clear*() i Copy*().
W libvkd3d-shader zaimplementowano tłumaczenie bajtkodu modeli shaderów 4 i 5 na pośrednią reprezentację SPIR-V. Obsługiwane są shadery wierzchołkowe, pikselowe, tesselacyjne, obliczeniowe oraz proste shadery geometryczne, serializacja i deserializacja głównego podpisu. Spośród instrukcji shaderowych zaimplementowano operacje arytmetyczne, atomowe i bitowe, operatory porównania oraz zarządzania przepływem danych, instrukcje sample, gather oraz load, operacje dostępu nieuporządkowanego (UAV, Unordered Access View).
Wśród najbardziej znaczących nowości w Vkd3d 1.3 wyróżniają się:
- Dodano wczesne wsparcie dla kompilacji i preprocessingu shaderów w języku HLSL (High-Level Shader Language), dostępnego od DirectX 9.0.
- Dodano wsparcie dla tablic deskryptorów, zdefiniowanych w modelu shaderów 5.1.
- Zapewniono wsparcie dla operacji z podwójną precyzją w shaderach, pośredniego adresowania dla shaderów tesselacyjnych, eksportowania stencils z shaderów, modyfikatora shaderów „precise” oraz globalnych barier dla zasobów w pamięci.
- Zrealizowano możliwość disassembliwania shaderów Direct3D z bytecode do formatu asemblerowego.
- Dodano wsparcie dla analizy starego formatu bytecode Direct3D, wykorzystywanego w modelach shaderów Direct3D 1, 2 i 3.
- W libvkd3d dodano takie możliwości Direct3D 12, jak root signatures, liczniki oglądania z dostępem nieuporządkowanym, logiczne operatory łączenia dla wyjścia, tryb adresowania tekstur mirror_once. Dodano strukturę vkd3d_host_time_domain_info.
Źródło: opennet.ru
