Po šestim měsících vývoje byla vydána nová verze DXVK (Direct3D to Vulkan Translation Layer), otevřené knihovny, která převádí volání API Direct3D 8, 9, 10 a 11 na příkazy Vulkan. Umožňuje spouštět 3D aplikace a hry vyvinuté pro Windows na systémech, kde nativní podpora Direct3D chybí, přičemž využívá výhod efektivnějšího grafického API Vulkan.
Hlavní změny
V nové verzi došlo k přechodu na použití specifikací a rozšíření Vulkan 1.4, což odpovídajícím způsobem vyžaduje kompatibilní ovladač.
DXVK nyní používá dxbc-spirv k překladu shaderů pro všechny podporované modely shaderů. Tím se řeší řada problémů, které dříve nebylo možné vyřešit:
Problémy s renderováním ve hrách, způsobené buď tím, že se hry spoléhají na neurčité chování, nebo tím, že FXC v některých případech generuje chybný kód, jako v Postal: Brain Damaged, Snowrunner.
Generovaný kód je kompaktnější než pouze převedený kód SPIR-V, což podstatně snižuje objem paměti, který DXVK zabírá. V takových hrách, jako je Overwatch nebo God of War, to umožňuje ušetřit přibližně 1 GiB systémové paměti.
Komprese shaderů nyní probíhá plně na pracovní vlákna, což může zkrátit čas spuštění v takových hrách, jako jsou Days Gone a Final Fantasy XIV, nebo v některých případech snížit zamrzání. Dříve DXVK prováděl překlad SPIR-V v rámci aplikace a kompiloval pouze skutečné Vulkan pipeline na pracovních procesech.
Mezistupňová reprezentace zkompilovaných shaderů DXVK je nyní mezipamětí na disku uvnitř složky AppData/Local aktuálního prefixu Wine. To je nezbytné, protože doba kompilace vzrostla ve srovnání se starým kompilátorem. Cestu k mezipaměti lze změnit pomocí proměnné prostředí DXVK_SHADER_CACHE_PATH.
Nové rozšíření Vulkan VK_EXT_descriptor_heap je nyní ve výchozím nastavení používáno v ovladačích, které jej podporují.
Očekává se, že ve srovnání se starou implementací modelu vazby, založenou na VK_EXT_descriptor_buffer, tento nový model poskytne přibližně stejnou úroveň výkonu spojeného s CPU, přičemž se vyhneme poklesu výkonu na GPU Nvidia (je vyžadován nvidia-drivers-595.84 a novější).
Změny D3D9
Aby emulować przestarzały potok z zablokowanymi funkcjami, który umożliwia grom D3D8 i D3D9 renderowanie bez shaderów, DXVK wcześniej generował własny kod shaderów w locie na podstawie stanu potoku. W niektórych grach, takich jak Unreal Tournament 2004, mogło to prowadzić do zauważalnych zacięć nawet po długich okresach rozgrywki.
Aby to naprawić, DXVK teraz implementuje potok z zablokowanymi funkcjami w postaci pary uber shaderów, dla których zoptymalizowane warianty są kompilowane w tle.
Optymalizacja ładowania bufora
Aby dokładniej odwzorować zachowanie systemu Windows, różne typy buforów, które wcześniej były umieszczane bezpośrednio w VRAM, są teraz ładowane na żądanie, a także wprowadzono strategię ograniczenia pamięci operacyjnej, która naprawia awarie związane z przestrzenią adresową w wielu grach D3D9 32-bitowych.
Te zmiany mogą również poprawić wydajność w systemach bez regulowanego rozmiaru BAR w takich grach jak GTA IV.
W systemach, które wystarczająco wspierają VK_EXT_sample_locations i VK_EXT_extended_dynamic_state3, stan renderowania D3DRS_MULTISAMPLEANTIALIAS działa teraz poprawnie, umożliwiając aplikacjom korzystanie z rasteryzacji z pojedynczą próbą podczas renderowania do obiektów renderowania z wieloma próbami. To eliminuje problemy z renderowaniem interfejsu użytkownika w Anno 1701, Men of War Assault Squad i podobne problemy w innych grach z włączonym MSAA.
Wspólne zasoby działają teraz z oryginalną implementacją Wine i nie wymagają więcej poprawek specyficznych dla Proton.
Warto również wspomnieć o wielu poprawkach dla różnych gier, które teraz będą działały lepiej.
Zdroj: linux.org.ru
