Compania Valve o nouă ramură a proiectului , bazat pe realizările proiectului Wine și destinat să permită rularea în Linux a aplicațiilor de jocuri create pentru Windows, disponibile în catalogul Steam. Realizările proiectului sub licența BSD. Pe măsură ce devin disponibile, modificările dezvoltate în Proton sunt transferate în Wine original și în proiectele conexe, cum ar fi DXVK și vkd3d.
Proton permite rularea directă în clientul Steam pentru Linux a aplicațiilor de jocuri livrate exclusiv pentru Windows. Pachetul include implementarea DirectX 10/11 (bazată pe ) și 12 (bazată pe ), care funcționează prin translatarea apelurilor DirectX în API Vulkan, oferind un suport îmbunătățit pentru controlerele de jocuri și posibilitatea de a utiliza modul fullscreen, indiferent de rezoluțiile acceptate în jocuri. Comparativ cu Wine-ul original, performanța jocurilor multithreading a fost semnificativ îmbunătățită datorită aplicării patch-urilor „» (Sincronizare Eventfd) sau „futex/fsync”.
Principalele :
- A fost realizată sincronizarea cu baza de cod Wine 4.11, din care au fost transferate peste 3300 de modificări (ramura anterioară se baza pe Wine 4.2). 154 de patch-uri din Proton 4.2 au fost transferate upstream și acum fac parte din compunerea principală a Wine;
- A fost adăugată o suport experimental pentru primitivele de sincronizare bazate pe apelul de sistem futex(), care permite reducerea încărcării pe CPU comparativ cu esync. În plus, noua implementare rezolvă problemele legate de necesitatea utilizării pentru esync și posibila epuizare a descriptorilor de fișiere disponibili.
Scopul lucrărilor desfășurate este de a extinde funcționalitatea apelului de sistem futex() din nucleul Linux cu capabilitățile necesare pentru o sincronizare optimă a grupului de fire. Patch-urile cu suportul necesar pentru Proton cu flagul FUTEX_WAIT_MULTIPLE sunt deja pentru a fi incluse în compunerea principală a nucleului Linux și . Modificările pregătite nu sunt deocamdată incluse în compunerea principală a nucleului, așa că momentan este necesar un nucleu special cu suport pentru aceste primitive;
- Stratul (implementarea DXGI, Direct3D 10 și Direct3D 11 pe API Vulkan) a fost actualizată la versiunea , iar (implementarea experimentală Direct3D 9 pe Vulkan) la versiunea 0.13f. Pentru a activa suportul D9VK în Proton, trebuie utilizat flagul PROTON_USE_D9VK;
- A fost asigurată transmiterea jocurilor cu frecvența curentă de actualizare a monitorului;
- Au fost corectate problemele legate de gestionarea focalizării cursorului și a ferestrelor;
- Au fost eliminate întârzierile de input și problemele de suport al vibrației pentru joystick-uri, care apar în unele jocuri, în special în cele pe motorul Unity;
- A fost adăugat suportul pentru cea mai recentă versiune a OpenVR SDK;
- Componentele FAudio cu implementarea bibliotecilor audio DirectX (API XAudio2, X3DAudio, XAPO și XACT3) au fost actualizate la versiunea 19.07;
- Problemele legate de subsistemul de rețea în jocurile pe GameMaker au fost rezolvate;
- Multe module Wine sunt acum compilate ca fișiere PE Windows, în loc de biblioteci Linux. Pe măsură ce se avansează în acest domeniu, utilizarea PE va ajuta anumite sisteme DRM și anti-cheat. În cazul utilizării unor compilări personalizate Proton, este foarte probabil să fie necesară recrearea mașinii virtuale Vagrant pentru a compila fișierele PE.
Până la acceptarea în kernelul Linux a patch-urilor de la Valve pentru a utiliza futex() în loc de esync, este necesar să instalați un kernel special cu suport pentru pool-ul de sincronizare a firelor, implementat în setul de patch-uri. . Pentru Arch Linux, în AUR există deja un pachet kernel gata, compilat cu patch-uri fsync. În Ubuntu 18.04 și 19.04, se poate folosi un repository PPA cu kerneluri experimentale linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
În prezența unui kernel cu suport fsync, la pornirea Proton 4.11 va apărea mesajul „fsync: up and running” în consolă. Fisync poate fi dezactivat forțat folosind flacul PROTON_NO_FSYNC=1.
Sursa: opennet.ro
