Wine projekt avaldas vkd3d paketi väljaande 1.13, mis rakendab Direct3D 12 ja töötab vulkaani graafilise API kaudu kutsete tõlkimise kaudu. Pakett sisaldab libvkd3d raamatukogusid, mis rakendavad Direct3D 12, libvkd3d-shader koos 4. ja 5. mudeli shaderite tõlgiga ning libvkd3d-utils funktsioonidega, mis lihtsustavad Direct3D 12 rakenduste portimist, samuti komplekti näidiseid, sealhulgas glxgears'i porti Direct3D 12-le. Projekti kood jaotatakse LGPLv2.1 litsentsi alusel.
Teek libvkd3d toetab enamikku Direct3D 12 funktsionaalsustest, sealhulgas graafika- ja arvutustöötlusvahendeid, järjekordi ja käskude loendeid, deskriptorid ja mäludeskriptorid, juureseosed, segamata juurdepääs, Sampleri omadused, komandisignatuurid, juurekonstandid, kaudne joonistamine, Clear*() meetodid ja Copy*(). Libvkd3d-shader rakendab shaderite mudelite bytecode tõlget SPIR-V vahevormiks. Toetatakse tipud, pikslid, tesselatsioonid, arvutustööd ja lihtsad geomeetrilised shadereid, juureseose serialiseerimine ja deserialiseerimine. Shaderi juhistes on rakendatud aritmeetilised, atomaarsete ja bititaoliste operatsioonide, võrdlusoperatsioonide ja andmevoo juhtimise operatsioonide instruktsioonid, samuti näidud, kogumid ja laadimisoperatsioonid, segamata juurdepääsu toimingud (UAV, Unordered Access View).
Uues versioonis:
- HLSL-ide kompilaatorisse on lisatud silmustest loobumise (loop unrolling) tugi, optimiseerimine, mis asendab tsüklilised toimingud mitme järjestikuse koopiaga koodist, et tõhusamalt kasutada protsessori vahemälu ja vähendada harutamist.
- Lisatud on efektide kompilaatori tugi teatud neljanda mudeli shaderi olekute jaoks.
- Neljas mudel shaderite tüüpide tugi on tagatud: BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState ja RasterizerState, samuti funktsioonid OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() ja SetRasterizerState().
- Shaderite kompilaatoris on rakendatud globaalsete muutuja väärtuste, funktsiooniparameetrite ja annotatsioonide algväärtuste sirvimise ja salvestamise tuge erinevates formaatides.
- Lisatud on registriruumi tugi shaderi mudelis 5.1.
- Rakendatud on sisseehitatud funktsioonid tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() ja texCUBEgrad().
- Libvkd3d-sse on lisatud liidese ID3D12CommandList6 ja loodud on võimalus luua tekstuure, mille kokkusurumine toimub eraldi plokkide tasemel (näiteks pressitakse eraldi 4×4 piksliga plokid).
- Lisatud on struktuuri vkd3d_shader_parameter_info ja parameetrite 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 ja VKD3D_SHADER_PARAMETER_TYPE_BUFFER tugi.
Allikas: opennet.ru
