Projekt Wine opublikował wydanie pakietu vkd3d 1.13 z implementacją Direct3D 12, działającą za pomocą translacji wywołań w graficznym API Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z realizacją Direct3D 12, libvkd3d-shader z translatrorem wersji 4 i 5 shaderów 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 wspiera większość funkcji Direct3D 12, w tym narzędzia do grafiki i obliczeń, kolejek i list poleceń, deskryptorów oraz deskryptorów puli, korzeniowe sygnatury, dostęp nieuporządkowany, samplery, sygnatury poleceń, korzeniowe stałe, niebezpośrednie renderowanie oraz metody Clear*() i Copy*(). W libvkd3d-shader zrealizowano translację bajtkodu shaderów do pośredniego reprezentacji SPIR-V. Obsługiwane są shadery wierzchołków, pikseli, tesselacyjne, obliczeniowe oraz proste shadery geometryczne, serializacja i deserializacja korzeniowej sygnatury. Z instrukcji shaderów zaimplementowano operacje arytmetyczne, atomowe i bitowe, operatory porównań oraz sterowania przepływem danych, instrukcje sample, gather i load, operacje dostępu nieuporządkowanego (UAV, Unordered Access View).
W nowej wersji:
- W kompilatorze HLSL dodano wsparcie dla rozwijania pętli (loop unrolling, optymalizacja polegająca na tym, że dla bardziej efektywnego wykorzystania pamięci cache procesora i zmniejszenia rozgałęzień, operacje cykliczne są zastępowane kilkoma następującymi po sobie kopiami kodu).
- Dodano wsparcie dla kompilatora efektów dla niektórych obiektów stanu czwartej wersji shaderów.
- Zapewniono wsparcie dla typów czwartej wersji shaderów BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState oraz RasterizerState, a także funkcji OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() i SetRasterizerState().
- W kompilatorze shaderów zaimplementowano wsparcie dla analizy i przechowywania wartości inicjalizacji w różnych formatach dla zmiennych globalnych, parametrów funkcji oraz adnotacji.
- Dodano wsparcie dla przestrzeni rejestrów modelu shaderów 5.1.
- Zrealizowano wbudowane funkcje tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() i texCUBEgrad().
- W libvkd3d dodano interfejs ID3D12CommandList6 i zrealizowano możliwość tworzenia tekstur, których kompresja odbywa się na poziomie pojedynczych bloków (na przykład bloki o rozmiarze 4×4 piksele są kompresowane osobno).
- Dodano wsparcie dla struktury vkd3d_shader_parameter_info oraz parametrów VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION i VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Źródło: opennet.ru
