A Wine projekt közzétette a vkd3d 1.13 csomag kiadását, amely a Direct3D 12 megvalósítását kínálja a Vulkan grafikus API-ba való hívás átkonvertálásával. A csomag tartalmazza a Direct3D 12 megvalósítást tartalmazó libvkd3d könyvtárakat, a 4-es és 5-ös shader modellekhez való fordítót tartalmazó libvkd3d-shader könyvtárat, valamint a Direct3D 12 alkalmazások portálását megkönnyítő funkciókat tartalmazó libvkd3d-utils könyvtárat, továbbá egy sor bemutató példát, beleértve a glxgears Direct3D 12-re portolt verzióját is. A projekt kódja LGPLv2.1 licenc alatt érhető el.
A libvkd3d könyvtár a Direct3D 12 legtöbb funkcióját támogatja, beleértve a grafikai és számítási eszközöket, sorokat és parancslistákat, leírókat és tömbindikátorokat, gyökér szignatúrákat, rendezetlen hozzáférést, mintákat, parancsszignatúrákat, gyökér konstansokat, közvetett renderelést, valamint a Clear*() és Copy*() metódusokat. A libvkd3d-shader a shader modellek bytekódjának köztes képviseletbe való fordítását valósítja meg, amely támogatja a vertex, pixel, tesszellációs, számítási és egyszerű geometriai shader-eket, valamint a gyökér szignatúra sorozatát. A shader utasítások között megvalósították az aritmetikai, atomikus és bitmanipulációs műveleteket, összehasonlító operátorokat és az adatfolyam irányítását, mint például a sample, gather és load utasításokat, valamint a rendezetlen hozzáférés (UAV, Unordered Access View) műveleteit.
Az új verzióban:
- Az HLSL fordítóba beépítették a ciklusok kiterjesztésének támogatását (loop unrolling), egy optimalizálási technikát, amely segít a CPU cache hatékonyabb kihasználásában és csökkenti az elágazásokat, mivel a ciklikus műveleteket egymás után következő kódkópákra cseréli.
- Hatékonyabb állapotobjektumok támogatása a 4-es shader modellekhez tartozó effektusok fordítójában.
- Támogatást biztosítottak a 4-es shader modellek alábbi típusaihoz: BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState, RasterizerState, valamint az OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() és SetRasterizerState() funkciókhoz.
- A shader fordítóban megvalósították a globális változók, funkcióparaméterek és annotációk inicializálási értékeinek különböző formátumokban való értelmezését és tárolását.
- Megvalósították az 5.1-es shader modell regiszterterének támogatását.
- Beépített funkciók kerültek megvalósításra: tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() és texCUBEgrad().
- A libvkd3d-hez hozzáadták az ID3D12CommandList6 interfészt, és lehetővé tették olyan textúrák létrehozását, amelyek tömörítése a spektrum különböző blokkjaiban történik (például külön tömörítve a 4×4 pixel méretű blokkokat).
- Hozzáadva a vkd3d_shader_parameter_info struktúráját és a 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 és VKD3D_SHADER_PARAMETER_TYPE_BUFFER paramétereket.
Forrás: opennet.ru
