Projekt Wine wydanie pakietu z implementacją Direct3D 12, działającej poprzez tłumaczenie wywołań do API graficznego Vulkan. Pakiet zawiera biblioteki libvkd3d z implementacją Direct3D 12, libvkd3d-shader z tłumaczem 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 objęty licencją LGPLv2.1.
Biblioteka libvkd3d większość funkcji Direct3D 12, w tym narzędzia do grafiki i obliczeń, kolejki i listy poleceń, deskryptory i deskryptory pamięci, podpisy główne, dostęp nieuporządkowany, Sampler-y, podpisy poleceń, stałe główne, pośrednie rysowanie, metody Clear*() oraz 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).
Do najbardziej znaczących w Vkd3d 1.2 wyróżniają się:
- Gotowość biblioteki libvkd3d-shader do użycia w projektach zewnętrznych.
- Wsparcie dla shaderów tesselacyjnych.
- Wsparcie dla konwersji, serializacji i deserializacji głównych podpisów (vkd3d_serialize_versioned_root_signature() oraz vkd3d_create_versioned_root_signature_deserializer()).
- Wsparcie dla strumieniowego wyjścia.
- Implementacja wielu wcześniej niedostępnych możliwości Direct3D 12, w tym wsparcie dla multisampling, rezerwacji zasobów,
pośredniego rysowania indeksowanego, renderowania głębokości bez shaderów pikselowych, równoczesnego dostępu do zasobów z różnych kolejki poleceń, pustych widoków (Null-views). - Dodano zmienne środowiskowe: VKD3D_CONFIG do ustawiania opcji zmieniających zachowanie libvkd3d oraz VKD3D_VULKAN_DEVICE do nadpisania urządzenia dla API Vulkan.
- Dodano wsparcie dla instrukcji shaderowych bufinfo,
eval_centroid,
eval_sample_index,
ld2ms,
sample_b,
sample_d,
sample_info,
samplepos.
Źródło: opennet.ru
