Переключение транслятора с OpenGL на Vulkan в среде Wine.

09. марта 2023 Linux, Wine 0

Вступление.

В 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 стало очень простым и удобным. Поэтому при наличии технической возможности его однозначно стоит использовать.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *