Projekt Wine vydání balíčku s implementací Direct3D 12, která pracuje prostřednictvím překladu volání do grafického API Vulkan. Balíček obsahuje knihovny libvkd3d s implementací Direct3D 12, libvkd3d-shader s překladačem shaderů modelů 4 a 5 a libvkd3d-utils s funkcemi pro usnadnění portování aplikací Direct3D 12, stejně jako sadu demonstračních příkladů, včetně portu glxgears na Direct3D 12. Kód projektu je licencován pod LGPLv2.1.
Knihovna libvkd3d pokryje většinu funkcí Direct3D 12, včetně prostředků pro grafiku a výpočty, front a seznamů příkazů, popisovačů a hromadných popisovačů, kořenových podpisů, neřazeného přístupu, samplerů, podpisů příkazů, kořenových konstant, nepřímého vykreslování, metod Clear*() a Copy*().
V libvkd3d-shader je implementován překlad bajtkódu modelů shaderů 4 a 5 do mezilehlého formátu SPIR-V. Podporovány jsou vrcholové, pixelové, tesselační, výpočetní a jednoduché geometrické shadery, serializace a deserializace kořenového podpisu. Z shaderových instrukcí jsou implementovány aritmetické, atomární a bitové operace, operátory porovnání a řízení toku dat, instrukce sample, gather a load, operace neřazeného přístupu (UAV, Unordered Access View).
Mezi nejvýznamnější v Vkd3d 1.2 patří:
- Připravenost knihovny libvkd3d-shader pro použití ve třetích projektech.
- Podpora tesselačních shaderů.
- Podpora překladu, serializace a deserializace kořenových podpisů (vkd3d_serialize_versioned_root_signature() a vkd3d_create_versioned_root_signature_deserializer()).
- Podpora streamování.
- Implementace mnoha dříve nedostupných funkcí Direct3D 12, včetně podpory multisampling, rezervace prostředků,
nepřímého indexovaného vykreslování, vykreslování hloubky bez pixelových shaderů, souběžného přístupu k prostředkům z různých příkazových front, nulových pohledů (Null-views). - Byly přidány proměnné prostředí: VKD3D_CONFIG pro nastavení možností pro změnu chování libvkd3d a VKD3D_VULKAN_DEVICE pro přep override zařízení pro API Vulkan.
- Byla přidána podpora shaderových instrukcí bufinfo,
eval_centroid,
eval_sample_index,
ld2ms,
sample_b,
sample_d,
sample_info,
samplepos.
Zdroj: opennet.ru
