Wine-projektet har offentliggjort udgivelsen af vkd3d-pakken 1.13 med implementeringen af Direct3D 12, der fungerer gennem oversættelse af opkald til Vulkan-grafik-API'en. Pakken inkluderer bibliotekerne libvkd3d med implementeringen af Direct3D 12, libvkd3d-shader med oversætteren til 4. og 5. generation af shaderne og libvkd3d-utils med funktioner til at forenkle portering af applikationer til Direct3D 12 samt et sæt demonstrationseksempler, herunder porteringen af glxgears til Direct3D 12. Koden fra projektet distribueres under LGPLv2.1-licensen.
Biblioteket libvkd3d understøtter størstedelen af funktionerne i Direct3D 12, herunder værktøjer til grafik og computation, køer og kommandolister, descriptorer og heap-descriptorer, rod-signaturer, unordered access, Samplere, kommandosignaturer, rod-konstanter, indirekte rendering, Clear*() metoder og Copy*(). I libvkd3d-shader er oversættelsen af bytekode til shader-modeller implementeret i mellemformatet SPIR-V. Der understøttes vertex-, pixel-, tessellations-, compute- og simple geometriske shader-standarder, samt serialisering og deserialisering af rod-signaturer. Af shader-instruktioner er aritmetiske, atomare og bitoperationer, sammenlignings- og kontrolflowoperatorer, sample-, gather- og load-instruktioner samt operationer af unordered access type (UAV, Unordered Access View) implementeret.
I den nye version:
- Compilerens HLSL har fået tilføjet understøttelse af loop unrolling (optimering, hvor cykliske operationer erstattes med flere på hinanden følgende kopier af koden for at optimere brugen af processorkassen og reducere forgreninger).
- Understøttelse af effektskompilatoren er blevet tilføjet for nogle tilstandsobjekter i den fjerde generation af shaderne.
- Der er blevet sikret understøttelse af typerne i den fjerde generation af shaderne: BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState og RasterizerState, samt funktionerne OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() og SetRasterizerState().
- Shaderkompilatoren har fået implementeret understøttelse af parsing og lagring i forskellige formater for initieringsværdier til globale variabler, funktionsparametre og annotationer.
- Understøttelse af registerområdet for shader-model 5.1 er blevet tilføjet.
- Indbyggede funktioner som tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() og texCUBEgrad() er blevet implementeret.
- I libvkd3d er interface ID3D12CommandList6 blevet tilføjet, samt muligheden for at oprette teksturer, hvis kompression finder sted på niveau med enkeltblokke (for eksempel komprimeres blokke af 4×4 pixels individuelt).
- Understøttelse af strukturen vkd3d_shader_parameter_info og parametrene 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 og VKD3D_SHADER_PARAMETER_TYPE_BUFFER er blevet tilføjet.
Kilde: opennet.ru
