След половин година разработка е издадена нова версия на DXVK (Translation Layer от Direct3D към Vulkan), отворена библиотека, която преобразува API извикванията на Direct3D 8, 9, 10 и 11 в команди Vulkan. Тя позволява стартиране на 3D приложения и игри, разработени за Windows, на системи, където нативната поддръжка на Direct3D не е налична, използвайки по-ефективните възможности на графичния API Vulkan.
Основни промени
В новата версия е извършен преход към използването на спецификациите и разширенията на Vulkan 1.4, което съответно ще изисква совместим драйвер.
DXVK сега използва dxbc-spirv за компилиране на шейдъри за всички поддържани модели шейдъри. Това разрешава редица проблеми, които преди е било невъзможно да се решат:
Проблеми с рендеринг в игрите, причинени както от факта, че игрите разчитат на неопределено поведение, така и от това, че FXC в някои случаи генерира неверен код, както в Postal: Brain Damaged, Snowrunner.
Генерираният код е по-компактен, отколкото просто преобразуваният код SPIR-V, което значително намалява обема на паметта, заета от DXVK. В игри като Overwatch или God of War това позволява да се спестят около 1 ГБ системна памет.
Компилацията на шейдърите сега е напълно пренесена на работни потоци, което може да намали времето за стартиране в игри като Days Gone и Final Fantasy XIV, или в някои случаи да намали замръзванията. По-рано DXVK извършваше транслация на SPIR-V в потока на приложението и компилираше само реални конвейери Vulkan на работните потоци.
Интермедийната репрезентация на компилираните шейдъри на DXVK сега се кешира на диска в директорията AppData/Local на текущия префикс Wine. Това е необходимо, тъй като времето за компилация се е увеличило в сравнение със стария компилатор. Пътят до кеша може да бъде променен чрез променливата на средата DXVK_SHADER_CACHE_PATH.
Новото разширение Vulkan VK_EXT_descriptor_heap сега се използва по подразбиране в драйверите, които го поддържат.
Очаква се, че в сравнение с старата реализация на модела за свързване, основан на VK_EXT_descriptor_buffer, този нов модел ще осигури приблизително същото ниво на производителност, свързана с ЦП, като същевременно избегне спад в производителността на GPU Nvidia (изисква nvidia-drivers-595.84 и по-нови).
Промени в D3D9
За да се емулира остарялата конвейерна структура с фиксирани функции, която позволява на игрите D3D8 и D3D9 да рендерират без шейдери, DXVK по-рано генерираше собствен код за шейдери в реално време на базата на състоянието на конвейера. В някои игри, като Unreal Tournament 2004, това можеше да доведе до забележими забавяния дори след дълги игрови сесии.
За да се поправи това, DXVK сега реализира конвейера с фиксирани функции под формата на двойка убершейдери, за които оптимизирани версии се компилират на фонов режим.
Оптимизация на зареждането на буфера
За да се отрази по-точно поведението на Windows, различните типове буфери, които по-рано се разполагаха директно във VRAM, сега се зареждат при необходимост, а също така е реализирана стратегия за ограничаване на обема на оперативната памет, която поправя бъгове, свързани с адресното пространство, в редица 32-битови игри D3D9.
Тези промени също могат да подобрят производителността на системи без изменяем размер на BAR в игри като GTA IV.
В системи, които в достатъчна степен поддържат VK_EXT_sample_locations и VK_EXT_extended_dynamic_state3, състоянието на рендериране D3DRS_MULTISAMPLEANTIALIAS сега работи правилно, позволявайки на приложенията да използват растеризация с едно из Samples при рендериране в целеви обекти за рендериране с множество из Samples. Това отстранява проблемите с визуализацията на потребителския интерфейс в Anno 1701, Men of War Assault Squad и подобни проблеми в други игри с включен MSAA.
Общите ресурси сега работят с оригиналната реализация на Wine и вече не изискват поправки, специфични за Proton.
Следва да се споменат и множество поправки за различни игри, които сега ще работят по-добре.
Източник: linux.org.ru
