Выпуск DXVK 3.0

Через полгода разработки выпущена свежая версия DXVK (Direct3D to Vulkan Translation Layer), открытой библиотеки, которая преобразует вызовы 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 теперь работает правильно, позволяя приложениям использовать растеризацию с одной выборкой при рендеринге в целевые объекты рендеринга с несколькими выборками. Это устраняет проблемы с отрисовкой пользовательского интерфейса в Anno 1701, Men of War Assault Squad и аналогичные проблемы в других играх с включенным MSAA.
Общие ресурсы теперь работают с оригинальной реализацией Wine и больше не требуют исправлений, специфичных для Proton.
Также следует упомянуть множество исправлений для разных игр, которые теперь будут работать лучше
>>> Заметка о выпуске на GitHub
