Valve wypuszcza Proton 4.11, pakiet do uruchamiania gier Windows na Linuksie

Firma Valve опубликовала nowa gałąź projektu Proton 4.11, oparty na opracowaniach projektu Wine i mający na celu zapewnienie uruchomienia aplikacji do gier stworzonych dla systemu Windows i prezentowanych w katalogu Steam w systemie Linux. Rozwój projektu rozpowszechnianie się na licencji BSD. Gdy zmiany opracowane w Protonie będą gotowe, zostaną przeniesione do oryginalnego Wine i powiązanych projektów, takich jak DXVK i vkd3d.

Proton umożliwia bezpośrednie uruchamianie aplikacji do gier działających wyłącznie w systemie Windows w kliencie Steam Linux. Pakiet zawiera implementację DirectX 10/11 (w oparciu o DXWK) i 12 (na podstawie vkd3d), działając poprzez tłumaczenie wywołań DirectX na API Vulkan, zapewnia lepszą obsługę kontrolerów gier i możliwość korzystania z trybu pełnoekranowego niezależnie od rozdzielczości ekranu obsługiwanych w grach. W porównaniu do oryginalnego Wine, wydajność gier wielowątkowych została znacząco zwiększona dzięki zastosowaniu łatek”esynchronizacja„(Synchronizacja zdarzeń) lub „futex/fsync”.

Głównym zmiany w Protonie 4.11:

  • Przeprowadzono synchronizację z bazą kodu Wine 4.11, z której przeniesiono ponad 3300 zmian (poprzednia gałąź bazowała na Wine 4.2). 154 łatki z Protona 4.2 zostały przeniesione w górę i są teraz zawarte w głównym pakiecie Wine;
  • Dodano eksperymentalną obsługę prymitywów synchronizacji w oparciu o wywołanie systemowe futex(), które zmniejsza obciążenie procesora w porównaniu do esync. Ponadto nowa implementacja rozwiązuje problemy związane z koniecznością użytkowania specjalne ustawienia dla esync i ewentualnego wyczerpania dostępnych deskryptorów plików.

    Istotą prowadzonych prac jest rozszerzenie funkcjonalności standardowego wywołania systemowego futex() w jądrze Linuksa o możliwości niezbędne do optymalnej synchronizacji puli wątków. Poprawki z obsługą flagi FUTEX_WAIT_MULTIPLE niezbędne dla Protona już są przeniesione do włączenia do głównego jądra Linuksa i glibc. Przygotowane zmiany nie są jeszcze uwzględnione w głównym jądrze, więc na ten moment jest to konieczne ustalić specjalne jądro z obsługą tych prymitywów;

    Valve wypuszcza Proton 4.11, pakiet do uruchamiania gier Windows na Linuksie

  • Międzywarstwa DXWK (implementacja DXGI, Direct3D 10 i Direct3D 11 na bazie Vulkan API) zaktualizowano do wersji 1.3I D9VK (eksperymentalna implementacja Direct3D 9 na platformie Vulkan) do wersji 0.13f. Aby włączyć obsługę D9VK w Protonie, użyj flagi PROTON_USE_D9VK;
  • Bieżąca częstotliwość odświeżania monitora jest przesyłana do gier;
  • Wprowadzono poprawki do obsługi fokusu myszy i zarządzania oknami;
  • Naprawiono opóźnienie sygnału wejściowego i problemy z obsługą wibracji dla joysticków występujące w niektórych grach, szczególnie w grach opartych na silniku Unity;
  • Dodano obsługę najnowszej wersji OpenVR SDK;
  • Komponenty FAudio z implementacją bibliotek dźwiękowych DirectX (API XAudio2, X3DAudio, XAPO i XACT3) zostały zaktualizowane do wersji 19.07;
  • Rozwiązano problemy z podsystemem sieciowym w grach na GameMakerze;
  • Wiele modułów Wine jest teraz zbudowanych jako pliki Windows PE, a nie biblioteki Linux. W miarę postępu prac w tym obszarze użycie PE będzie pomocne w niektórych systemach DRM i zapobiegających oszustwom. Jeśli używasz niestandardowych kompilacji Protona, najprawdopodobniej będziesz musiał odtworzyć maszynę wirtualną Vagrant, aby zbudować pliki PE.

Zanim poprawki Valve zostaną zaadoptowane do głównego jądra Linuksa, użycie futex() zamiast esync wymaga zainstalowania specjalnego jądra z obsługą puli synchronizacji wątków zaimplementowanej w zestawie poprawek fsync. Dla Arch Linux już w AUR opublikowany gotowy pakiet jądra skompilowany z łatkami fsync. W Ubuntu 18.04 i 19.04 można używać eksperymentalnego PPA jądra linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);

Jeśli masz jądro obsługujące fsync, po uruchomieniu Protona 4.11 konsola wyświetli komunikat „fsync: działa i działa”. Możesz wymusić wyłączenie fsync za pomocą flagi PROTON_NO_FSYNC=1.

Źródło: opennet.ru

Dodaj komentarz