Projekt Wine opublikował wersję pakietu vkd3d 1.5, której celem jest implementacja Direct3D 12 działającej poprzez translację wywołań do graficznego API Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z implementacją Direct3D 12, libvkd3d-shader z translatorem shaderów modelu 4 i 5 oraz libvkd3d-utils z funkcjami upraszczającymi portowanie aplikacji Direct3D 12, a także zbiór 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 stosu, sygnatury główne, nieuporządkowany dostęp, próbki, sygnatury poleceń, stałe główne, niebezpośrednie renderowanie oraz metody Clear*() i Copy*().
W libvkd3d-shader zaimplementowano translację bajtkodu modeli shaderów 4 i 5 do pośredniej reprezentacji SPIR-V. Obsługiwane są shadery wierzchołkowe, pikselowe, tesselacyjne, obliczeniowe i podstawowe shadery geometryczne, a także serializacja i deserializacja sygnatury głównej. Z instrukcji shaderów zaimplementowano operacje arytmetyczne, atomowe i bitowe, operatory porównania oraz zarządzania przepływem danych, instrukcje sample, gather i load, oraz operacje nieuporządkowanego dostępu (UAV, Unordered Access View).
W nowej wersji:
- Wprowadzono liczne ulepszenia w kompilatorze shaderów w języku HLSL (High-Level Shader Language), dostarczanym od wersji DirectX 9.0. W tym w strukturach i tablicach poprawiono obsługę typów obiektowych HLSL, takich jak Texture2D, dodano wsparcie dla funkcji wbudowanych dot(), ldexp() i lerp(), a także dla modeli shaderów 4 i 5 dodano wsparcie dla operatorów logicznych „and”, „or” i „not”, oraz możliwość konwersji typów boolowskich.
- Zrealizowano opcję VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV do ładowania nieuporządkowanego widoku dostępu (UAV) dla wieloskładowych formatów SPIR-V (DXGI_FORMAT).
Źródło: opennet.ru
