Вышла версия DXVK 3.0, крупное обновление прослойки для трансляции Direct3D в Vulkan, которую Linux-геймеры активно используют с Wine и Proton для запуска Windows-игр.

Главным изменением стал переход на dxbc-spirv для компиляции шейдеров. Он заменяет предыдущий код трансляции шейдеров для всех поддерживаемых моделей и устраняет проблемы с рендерингом, которые раньше исправить не удавалось, в том числе вызванные неопределённым поведением игр или некорректным кодом компилятора FXC от Microsoft.

Новый компилятор создаёт более компактный код SPIR-V, что снижает потребление памяти DXVK в некоторых играх. Например, Overwatch и God of War могут использовать примерно на 1 ГБ меньше памяти.

К тому же, теперь компиляция шейдеров полностью выполняется в рабочих потоках. Раньше рабочие потоки использовались только для компиляции конвейера Vulkan, а шейдерная трансляция происходила в потоке приложения, что замедляло запуск игр. Новый подход сокращает время запуска в некоторых проектах.

Значительным изменением стало также использование по умолчанию расширения Vulkan VK_EXT_descriptor_heap на драйверах, которые его поддерживают. Оно пришло на смену модели привязки с буферами дескрипторов, представленной в DXVK 2.7.

Модель descriptor heap обеспечивает схожую производительность на стороне CPU и снижает накладные расходы, ограниченные GPU, на картах NVIDIA. Для работы нужен драйвер NVIDIA версии 595.84 или новее; старые драйверы не активируют эту функцию из-за проблем с производительностью.

DXVK 3.0 также улучшает поддержку старых игр на Direct3D 8 и 9. Устаревший конвейер с фиксированными функциями теперь обслуживается парой убершейдеров, оптимизированные варианты которых компилируются в фоне по мере того, как игры настраивают различные состояния фиксированного конвейера.

Кроме того, в реализации D3D9 появились оптимизации загрузки буферов. Некоторые типы буферов теперь загружаются по требованию, а не помещаются напрямую в видеопамять, а также добавлена логика для ограничения потребления памяти.

Разделяемые ресурсы теперь работают с основной версией Wine и больше не требуют патчей, специфичных для Proton. Прежний метод временно сохранён для совместимости со старыми версиями Proton, но в будущем его удалят.

В число прочих улучшений вошли исправления ошибок валидации Vulkan, программная обработка вершин в играх на D3D8/9, корректный расчёт тумана для фиксированного конвейера, снижение нагрузки на процессор в распространённых сценариях D3D9, улучшенная загрузка констант шейдеров D3D9, более широкое использование асинхронной очереди передачи для загрузки в видеопамять и поддержка функции Class Linkage в D3D11.

Также включены исправления для отдельных игр. В BioShock Infinite устранена проблема с пулом сэмплеров, вызывавшая мерцание. В Borderlands 2 исправлено мерцание травы при включённой анизотропной фильтрации. Fallout New Vegas получает исправление для корректного разрешения глубины с некоторыми модами, а Max Payne больше не вылетает при запуске с подключёнными несколькими мониторами.

Среди других исправленных игр: Colin McRae Rally 3, Counter-Strike: Global Offensive, Insurgency, Railroad Tycoon 3, Sang-Froid: Tales of Werewolves, Splinter Cell 4, The Sims 3, Total War: Pharaoh, Witch on the Holy Night и World of Final Fantasy.

Теперь DXVK 3.0 требует возможности Vulkan 1.4, поэтому нужен свежий драйвер с поддержкой этой версии API. Сложности возникнут, только если драйверу уже несколько лет.

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

Подробнее в списке изменений.