Firma Valve nowa gałąź projektu , oparty na dokonaniach projektu Wine i mający na celu uruchamianie w systemie Linux aplikacji gier stworzonych dla systemu Windows i dostępnych w katalogu Steam. Dokonania projektu na licencji BSD. Wraz z postępem prace nad oryginalnym Wine oraz projektami towarzyszącymi, takimi jak DXVK i vkd3d, są przenoszone do Proton.
Proton umożliwia bezpośrednie uruchamianie w kliencie Steam na Linuxie aplikacji gier dostarczanych wyłącznie dla Windows. Pakiet zawiera implementację DirectX 10/11 (opartą na ) oraz 12 (opartą na ), działające poprzez tłumaczenie wywołań DirectX na API Vulkan, oferują lepsze wsparcie dla kontrolerów gier oraz możliwość korzystania z trybu pełnoekranowego niezależnie od rozdzielczości obsługiwanych w grach. W porównaniu do oryginalnego Wine, wydajność gier wielowątkowych znacząco wzrosła dzięki zastosowaniu łat '' (Synchronizacja Eventfd) lub 'futex/fsync'.
Podstawowe :
- Zsynchronizowano z bazą kodu Wine 4.11, z której przeniesiono ponad 3300 zmian (poprzednia gałąź opierała się na Wine 4.2). 154 łat z Proton 4.2 zostały przeniesione upstream i teraz stanowią część głównej wersji Wine;
- Dodano eksperymentalne wsparcie dla prymitywów synchronizacji opartych na wywołaniu systemowym futex(), co pozwala na zmniejszenie obciążenia CPU w porównaniu do esync. Ponadto nowa implementacja rozwiązuje problemy z koniecznością używania dla esync oraz potencjalnym wyczerpaniem dostępnych deskryptorów plików.
Istotą realizowanej pracy jest rozszerzenie funkcjonalności standardowego wywołania systemowego futex() w jądrze Linux o możliwości potrzebne do optymalnej synchronizacji puli wątków. Łaty z niezbędnym wsparciem dla Protona z flagą FUTEX_WAIT_MULTIPLE zostały już do włączenia w główną wersję jądra Linux i . Przygotowane zmiany nie zostały jeszcze włączone do głównej wersji jądra, dlatego w tej chwili wymagane jest specjalne jądro z wsparciem dla tych prymitywów;
- Warstwa (implementacja DXGI, Direct3D 10 i Direct3D 11 nad API Vulkan) zaktualizowana do wersji , a (eksperymentalna implementacja Direct3D 9 nad Vulkan) do wersji 0.13f. Aby włączyć wsparcie D9VK w Proton, należy użyć flagi PROTON_USE_D9VK;
- Zrealizowano przekazywanie aktualnej częstotliwości odświeżania monitora do gier;
- Wprowadzone poprawki związane z obsługą fokusu kursora myszy i zarządzaniem oknami;
- Usunięto opóźnienia wprowadzania i problemy z obsługą wibracji dla joysticków, które występowały w niektórych grach, zwłaszcza w grach na silniku Unity;
- Dodano wsparcie dla najnowszej wersji OpenVR SDK;
- Komponenty FAudio z implementacją bibliotek dźwiękowych DirectX (API XAudio2, X3DAudio, XAPO i XACT3) zaktualizowane do wydania 19.07;
- Rozwiązano problemy z sieciową podsystemem w grach na GameMaker;
- Wiele modułów Wine jest teraz kompilowanych jako pliki PE Windows, zamiast bibliotek Linux. W miarę postępów w tej dziedzinie użycie PE pomoże niektórym systemom DRM i antycheatowym. W przypadku użycia własnych kompilacji Proton, najprawdopodobniej będzie konieczne ponowne utworzenie maszyny wirtualnej Vagrant, aby skompilować pliki PE.
Aby zastosować poprawki od firmy Valve do jądra Linux i używać futex() zamiast esync, wymagane jest zainstalowanie specjalnego jądra z obsługą puli synchronizacji wątków, zaimplementowanej w zestawie poprawek. . Dla Arch Linux w AUR już dostępny jest gotowy pakiet jądra skompilowany z poprawkami fsync. W Ubuntu 18.04 i 19.04 można użyć repozytorium PPA z eksperymentalnymi jądrami linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
Gdy dostępne jest jądro z obsługą fsync, uruchamiając Proton 4.11 w konsoli pojawi się komunikat „fsync: działa”. Można wymusić wyłączenie fsync, używając flagi PROTON_NO_FSYNC=1.
Źródło: opennet.ru
