Het Wine-project heeft de release van het vkd3d-pakket 1.16 gepubliceerd met de implementatie van Direct3D 12, dat werkt via de vertaling van aanroepen naar de grafische API Vulkan. Het pakket bevat de bibliotheken libvkd3d met de implementatie van Direct3D 12, libvkd3d-shader met een vertaler voor shader-modellen 4 en 5, en libvkd3d-utils met functies om het porteren van Direct3D 12-applicaties te vereenvoudigen, evenals een set demonstratievoorbeelden, waaronder de poort van glxgears naar Direct3D 12. De code van het project wordt verspreid onder de LGPLv2.1-licentie.
De libvkd3d-bibliotheek ondersteunt het merendeel van de mogelijkheden van Direct3D 12, inclusief middelen voor graphics en berekeningen, wachtrijen en commando-lijsten, descripteurs en heap-descripteurs, root-signaturen, ongeordende toegang, samplers, command-signaturen, root-constanten, indirecte rendering, de Clear*() en Copy*() methoden. In libvkd3d-shader is de vertaling van bytecode van shader-modellen naar de tussenliggende weergave SPIR-V geĆÆmplementeerd. Er worden vertex-, pixel-, tessellation-, compute- en eenvoudige geometrische shaders ondersteund, evenals serialisatie en deserialisatie van root-signaturen. Van de shader-instructies zijn rekenkundige, atomische en bitbewerkingen, vergelijkings- en controleflow-operators, sample-, gather- en load-instructies, en operaties voor ongeordende toegang (UAV, Unordered Access View) geĆÆmplementeerd.
In de nieuwe versie:
- Ondersteuning voor DXIL-shaders (DirectX Intermediate Language) is gestabiliseerd en staat standaard ingeschakeld.
- De shader-taalcompiler HLSL heeft initiële ondersteuning voor geometrische shaders toegevoegd. Voor shader-modellen 1, 2 en 3 is ondersteuning voor indirecte adressering, modules en waarde-beperkingen geïmplementeerd.
- In de libvkd3d-bibliotheek is ondersteuning voor shader-model 6.0 aangekondigd. In de ID3D12Device1-interface is de methode SetEventOnMultipleFenceCompletion() geĆÆmplementeerd. Ondersteuning voor de Vulkan-extensie VK_KHR_zero_initialize_workgroup_memory is toegevoegd om geheugen voor shaders met nullen te initialiseren. De Vulkan-extensie VK_KHR_maintenance2, zoals voorgesteld in de Vulkan 1.1-specificatie, is verplicht geworden.
- Ondersteuning voor het disassembleren van SPIR-V shaders en binaire effecten 'fx_2_0' is toegevoegd.
- Experimentiƫle ondersteuning voor indirecte adressering van constante buffers in GLSL (OpenGL Shading Language) is toegevoegd.
- De implementatie van de shader-taal MSL (Metal Shading Language), gebruikt door Apple in de grafische API Metal, heeft de mogelijkheid om texturen te laden toegevoegd.
- Ondersteuning voor HLSL-ingebouwde functies: AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() en GroupMemoryBarrierWithGroupSync() is toegevoegd.
- De vlaggen VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY, VKD3D_SHADER_COMPONENT_INT64, VKD3D_SHADER_COMPONENT_FLOAT16, VKD3D_SHADER_COMPONENT_UINT16, VKD3D_SHADER_COMPONENT_INT16, VKD3D_SHADER_RESOURCE_DATA_NONE en VKD3D_SHADER_RESOURCE_DATA_UINT zijn geĆÆmplementeerd.
Bron: opennet.ru
