DXVK (DirectX to Vulkan) — это реализация с открытым исходным кодом графического API Microsoft DirectX 9, 10 и 11 поверх Vulkan. Он позволяет играм DirectX работать на операционных системах, которые не поддерживают DirectX напрямую, таких как Linux и macOS.
DXVK переводит вызовы DirectX в вызовы Vulkan, что позволяет играм DirectX использовать преимущества современных графических процессоров, поддерживающих Vulkan. Это обеспечивает улучшенную производительность и совместимость для многих игр DirectX на поддерживаемых платформах. На днях, вышло значительное обновление до версии 2.5. Это обновление включает в себя множество новых функций, улучшений и исправлений ошибок.
Управление памятью
Управление ресурсами и памятью было полностью переписано, чтобы более эффективно использовать выделенную видеопамять:
Уменьшение фрагментации может снизить пиковое использование памяти в таких играх, как God of War, до 1 ГБ в экстремальных случаях.
Дефрагментация памяти теперь выполняется периодически, чтобы вернуть часть неиспользуемой памяти обратно в систему.
Цель не в том, чтобы сократить использование VRAM любой ценой, а в том, чтобы сделать это консервативно, если система испытывает нагрузку на память или если значительный объем выделенной памяти не используется. Сохранение некоторого количества неиспользуемой памяти полезно для быстрого обслуживания последующих выделений.
Примечание: В настоящее время дефрагментация отключена в драйвере ANV от Intel, см. #4434. Опция конфигурации dxvk.enableMemoryDefrag может быть установлена для включения или отключения этой функции через файл конфигурации.
Поддержка драйверов
Хотя технически это и не требуется, новое управление памятью лучше всего работает в драйверах, поддерживающих VK_EXT_memory_budget и VK_KHR_maintenance5. Страница поддержки драйверов была обновлена соответствующим образом.
D3D8 / D3D9
Программный курсор
Для API курсора D3D9 реализована поддержка эмулируемых курсоров, что позволяет играм устанавливать произвольное изображение в качестве курсора мыши. Это исправляет проблему в Dungeon Siege 2 (#3020) и делает курсор корректным в Act of War и различных старых D3D8-играх. (PR #4302)
Пул сэмплеров
Игры на Unreal Engine 3, использующие D3D9, имеют причуду, заключающуюся в том, что они передают кажущееся неинициализированным значение в качестве смещения mipmap LOD. Чтобы не создавать больше объектов сэмплера Vulkan, чем поддерживает драйвер, предыдущие версии DXVK округляли LOD bias до значения, кратного 0,5, что могло внести визуальные неточности. В качестве более корректного решения DXVK теперь будет уничтожать неиспользуемые сэмплеры Vulkan на лету и использовать правильное смещение LOD.
Примечание: Вышеупомянутый обходной путь не был нужен и не использовался в реализации D3D11, он затрагивал только D3D9.
Исправления ошибок и улучшения
В драйверах Nvidia версии 565.57.01 и новее по умолчанию включена строгая эмуляция поплавков для повышения корректности.
Игры, в которых эта опция уже была включена, могут получить небольшой прирост производительности на этом драйвере.
Внесены различные изменения для потенциального улучшения производительности на некоторых мобильных GPU. (включает PR #4358)
Режимы дисплея теперь упорядочены по частоте обновления, чтобы быть более согласованными с wined3d и исправить проблемы с тем, что некоторые игры выбирали неправильный режим дисплея.
Исправлено большое количество ошибок при тестировании wine.
Ascension to the Throne: Исправлена старая регрессия, из-за которой некоторые участки земли отображались черными. (#4338, PR #4341)
Command & Conquer: Generals: Исправлена проблема производительности, вызванная отсутствием точки входа D3D8. (PR #4342)
King's Bounty: Warriors of the North: Исправлена проблема рендеринга воды. (#4344, PR #4350)
Tomb Raider: Legend: Исправлено мерцание геометрии при строгой эмуляции поплавков. (#4319, PR #4442)
Rayman 3: исправлена регрессия, вызывавшая проблемы с рендерингом. (#4422, PR #4423)
D3D11 / DXGI
Изменения в управлении ресурсами
Чтобы снизить нагрузку на системную память и повысить стабильность в 32-битных играх, создание, загрузка и удаление ресурсов теперь ограничивается, если количество временных выделений памяти для хранения превышает определенный порог. Это устраняет сбои в Total War: Rome II и ряде других игр. Кроме того, большие DYNAMIC-текстуры, обычно используемые для воспроизведения видео, больше не будут использовать буфер постановки.
Соответственно, опции d3d11.maxDynamicImageBufferSize и d3d11.maxImplicitDiscardSize были удалены; теперь такие игры, как Total War: Warhammer III и Ryse: Son of Rome, будут работать хорошо по умолчанию, без чрезмерного использования памяти.
Примечание: эти изменения негативно влияют на производительность на процессоре в ряде игр, включая Shadow Warrior 2.
Исправления ошибок и улучшения
Эффект SEQUENTIAL swap теперь реализован для цепочек подкачки DXGI, что позволяет играм читать ранее представленные бэкбуферы. Это исправляет проблему, из-за которой миниатюры сохраненных игр отображались черными в некоторых визуальных новеллах. (ValveSoftware/Proton#7017)
Девиртуализация некоторых вызовов методов D3D11 для улучшения совместимости с Special K.
Исправлена некорректная генерация кода шейдера для EvaluateAttributeSnapped.
В некоторых играх, использующих отложенные контексты для рендеринга, уменьшено количество конфликтов блокировок.
Это может повысить производительность на старых процессорах в Sekiro: Shadows Die Twice и некоторых других играх.
Call of Duty: Modern Warfare 2 Campaign Remastered: Исправлено возможное зависание GPU. (#3884)
Diablo 4: исправлена проблема, из-за которой игра не запускалась, если был задействован интегрированный GPU.
The Sims 4: исправлена ошибка использования после освобождения в рендере D3D11. (#4360)
Vindictus: Работа над потенциальными проблемами рендеринга, вызванными неинициализированными данными константного буфера. (#4405, #4406)
Yakuza 0 и Yakuza Kiwami: Исправлена регрессия, появившаяся в DXVK 2.4.1, которая приводила к блокировке этих игр при запуске. (PR #4297)
Разные изменения
Для dxvk-native добавлен бэкенд SDL3. (PR #4326, #4404)
Исправлена проблема, появившаяся в DXVK 2.4.1, которая приводила к появлению сообщений об ошибках при неудачном создании буфера.
Исправлена давняя проблема, когда перекрывающиеся запросы окклюзии приводили к некорректному использованию Vulkan. (#2698)
Исправлена редкая проблема, из-за которой запросы временных меток не отслеживались корректно и могли считывать неверные данные.
Исправлены различные другие проблемы, приводившие к ошибкам валидации Vulkan в таких играх, как Dishonored 2, Tales of Arise и The Sims 4.
Исправлены различные проблемы со сборками MSVC. (PR #4444)
Отключено обходное решение проблемы неработающих очисток цели рендеринга на драйверах Nvidia до версии 560.28.03 на незатронутых драйверах.
Если поддерживается, теперь используется VK_EXT_pageable_device_local_memory, чтобы обеспечить лучшее управление памятью на стороне драйвера.
Скачать и посмотреть более подробную информацию, вы можете на GitHub.