На прошлой неделе вышел новый релиз DXVK - 3.0

Команда разработчиков DXVK на прошлой неделе выпустила обновление, которое можно назвать одним из самых значительных за последнее время. В центре внимания — новый компилятор шейдеров, который кардинально меняет подход к обработке графических программ.

Новый компилятор шейдеров: dxbc-spirv

Ключевые преимущества нового компилятора:

  • Исправление неустранимых ранее проблем рендеринга. Новый компилятор корректно обрабатывает случаи, когда игры полагаются на неопределённое поведение или когда компилятор FXC генерирует некорректный код. Это решает проблемы в Postal: Brain Damaged и Snowrunner.
  • Значительная экономия памяти. Генерируемый SPIR-V-код стал более компактным, что существенно снижает потребление памяти DXVK. В таких играх, как Overwatch и God of War, экономия может достигать 1 ГБ системной памяти.
  • Полная выгрузка компиляции в рабочие потоки. Ранее DXVK выполнял трансляцию в SPIR-V на основном потоке приложения, и только компиляция самих Vulkan-конвейеров происходила в рабочих потоках. Теперь весь процесс полностью выгружен, что сокращает время запуска в Days Gone и Final Fantasy XIV, а также уменьшает микрофризы в некоторых сценариях.
  • Кэширование промежуточного представления. Введено дисковое кэширование скомпилированного промежуточного представления шейдеров в каталоге AppData/Local префикса Wine. Это необходимо, так как время компиляции увеличилось по сравнению со старым компилятором. Путь к кэшу можно изменить с помощью переменной DXVK_SHADER_CACHE_PATH.
  • Поддержка Shader Model 1-3 для D3D9. Реализована @K0bin.

Важное примечание: Вне особых случаев новый компилятор не должен повышать общую производительность.

Дескрипторные кучи (Descriptor Heaps)

Расширение VK_EXT_descriptor_heap теперь используется по умолчанию на драйверах, которые его поддерживают. По сравнению со старой моделью на основе VK_EXT_descriptor_buffer, новая модель обеспечивает примерно тот же уровень производительности CPU, но значительно снижает потерю производительности на GPU, особенно заметную на видеокартах NVIDIA. Для работы требуется драйвер NVIDIA версии 595.84 или новее. На старых драйверах функция отключена из-за регрессий производительности. Путь на основе дескрипторных буферов, введённый в DXVK 2.7, объявлен устаревшим и будет удалён в будущем.

Изменения в D3D9

Функциональный конвейер (Fixed-Function Pipeline): Для эмуляции устаревшего конвейера, позволяющего играм D3D8/9 выполнять рендеринг без шейдеров, DXVK теперь использует пару «убершейдеров» (ubershaders). Оптимизированные варианты компилируются в фоновом режиме по мере того, как игра настраивает различные состояния конвейера. Это решает проблему заметных микрофризов, например, в Unreal Tournament 2004.

Оптимизация загрузки буферов: Различные типы буферов, которые ранее размещались прямо в VRAM, теперь загружаются по требованию. Это исправляет падения, связанные с адресным пространством, в некоторых 32-битных D3D9-играх. Также может улучшить производительность в играх типа GTA IV на системах без Resizeable BAR.

Состояние рендеринга мультисэмплинга: На системах с поддержкой VK_EXT_sample_locations и VK_EXT_extended_dynamic_state3 теперь корректно работает состояние D3DRS_MULTISAMPLEANTIALIAS. Это исправляет проблемы с отображением UI в Anno 1701, Men of War Assault Squad и других играх с включённым MSAA.

Другие изменения

Общие ресурсы: Теперь работают с upstream-реализацией Wine и больше не требуют специфических патчей Proton.

Ограничитель частоты кадров: Переменная окружения DXVK_FRAME_RATE удалена. Рекомендуется использовать внешние ограничители, такие как Gamescope или MangoHud. Желающие могут использовать опцию конфигурации dxvk.maxFrameRate = n.

Исправления ошибок и улучшения (выборочно)

  • Исправлена обработка вершинных шейдеров в D3D8/9, включая Vietcong и The I of the Dragon.
  • Исправлены расчёты тумана в фиксированном конвейере D3D8/9 (Sea Dogs).
  • Улучшена синхронизация GPU для наложения нескольких независимых проходов рендеринга.
  • Оптимизированы загрузки ресурсов в VRAM через асинхронную очередь.
  • Поддержка D3D11 Class Linkage (для демо-приложений).
  • Оптимизированы загрузки констант шейдеров D3D9, снижено потребление памяти и повышена производительность.
  • Исправлены долгоиграющие проблемы в Bioshock Infinite (истощение пула сэмплеров), Borderlands 2 (мерцающая трава), Fallout New Vegas (глубина resolve), Max Payne (падение при наличии нескольких мониторов) и других играх.

Поддержка драйверов

Теперь требуется драйвер с поддержкой Vulkan 1.4. Это означает, что драйверы не должны быть устаревшими на несколько лет.

Для пользователей RDNA1/2 на Windows: Драйвер AMD для этих GPU на Windows больше не получает обновлений функций, может использовать только медленную устаревшую модель биндинга и страдает от серьёзных проблем производительности. Рекомендуется придерживаться DXVK 2.x или рассмотреть переход на Linux.

Релиз DXVK уже доступен на GitHub-странице проекта.

  • Просмотров: 31