Переключение транслятора с OpenGL на Vulkan в среде Wine.
Вступление.
В Wine вызовы DirectX (DX) не могут быть выполнены напрямую, так как это проприетарное API, не поддерживаемое свободными драйверами. Поэтому для выполнения вызовов DX в среде Wine используется специальный транслятор.
Благодаря трансляции, программы, задействующие DirectX, могут отрисовывать свою графику, но на преобразование вызовов есть накладные расходы. Тем самым трансляция несколько медленнее, чем прямое выполнение.
В Wine реализовано два основных транслятора. Первый на базе OpenGL, а второй — Vulkan.
- Транслятор на основе OpenGL — это старая реализация, основным недостатком которой являются довольно существенные накладные расходы. Потери производительности в ряде случаев могут достигать 40%.
- Транслятор на основе Vulkan существенно более производительный, чем на OpenGL. Потери производительности редко превышают 20%, а в ряде случаев, благодаря качественным свободным драйверам и более продвинутым подсистемам Linux, наблюдается прирост производительности относительно Windows.
С тем учётом, что в 2022 году между трансляторами был достигнут паритет по поддерживаемым возможностям DirectX, на основе Vulkan стал более предпочтительным.
Не смотря на преимущества транслятора на основе Vulkan, на момент 2023 года в целях совместимости со старым оборудованием, не поддерживающим Vulkan, по умолчанию задействована трансляция в OpenGL. Так же наличествуют единичные программы, которые по той или иной причине работают только при использовании трансляции в OpenGL. Поэтому задействование Vulkan-транслятора нужно осуществлять вручную.
Задействование Vulkan-транслятора в Wine.
Задействование с помощью переменной окружения.
Это самый простой и удобный способ, который позволяет задействовать Vulkan-транслятор для конкретной программы в префиксе. Для его использования необходимо передать значение renderer=vulkan переменной окружения WINE_D3D_CONFIG. Пример:
WINE_D3D_CONFIG='renderer=vulkan' WINEPREFIX=/home/$USER/.wine64d2r wine start /unix 'C:/Program Files (x86)/Diablo II Resurrected/D2R.exe'
Примечание: Этот способ позволяет явно задействовать OpenGL и GDI, что может быть полезно в исключительных случаях.
Задействование через реестр.
Это устаревший вариант, который может быть полезен только в качестве альтернативы.
В каждом префиксе используется свой комплект файлов реестра Windows.
Официальная справка по структуре и параметрам реестра Wine-префикса: https://wiki.winehq.org/Useful_Registry_Keys
Редактирование реестра можно осуществить двумя способами.
- С использованием утилиты regedit.
WINEPREFIX=/home/$USER/.wine64d2r wine regedit
В открывшемся окне редактора реестра раскрыть ветвь HKEY_CURRENT_USER и перейти до .\Software\Wine\Direct3D.
Отредактировать строковый параметр renderer, заменив значение opengl на vulkan.
После замены можно закрывать редактор реестра. Транслятор готов к использованию.
- Второй вариант с заменой значения через утилиту редактирования реестра reg.
WINEPREFIX=/home/$USER/.wine64d2r wine reg ADD 'HKCU\Software\Wine\Direct3D' /v 'renderer' /t REG_SZ /d 'vulkan'
Как и в первом варианте значение строкового параметра renderer заменяется с opengl на vulkan.
Как видно, задействование современного Vulkan-транслятора с помощью переменной окружения WINE_D3D_CONFIG стало очень простым и удобным. Поэтому при наличии технической возможности его однозначно стоит использовать.