A Wine projekt közzétette a vkd3d 1.11 csomag kiadását, amely a Direct3D 12 implementációját tartalmazza, működve a Vulkan grafikus API-ra történő hívástranszlációval. A csomag tartalmazza a libvkd3d könyvtárakat a Direct3D 12 implementációval, a libvkd3d-shader-t a 4-es és 5-ös modellek transzlátorával, és a libvkd3d-utils-t a Direct3D 12 alkalmazások portolásának megkönnyítésére, valamint egy demó példakészletet, amely tartalmazza a glxgears Direct3D 12-re való portolását. A projekt kódja LGPLv2.1 licenc alatt érhető el.
A libvkd3d könyvtár a Direct3D 12 lehetőségeinek nagy részét támogatja, beleértve a grafikai és számítási eszközöket, a sorokat és parancslistákat, a leírókat és a halom leírókat, a gyökér aláírásokat, nem rendezett hozzáférést, a Sampler-eket, a parancs aláírásokat, a gyökér konstansokat, közvetett (indirect) rajzolást, a Clear*() és Copy*() metódusokat. A libvkd3d-shader a 4-es és 5-ös modellek shaderek bytekódját SPIR-V köztes reprezentációvá alakítja. Támogatottak a vertex, pixel, tesszellációs, számítási és egyszerű geometriai shaderek, a gyökér aláírás sorozatának sorosítása és deszerializálása. A shader utasítások között megvalósításra került az aritmetikai, atomikus és bitműveletek, összehasonlító és adatáramlás-irányító utasítások, a sample, gather és load utasítások, valamint a nem rendezett hozzáférések (UAV, Unordered Access View) műveletei.
Az új verzióban:
- Kezdeti támogatás került hozzáadásra a régi Direct3D bájtkód intermedier reprezentációvá való fordításához, amely a SPIR-V shaderekhez készül.
- A HLSL fordítóhoz kezdeti támogatás került hozzáadásra a Direct3D effektusprofilok ("fx_2_0", "fx_4_0", "fx_4_1" és "fx_5_0") fordításához.
- Kísérleti támogatás került hozzáadásra a DXIL (DirectX Intermediate Language) köztes nyelv SPIR-V-re és Direct3D shaderek assembler utasításaira történő fordításához.
- A HLSL-ben hozzáadódott a "fx_2_0", "fx_4_0", "fx_4_1" és "fx_5_0" profilok támogatása, valamint a beépített funksciók: acos(), asin(), atan() és atan2(), és támogatás biztosítása a "Buffer" erőforrások számára.
- Kezdeti optimalizálás került bevezetésre, amely asszinkron módon frissíti a leírókat, ami felgyorsíthatja azokat az alkalmazásokat, amelyek minden egyes képkockában nagy számú leírót frissítenek.
- Biztosítva van a Vulkan kiterjesztések, a VK_EXT_mutable_descriptor_type és a VK_EXT_shader_viewport_index_layer használata a leírók medencéjével kapcsolatos hatékonyság növelése és a vertex és tessellációs shaderek renderelésének felgyorsítása érdekében.
- A ID3D12Device7 és ID3D12Resource2 interfészek támogatása került bevezetésre. Az ID3D12Device4 interfészhez hozzá lett adva a GetResourceAllocationInfo1() metódus.
- A D3DReflect() és a D3DDisassemble() interfészek támogatása került hozzáadásra.
- Lehetőség van a D3D12_FEATURE_D3D12_OPTIONS6, D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, D3D12_FEATURE_D3D12_OPTIONS11, D3D12_FEATURE_D3D12_OPTIONS12 és D3D12_FEATURE_D3D12_OPTIONS13 ellenőrzések végrehajtására.
- Új build opciók lettek hozzáadva: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 és VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- A D3D12CreateDeviceVKD3D() és a D3D12CreateDevice() funkciók aktívvá tették a Vulkan kiterjesztéseket: VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface és VK_MVK_ios_surface.
Forrás: opennet.ru
