Na anderhalf jaar ontwikkeling heeft het Wine-project de release van het vkd3d 1.3-pakket gepubliceerd, dat de implementatie van Direct3D 12 biedt, werkend via oproepvertaling naar de grafische API Vulkan. Het pakket bevat de libvkd3d-bibliotheken met implementaties van Direct3D 12, libvkd3d-shader met een vertaler voor shader modellen 4 en 5, en libvkd3d-utils met functies voor het vereenvoudigen van de portering van Direct3D 12-toepassingen, evenals een set demonstratievoorbeelden, waaronder de port van glxgears naar Direct3D 12. De code van het project is beschikbaar onder de LGPLv2.1-licentie.
De libvkd3d-bibliotheek ondersteunt het merendeel van de mogelijkheden van Direct3D 12, inclusief tools voor grafische en compute-functies, queues en commandolijsten, descriptors en heap-descriptors, root signatures, unordered access, samplers, command signatures, root constants, indirect rendering, en de Clear*() en Copy*() methoden.
In libvkd3d-shader is de vertaling van bytecode van shader modellen 4 en 5 naar de tussenliggende representatie SPIR-V geïmplementeerd. Het ondersteunt vertex, pixel, tessellation, compute en eenvoudige geometrische shaders, evenals de serialisatie en deserialisatie van de root signature. Van de shader-instructies zijn de aritmetische, atomische en bitwise operaties, vergelijkings- en dataflowcontrole-instructies, sample-, gather- en load-instructies, en unordered access operaties (UAV, Unordered Access View) geïmplementeerd.
Een van de meest significante innovaties in Vkd3d 1.3 is:
- Initiële ondersteuning voor de compilatie en preprocessing van shaders in de High-Level Shader Language (HLSL), beschikbaar sinds DirectX 9.0, is toegevoegd.
- Ondersteuning voor descriptor arrays gedefinieerd in shader model 5.1 is toegevoegd.
- Ondersteuning voor operaties met dubbele precisie drijvende komma's in shaders, indirecte adressering voor tessellation shaders, export van stencils vanuit shaders, de shader-modificator 'precise', en globale barrières voor resources in geheugen zijn gegarandeerd.
- De mogelijkheid voor het disassembleren van Direct3D shaders van bytecode naar assemblerrepresentatie is geïmplementeerd.
- Ondersteuning voor het parseren van het oude bytecodeformaat van Direct3D, dat wordt gebruikt in shader modellen Direct3D 1, 2 en 3, is toegevoegd.
- In libvkd3d zijn mogelijkheden van Direct3D 12 toegevoegd, zoals root signatures, view counters met ongestructureerde toegang, logische merge operators voor output en de texture addressing mode mirror_once. De structuur vkd3d_host_time_domain_info is toegevoegd.
Bron: opennet.ru
