Projekt Wine vydal verziu balíka vkd3d 1.13 s implementáciou Direct3D 12, ktorá funguje prostredníctvom prekladu volaní do grafického API Vulkan. Balík obsahuje knižnice libvkd3d s realizáciou Direct3D 12, libvkd3d-shader s prekladačom modelov 4 a 5 shaderov a libvkd3d-utils s funkciami na zjednodušenie portovania aplikácií Direct3D 12, ako aj súbor demonštračných príkladov, vrátane portu glxgears na Direct3D 12. Kód projektu je distribuovaný pod licenciou LGPLv2.1.
Knižnica libvkd3d podporuje väčšinu funkcií Direct3D 12, vrátane prostriedkov pre grafiku a výpočty, fronty a príkazové zoznamy, deskriptory a hromadné deskriptory, koreňové podpisy, neorganizovaný prístup, samplery, podpisy príkazov, koreňové konštanty, nepriamu (indirect) vykreslovanie, metódy Clear*() a Copy*(). V libvkd3d-shader je implementovaný preklad bajtkódu modelov shaderov do medzirezortu SPIR-V. Podporované sú vrcholové, pixelové, tesselačné, výpočtové a jednoduché geometrické shadery, serializácia a deserializácia koreňového podpisu. Medzi inštrukciami shaderov sú implementované aritmetické, atomové a bitové operácie, operátory porovnania a riadenia toku dát, inštrukcie sample, gather a load, operácie neorganizovaného prístupu (UAV, Unordered Access View).
V novej verzii:
- Do kompilátora HLSL bola pridaná podpora rozvíjania cyklov (loop unrolling, optimalizácia, pri ktorej sa na efektívnejšie využitie procesorovej cache a zníženie vetvenia nahrádzajú cyklické operácie niekoľkými po sebe idúcimi kópiami).
- Pridaná podpora kompilátora efektov pre niektoré objekty stavu štvrtej modelu shaderov.
- Zabezpečená podpora typov štvrtej modelu shaderov BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState a RasterizerState, ako aj funkcií OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() a SetRasterizerState().
- V kompilátore shaderov bola implementovaná podpora analýzy a uchovávania hodnoty inicializácie pre globálne premenné, parametre funkcií a anotácie v rôznych formátoch.
- Pridaná podpora registračného priestoru shaderovej modelu 5.1.
- Implementované vstavané funkcie tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() a texCUBEgrad().
- V libvkd3d bol pridaný rozhranie ID3D12CommandList6 a implementovaná možnosť vytvárať textúry, ktorých kompresia prebieha na úrovni jednotlivých blokov (napríklad sú bloky s veľkosťou 4×4 pixely komprimované osobitne).
- Pridaná podpora štruktúry vkd3d_shader_parameter_info a parametrov 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 a VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Zdroj: opennet.ru
