Na zes maanden van ontwikkeling is de nieuwste versie van DXVK (Direct3D naar Vulkan Translation Layer) uitgebracht, een open bibliotheek die API-aanroepen van Direct3D 8, 9, 10 en 11 omzet in Vulkan-opdrachten. Het stelt gebruikers in staat om 3D-toepassingen en games die voor Windows zijn ontwikkeld uit te voeren op systemen zonder native ondersteuning voor Direct3D, waarbij de efficiënte mogelijkheden van de Vulkan-API worden benut.
Belangrijkste wijzigingen
In de nieuwe versie is overgestapt naar het gebruik van specificaties en extensies van Vulkan 1.4, wat uiteraard vereist dat de stuurprogramma's compatibel zijn.
DXVK maakt nu gebruik van dxbc-spirv voor het compileren van shaders voor alle ondersteunde shader-modellen. Dit lost een aantal problemen op die eerder niet opgelost konden worden:
Problemen met rendering in games, veroorzaakt door ofwel het afhankelijk zijn van onbepaald gedrag, ofwel het feit dat FXC in sommige gevallen onjuiste code genereert, zoals in Postal: Brain Damaged, Snowrunner.
Egenereerde code is compacter dan alleen de omgezette SPIR-V-code, wat de hoeveelheid geheugen die DXVK gebruikt, aanzienlijk vermindert. In games zoals Overwatch of God of War bespaart dit ongeveer 1 GB systeemgeheugen.
Het compileren van shaders is nu volledig verplaatst naar werkthreads, wat de opstarttijd kan verkorten in games zoals Days Gone en Final Fantasy XIV, of in sommige gevallen haperingen kan verminderen. Voorheen voerde DXVK de transformatie van SPIR-V uit in de applicatiestroom en compileerde het alleen de daadwerkelijke Vulkan-pipelines op werkprocessen.
De tussenvertaling van gecompileerde shaders van DXVK wordt nu op de schijf gecachet binnen de AppData/Local-map van de huidige Wine-prefix. Dit is noodzakelijk, aangezien de compilatietijd is toegenomen in vergelijking met de oude compiler. De pad naar de cache kan worden gewijzigd met de omgevingsvariabele DXVK_SHADER_CACHE_PATH.
De nieuwe Vulkan-extensie VK_EXT_descriptor_heap wordt nu standaard gebruikt in stuurprogramma's die deze ondersteunen.
Men verwacht dat deze nieuwe model, vergeleken met de oude bindingmodus gebaseerd op VK_EXT_descriptor_buffer, ongeveer hetzelfde niveau van CPU-gelinksde prestaties zal bieden en tegelijkertijd prestatieverlies op Nvidia GPU's vermijdt (vereist nvidia-drivers-595.84 en nieuwer).
Wijzigingen in D3D9
Om een verouderde fixed-function pipeline te emuleren, die D3D8- en D3D9-games in staat stelt om te renderen zonder shaders, genereerde DXVK eerder eigen shadercode on-the-fly op basis van de status van de pipeline. In sommige games, zoals Unreal Tournament 2004, kon dit leiden tot merkbare haperingen, zelfs na lange speelperiodes.
Om dit op te lossen, implementeert DXVK nu de fixed-function pipeline in de vorm van een paar uber-shaders, waarvoor geoptimaliseerde versies in de achtergrond worden gecompileerd.
Optimalisatie van bufferlading
Om beter aan het gedrag van Windows te voldoen, worden verschillende soorten buffers die voorheen direct in VRAM werden geplaatst nu op aanvraag geladen, en er is ook een geheugenbeheerstrategie geïmplementeerd die adresruimte-problemen oplost in een aantal 32-bits D3D9-games.
Deze wijzigingen kunnen ook de prestaties verbeteren op systemen zonder aanpasbare BAR-grootte in games zoals GTA IV.
Op systemen die voldoende ondersteuning bieden voor VK_EXT_sample_locations en VK_EXT_extended_dynamic_state3 werkt de D3DRS_MULTISAMPLEANTIALIAS renderstatus nu correct, waardoor applicaties rasterisatie met één monster kunnen gebruiken bij rendering naar renderingdoelen met meerdere monsters. Dit lost problemen op met de gebruikersinterface-rendering in Anno 1701, Men of War Assault Squad en soortgelijke problemen in andere games met ingeschakelde MSAA.
Algemene bronnen werken nu met de originele implementatie van Wine en vereisen geen Proton-specifieke patches meer.
Daarnaast moeten de vele fixen voor verschillende games worden genoemd, die nu beter zullen presteren.
Bron: linux.org.ru
