Po pol roka vývoja bola vydaná nová verzia DXVK (Direct3D to Vulkan Translation Layer), otvorenej knižnice, ktorá prevádza volania API Direct3D 8, 9, 10 a 11 na príkazy Vulkan. Umožňuje spúšťať 3D aplikácie a hry navrhnuté pre Windows na systémoch, kde nativná podpora Direct3D chýba, pričom využíva efektívnejší grafický API Vulkan.
Hlavné zmeny
V novej verzii sa prešlo na používanie špecifikácií a rozšírení Vulkan 1.4, čo si samozrejme vyžaduje kompatibilný ovládač.
DXVK teraz využíva dxbc-spirv na kompiláciu shaderov pre všetky podporované modely shaderov. To odstraňuje množstvo problémov, ktoré bolo predtým nemožné vyriešiť:
Problémy s renderovaním v hrách, spôsobené buď tým, že hry závisia na neurčitom správaní, alebo tým, že FXC v niektorých prípadoch generuje nesprávny kód, ako v Postal: Brain Damaged, Snowrunner.
Vygenerovaný kód je kompaktnejší ako len prevedený kód SPIR-V, čo zásadne znižuje objem pamäte, ktorú DXVK zaberá. V takých hrách ako Overwatch alebo God of War to umožňuje ušetriť približne 1 GB systémovej pamäte.
Kompilácia shaderov sa teraz úplne presunula na pracovné vlákna, čo môže skrátiť dobu spustenia v takých hrách ako Days Gone a Final Fantasy XIV, alebo v niektorých prípadoch znížiť zamŕzanie. Predtým DXVK vykonával prevod SPIR-V v prúde aplikácie a kompiloval iba reálne pipeline Vulkan na pracovných procesoch.
Medzičlánok s kompilovanými shadermi DXVK sa teraz cacheuje na disku v adresári AppData/Local aktuálneho prefixu Wine. To je potrebné, pretože čas kompilácie sa v porovnaní so starým kompilátorom zvýšil. Cestu k cache možno zmeniť pomocou premennej prostredia DXVK_SHADER_CACHE_PATH.
Nové rozšírenie Vulkan VK_EXT_descriptor_heap sa teraz používa predvolene v ovládačoch, ktoré ho podporujú.
Očakáva sa, že v porovnaní so starou implementáciou modelu viazania založeného na VK_EXT_descriptor_buffer, tento nový model poskytne približne rovnakú úroveň výkonu spojenej s CPU, pričom sa vyhne zníženiu výkonu na GPU Nvidia (vyžaduje nvidia-drivers-595.84 a novšie).
Zmeny D3D9
Aby emulovať zastaraný potrubný systém s pevným funkciami, ktorý umožňuje hrám D3D8 a D3D9 vykonávať vykresľovanie bez shaderov, DXVK predtým generoval vlastný kód shaderov za behu na základe stavu potrubia. V niektorých hrách, ako je Unreal Tournament 2004, to mohlo viesť k výrazným spomaleniam aj po dlhých herných obdobiach.
Aby to opravila, DXVK teraz implementuje potrubie s pevným funkciami vo forme pár uber shaderov, pre ktoré sú optimalizované varianty kompilované na pozadí.
Optimalizácia načítania vyrovnávacej pamäte
Aby presnejšie zodpovedala správaniu systému Windows, rôzne typy vyrovnávacích pamätí, ktoré sa predtým umiestňovali priamo do VRAM, sa teraz načítavajú na požiadanie, a bola implementovaná stratégia obmedzenia objemu operačnej pamäte, ktorá opravuje havárie spojené s adresným priestorom v niekoľkých 32-bitových hrách D3D9.
Tieto zmeny môžu tiež zlepšiť výkon na systémoch bez meniteľnej veľkosti BAR v takých hrách, ako je GTA IV.
V systémoch, ktoré dostatočne podporujú VK_EXT_sample_locations a VK_EXT_extended_dynamic_state3, stav vykresľovania D3DRS_MULTISAMPLEANTIALIAS teraz funguje správne, čo umožňuje aplikáciám používať rastrovanie s jednou vzorkou pri vykresľovaní na cieľové objekty vykresľovania s viacerými vzorkami. To odstraňuje problémy s vykresľovaním užívateľského rozhrania v Anno 1701, Men of War Assault Squad a podobné problémy v iných hrách s povoleným MSAA.
Všeobecné zdroje teraz fungujú s originálnou implementáciou Wine a už nevyžadujú opravy špecifické pre Proton.
Taktiež stojí za zmienku množstvo opráv pre rôzne hry, ktoré teraz budú fungovať lepšie.
Zdroj: linux.org.ru
