Efter halvandet års udvikling har Wine-projektet offentliggjort udgivelsen af vkd3d-pakken 1.3 med implementeringen af Direct3D 12, der arbejder gennem kaldetranslation til grafiske API Vulkan. Pakken omfatter bibliotekerne libvkd3d med implementeringen af Direct3D 12, libvkd3d-shader med oversætter til shader-modellerne 4 og 5, samt libvkd3d-utils med funktioner til at lette porteringen af Direct3D 12-applikationer, samt et sæt demoeksempler, herunder port af glxgears til Direct3D 12. Koden i projektet distribueres under LGPLv2.1-licensen.
Biblioteket libvkd3d understøtter størstedelen af funktionaliteterne i Direct3D 12, herunder værktøjer til grafik og beregninger, køer og kommando-lister, beskrivelser og hukommelsesbeskrivelser, rod-signaturer, uordnet adgang, sampler, kommando-signaturer, rod-konstanter, indirekte rendering, metoderne Clear*() og Copy*().
I libvkd3d-shader er der implementeret oversættelse af bytekode fra shader-modellerne 4 og 5 til det intermediate repræsentation SPIR-V. Der understøttes vertex-, pixel-, tesselerings-, compute- og simple geometriske shaders, serialisering og deserialisering af rod-signaturer. Af shader-instruktionerne er der implementeret aritmetiske, atomare og bitoperationer, sammenligningsoperationer og dataflow-kontrol, sample-, gather- og load-instruktioner samt uordnede adgangsoperationer (UAV, Unordered Access View).
Blandt de mest betydningsfulde nyheder i Vkd3d 1.3 er:
- Indledende support for kompilering og preprocessering af shaders i HLSL (High-Level Shader Language), som har været tilgængeligt siden DirectX 9.0, er blevet tilføjet.
- Understøttelse af beskriver-arrays defineret i shader-modeller 5.1 er blevet tilføjet.
- Der er tilføjet support for double precision flydende tal operationer i shaders, indirekte adressering for tesselerings shaders, eksport af stencil fra shaders, shader-modifikatoren 'precise' og globale barrierer for ressourcer i hukommelsen.
- Muligheden for at disassemblerere Direct3D shaders fra bytekode til assembly-repræsentation er blevet implementeret.
- Support for parsing af det gamle bytekodeformat i Direct3D, anvendt i shader-modellerne 1, 2 og 3, er blevet tilføjet.
- Der er tilføjet funktioner til Direct3D 12 i libvkd3d, såsom rod-signaturer, uordnede adgangs visnings tællere, logiske sammensmeltningsoperationer til output og teksturer med adressseringsmetoden mirror_once. Strukturen vkd3d_host_time_domain_info er blevet tilføjet.
Kilde: opennet.ru
