Wine-projektet har offentliggjort version 1.7 af pakken vkd3d, som implementerer Direct3D 12, der fungerer via oversættelse af kald til grafik-API'en Vulkan. Pakken indeholder bibliotekerne libvkd3d med implementeringen af Direct3D 12, libvkd3d-shader med oversætteren til shader-modeller 4 og 5 og libvkd3d-utils med funktioner til at forenkle porteringen af Direct3D 12-applikationer samt et sæt demonstrations eksempler, inklusive porten af glxgears til Direct3D 12. Koden fra projektet distribueres under LGPLv2.1-licensen.
Biblioteket libvkd3d understøtter det meste af Direct3D 12's funktionalitet, inklusive værktøjer til grafik og beregninger, køer og kommandolister, deskriptorer og hukommelsesdeskriptorer, rodsignaturer, uordentlig adgang, samples, kommandosignaturer, rodkonstanter, indirekte rendering, Clear*() og Copy*() metoder. I libvkd3d-shader er oversættelsen af bytecode for shader-modeller version 4 og 5 implementeret til et mellemliggende repræsentation kaldet SPIR-V. Vekselvirkede, pixel-, tessellerings-, beregnings- og enkle geometriske shaders støttes, ligesom serialisering og deserialisering af rodsignaturen. Af shader-instruktioner er aritmetiske, atomiske og bitoperationer, sammenligningsoperatorer og kontrolstrømmen instruktioner realiseret, samt sample-, gather- og load-instruktioner, og operationer for uordentlig adgang (UAV, Unordered Access View).
I den nye version:
- Arbejdet med at forbedre shader-kompilatoren i HLSL (High-Level Shader Language) fortsætter:
- Muligheden for at kalde brugerdefinerede funktioner og bruge arrays som parametre for brugerdefinerede funktioner er blevet tilføjet.
- Understøttelse af parametre SV_DispatchThreadID, SV_GroupID og SV_GroupThreadID er blevet tilføjet.
- Indbyggede funktioner såsom all(), distance(), exp(), exp2(), frac(), lit(), reflect(), sin(), cos(), smoothstep(), sqrt(), rsqrt(), step() og transpose() er blevet tilføjet.
- Indledende support for lav-præcisions flydende typer, såsom 'min16float', er blevet tilføjet.
- Støtten til Direct3D shader-modeller 1/2/3 er betydeligt forbedret.
- En offentlig API til parsing (vkd3d_shader_parse_dxbc) og serialisering (vkd3d_shader_serialize_dxbc) af binære DXBC-data er blevet tilføjet.
Kilde: opennet.ru
