Кампанія Valve выпусціла Proton 4.11, пакет для запуску Windows-гульняў у Linux

Кампанія Valve апублікавала новую галінку праекта Пратон 4.11, заснаванага на напрацоўках праекта Wine і накіраванага на забеспячэнне запуску ў Linux гульнявых прыкладанняў, створаных для Windows і прадстаўленых у каталогу Steam. Напрацоўкі праекта распаўсюджваюцца пад ліцэнзіяй BSD. Па меры гатоўнасці ў арыгінальны Wine і спадарожныя праекты, такія як DXVK і vkd3d, пераносяцца якія развіваюцца ў Proton змены.

Proton дазваляе напрамую запускаць у Linux-кліенце Steam гульнявыя прыкладанні, якія пастаўляюцца толькі для Windows. Пакет уключае ў сябе рэалізацыю DirectX 10/11 (на базе DXVK) і 12 (на базе vkd3d), якія працуюць праз трансляцыю выклікаў DirectX у API Vulkan, падае палепшаную падтрымку гульнявых кантролераў і магчымасць выкарыстання поўнаэкраннага рэжыму незалежна ад падтрымоўваных у гульнях дазволаў экрана. У параўнанні з арыгінальным Wine значна павялічана прадукцыйнасць шматструменных гульняў дзякуючы прымяненню патчаў.esync»(Eventfd Synchronization) або «futex/fsync».

Асноўныя змены ў Proton 4.11:

  • Выканана сінхранізацыя з кодавай базай Wine 4.11, з якой перанесена больш за 3300 змен (мінулая галіна засноўвалася на wine 4.2). 154 патча з Proton 4.2 былі перанесены upstream і зараз уваходзяць у асноўны склад Wine;
  • Дададзена эксперыментальная падтрымка прымітываў сінхранізацыі на аснове сістэмнага выкліку futex(), якая дазваляе паменшыць нагрузку на CPU у параўнанні з esync. Акрамя таго, новая рэалізацыя вырашае праблемы з неабходнасцю выкарыстання спецыяльных налад для esync і магчымым вычарпаннем даступных файлавых дэскрыптараў.

    Сутнасць якая праводзіцца працы ў тым, каб пашырыць функцыянальнасць штатнага сістэмнага выкліку futex() у ядры Linux магчымасцямі, неабходнымі для аптымальнай сінхранізацыі пула струменяў. Патчы з неабходнай для Proton падтрымкай сцяга FUTEX_WAIT_MULTIPLE ужо перададзены для ўключэння ў асноўны склад ядра Linux і glibc. Падрыхтаваныя змены пакуль не ўключаны ў асноўны склад ядра, таму на дадзены момант неабходна ўсталяваць спецыяльнае ядро ​​з падтрымкай дадзеных прымітываў;

    Кампанія Valve выпусціла Proton 4.11, пакет для запуску Windows-гульняў у Linux

  • Праслойка DXVK (рэалізацыя DXGI, Direct3D 10 і Direct3D 11 па-над API Vulkan) абноўлена да версіі 1.3, А Д9ВК (эксперыментальная рэалізацыя Direct3D 9-над Vulkan) да версіі 0.13f. Для ўключэння падтрымкі D9VK у Proton варта выкарыстоўваць сцяг PROTON_USE_D9VK;
  • Забяспечана перадача гульняў бягучай частаты абнаўлення манітора;
  • Унесены выпраўленні, звязаныя з апрацоўкай фокусу курсора мышы і кіраваннем вокнамі;
  • Ухілены затрымкі ўводу і праблемы з падтрымкай вібрацыі для джойсцікаў, якія выяўляюцца ў некаторых гульнях, асабліва ў гульнях на рухавічку Unity;
  • Дададзена падтрымка апошняй версіі OpenVR SDK;
  • Кампаненты FAudio з рэалізацыяй гукавых бібліятэк DirectX (API XAudio2, X3DAudio, XAPO і XACT3) абноўлены да выпуску 19.07/XNUMX;
  • Вырашаны праблемы з сеткавай падсістэмай у гульнях на GameMaker;
  • Многія модулі Wine зараз збіраюцца як Windows PE-файлы, замест Linux-бібліятэк. Па меры пасоўвання працы ў гэтай вобласці выкарыстанне PE дапаможа некаторым сістэмам DRM і антычытам. У выпадку прымянення ўласнаручных зборак Proton, хутчэй за ўсё спатрэбіцца перастварыць віртуальную машыну Vagrant, каб сабраць PE файлы.

Да прыняцця ў асноўны склад ядра Linux патчаў ад кампаніі Valve для выкарыстання futex() замест esync патрабуецца ўсталяваць спецыяльнае ядро ​​з падтрымкай пула сінхранізацыі патокаў, які рэалізуецца ў наборы патчаў. fsync. Для Arch Linux у AUR ужо апублікаваны гатовы пакет ядра, сабраны з патчамі fsync. У Ubuntu 18.04 і 19.04 можна выкарыстоўваць PPA-рэпазітар з эксперыментальнымі ядрамі linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);

Пры наяўнасці ядра з падтрымкай fsync пры запуску Proton 4.11 у кансолі будзе выведзена паведамленне "fsync: up and running". Прымусова можна выключыць fsync, выкарыстоўваючы сцяг PROTON_NO_FSYNC=1.

Крыніца: opennet.ru

Дадаць каментар