Projekt Wine vydal verzi balíčku vkd3d 1.7 s implementací Direct3D 12, která funguje prostřednictvím překladů volání do grafického API Vulkan. Balíček obsahuje knihovny libvkd3d s implementací Direct3D 12, libvkd3d-shader s překladačem verzí 4 a 5 shaderů 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 distribuován pod licencí LGPLv2.1.
Knihovna libvkd3d podporuje většinu funkcí Direct3D 12, včetně prostředků pro grafiku a výpočty, front, seznamů příkazů, descriptorů a deskriptorů haldy, kořenových podpisů, neuspořádané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áno překlad bytecode modelů 4 a 5 shaderů do mezivrstvy SPIR-V. Podporovány jsou vertexové, pixelové, tesselace, výpočetní a jednoduché geometrické shadery, serializace a deserializace kořenového podpisu. Z shaderových instrukcí jsou realizovány aritmetické, atomické a bitové operace, operátory porovnání a řízení toku dat, instrukce sample, gather a load, operace neuspořádaného přístupu (UAV, Unordered Access View).
V nové verzi:
- Pokračuje práce na vylepšení překladače shaderů v jazyce HLSL (High-Level Shader Language):
- Byla přidána možnost volání uživatelských funkcí a používání polí jako parametrů uživatelských funkcí.
- Byla přidána podpora parametrů SV_DispatchThreadID, SV_GroupID a SV_GroupThreadID.
- Byly přidány vestavěné funkce all(), distance(), exp(), exp2(), frac(), lit(), reflect(), sin(), cos(), smoothstep(), sqrt(), rsqrt(), step(), transpose().
- Byla přidána počáteční podpora typů s nízkou přesností s plovoucí desetinnou čárkou, jako je „min16float“.
- Byla výrazně zlepšena podpora profilů modelů shaderů Direct3D 1/2/3.
- Bylo přidáno veřejné API pro rozbor (vkd3d_shader_parse_dxbc) a serializaci (vkd3d_shader_serialize_dxbc) binárních dat DXBC.
Zdroj: opennet.ru
