LINUX.ORG.RU
ФорумGames

Игры в Linux: переходим в следующее поколение?

 , , , ,


7

4

Эта статья является переводом статьи из блога главного разработчика композитного менеджера KWin (используется в KDE) Мартина Гресслина. Оригинал вы можете прочесть по ссылке. Далее идёт повествование от автора. Прошу сильно не пинать за качество перевода.

В этой заметке я хотел бы поделиться мыслями о том, как улучшить игровой опыт в Linux.

Ситуация с X11

В X11 главная проблема для игр, это композитор. Играм необходим прямой доступ к графическому процессору (видеокарте), без каких либо посредников. Для сравнения, возьмём игровую консоль Playstation: когда вы запускаете игру, вы можете быть уверены, что она получила полный доступ к графическому процессору (GPU). Композитинг X11 предоставить такого не может. Композитор в X11 должен полностью скомпоновать сцену. Выглядит это так:

  • Игра рендерится через OpenGL/GLX;
  • X-сервер уведомляет композитор через расширение Xdamage;
  • Композитор рассчитывает область для перерисовки;
  • Композитор использует расширение Xcomposite для получения пиксельной карты для игрового окна;
  • Композитор связывает пиксельную карту с текстурой OpenGL;
  • Композитор рендерит текстуру, используя OpenGL/GLX поверх игрового окна;
  • X-сервер предоставляет готовое изображение из композитора через KMS.


При таком раскладе, мы имеем 5 вещей, которые не оптимальны для полноэкранных игр: проходы туда-сюда через композитор X-сервера, что добавляет серьёзные задержки. В такой ситуации, композитор всегда будет замедлять игру, так как будет выполнять вертикальную синхронизацию и так далее.

Обходные пути в X11

Существует готовое решение чтобы исправить это, известное как «unredirection full-screen window (отключить перенаправление для полноэкранных окон)». Идея заключается в том, что композитор не будет работать для полноэкранного приложения, и будет использована обычная, «не композитная» функциональность X-сервера.

На мой взгляд, это неправильное решение проблемы, потому что композитор по-прежнему работает, он по-прежнему получает события через XDamage (отслеживание областей для перерисовки, прим.перев.) (от, например, других окон) и работа композитора может внезапно возобновиться (например, при выводе уведомления на экран).

В KWin/Plasma, у нас есть лучшее решение: блокировка композитора. Мы можем это сделать, так как не требуем композитинга, в отличии от окружений с обязательным композитингом, где можно использовать только unredirection. У нас даже есть высокоуровневый API для игр, для того чтобы они могли сообщать, что необходимо заблокировать композитинг.

Это также объясняет, почему в KWin/Plasma не включена по умолчанию опция отключения полноэкранного композитинга. Это может вызвать проблемы в работе неигровых приложений (например тиринг в видеоплеере. прим.перев.), но рекомендуется для игр. Также это объясняет почему мне пофиг на тесты PTS (Phoronix Test Suite), так как по моему мнению они проводятся с неправильными настройками. Если бы нас это волновало, то можно было бы просто убедиться, что используемые в PTS игры, отключают композитинг.

Ситуация с Wayland.

В Wayland всё гораздо лучше, так как теперь нет X11-прослоек. Теперь процесс выглядит так:

  • Игра рендерится через OpenGL/EGL;
  • Композитор получает уведомление через wl_surface;
  • Композитор напрямую представляет wl_buffer через KMS, так как знает что тут больше не на что смотреть.


Так что ситуация значительно улучшилась. Хочу отметить, что KWin пока не поддерживает эти этапы и всё ещё рендерит через OpenGL, но мы движемся в этом направлении.

Однако, я думаю, ещё есть проблемы. Наш композитор (KWin) по-прежнему получает события от других окон, может «проснуться» и так далее. Запуск игры в режиме рабочего стола означает, что будут другие процессы в системе, с которыми игра должна разделить ресурсы. Мы хотим пойти по примеру Playstation: игре всё, остальным - ничего. Я не хочу чтобы KWin отбирал ресурсы CPU/GPU у игры.

Управление видеорежимами в ядре (Kernel Mode-Setting, KMS) в играх.

Итак, что мы можем сделать? Я думал об этом и предлагаю кардинально решить проблему с играми в Linux: убрать оконную систему! Игры должны общаться с KMS напрямую, игры должны взаимодействовать с libinput (библиотека ввода, прим. перев.) напрямую. Давайте удалим все лишние прослойки, нам это не нужно, это только мешает игровой производительности.

Когда игра запустится в полноэкранном режиме, можно создать отдельную сессию на другом виртуальном терминале (tty) и предоставить управление этой сессией через logind. Это позволит игре открыть файлы для рендеринга и обработки ввода также, как это делает композитор Wayland. Рендеринг может быть осуществлён через EGL поверх DRM/GBM, также как в композиторе Wayland. Игра получит полный контроль над KMS. Нужно другое разрешение экрана? Без проблем, бери и выставляй. В режиме рабочего стола, это всегда проблематично (гораздо хуже в X11, но лучше в Wayland). Для игр в оконном режиме ничего не изменится, они так и будут запускаться в режиме рабочего стола. (Прим.перев. По сути автор предлагает давно известную концепцию «запуска в отдельных иксах», но лишённую кучи недостатков).

Конечно, это должно убрать все взаимодействия с окружением рабочего стола. Это то, что нужно рассматривать в первую очередь, например, как заставить, скажем, Mumble (программа для аудиоконференций, прим. перев.) работать с такой конфигурацией? Может игре нужно запускать собственный Wayland-сервер?

Это также сломает Alt+Tab (сворачивание игры, прим.перев.). Ну, не совсем, правда. Для X11, который захватывает клавиатуру в некоторых играх, Alt+Tab всё равно не работает, так что тут особо ничего не потеряешь. Но конечно, всегда можно будет переключиться через Ctrl+Alt+F1 в рабочую сессию. Игры также должны иметь общий путь для достижения этой цели, на мой взгляд.

Есть конечно ещё несколько вещей, которые ещё предстоит решить, например, как запустить отдельную сессию, как вернуться в рабочую сессию без необходимости разблокировать экран и т.д. Всё должно быть также хорошо, как на игровой консоли. Так что тут ещё есть над чем поработать, но я думаю, это лучше, чем пытаться заставлять хорошо работать игры в режиме рабочего стола, потому как это всё равно не будет работать лучше, чем на игровой консоли.

С каких пор композитинг стал узким местом? разница +-3 фпс на самых тяжёлых ааа тайтлах (особенно весело, когда фреймрейт с композитором получается выше и при этом нет тиринга). Это как-то не серьёзно. С X11 вообще нет проблем, с вейланд проблема — рабочей реализации (с поддержкой драйверами) всё ещё нет.

wakuwaku ★★★★ ()
Последнее исправление: wakuwaku (всего исправлений: 1)
Ответ на: комментарий от Sunderland93

Рекомендую kwin, за остальные не скажу. Кроме исключительных случаев нет сколько-нибудь значимой разницы. Ну и в той же венде точно такой же композитор, нет? И, более того, начиная где-то с 8 версии его в принципе не отключить и картинка всегда рендерится через него.

wakuwaku ★★★★ ()
Последнее исправление: wakuwaku (всего исправлений: 1)

Отличная статья, лишний раз объясняющая местным иксолюбам, что все современные возможности приклеены к доисторическим иксам высохшими соплями и работают через одно место.

Polugnom ★★★★★ ()
Ответ на: комментарий от wakuwaku

разница +-3 фпс на самых тяжёлых ааа тайтлах

Да ладно. GRID Autosport c одинаковыми настройками, винда - 95fps, линух - 60fps.

enso ★★★★★ ()
Ответ на: комментарий от enso

Там eON, сравнивайте нативные opengl приложения.

Кстати 60 подозрительно похоже на VSync.

wakuwaku ★★★★ ()
Последнее исправление: wakuwaku (всего исправлений: 1)
Ответ на: комментарий от wakuwaku

Так вот с KWin то же самое. Если не отрубить полноэкранный композитинг - производительность раза в 2 падает.

Ну и в той же венде точно такой же композитор, нет?

Без понятия, но в семёрке отключение Aero давало небольшой прирост производительности.

Sunderland93 ★★★★★ ()
Ответ на: комментарий от Sunderland93

Так вот с KWin то же самое. Если не отрубить полноэкранный композитинг - производительность раза в 2 падает.

А разве там по-умолчанию не отключен композитинг для полноэкранных окон?

Akamanah ★★★★★ ()
Ответ на: комментарий от Akamanah

А разве там по-умолчанию не отключен композитинг для полноэкранных окон?

Как в 5 плазме не знаю, а в 4 нужно ставить соответствующую галочку в настройках эффектов.

Sunderland93 ★★★★★ ()

предоставить управление этой сессией через logind

ненужно detected, презираю и осуждаю

haku ★★★★★ ()
Ответ на: комментарий от wakuwaku

разница +-3 фпс

разница не в fps а в input-output лагах, здорово наверное играть с задержкой управления в пол-секунды?

haku ★★★★★ ()
Ответ на: комментарий от Sunderland93

В пятой то же самое, по умолчанию галочка не стоит. Хотя может в каких-то дистрибутивах и стоит.

Deleted ()
Ответ на: комментарий от haku

Intel — дрова OK.

Nvidia — блоб OK (если не считать глюкодром в период перехода с одной версии X-сервера на другую), даже KMS и EGL пилят.

AMD — свободный драйвер ~OK, скоро будет только свободный с невеликой надстройкой в виде обрубка-Catalyst'а (а ещё Gallium позволяет использовать почти нативный D3D9 в Wine).

carasin ★★★★★ ()
Ответ на: комментарий от carasin

Так что смирись

с чего бы это вдруг? четвёртых кед лет на 5 ещё хватит, а там либо десктопный линукс окончательно скурвится и будет выброшен на помойку, либо системд закопают туда где ему самое место

haku ★★★★★ ()
Ответ на: комментарий от carasin

И где теперь KDE4?

У меня на раб. столе. А ваши эти пятые даже QtCurve не умеют. И запускаться в вяленый без системд тоже не могут. Нафига они вообще нужны такие?

haku ★★★★★ ()
Ответ на: комментарий от kravich

(aka блоб)

а ещё есть windos, и что? мы говорим о нормальных дровах под нормальной лицензией, блобы же удел геев-проприерастов

haku ★★★★★ ()
Ответ на: комментарий от haku

А ваши эти пятые даже QtCurve не умеют.

Умеют, я спокойно использую. Впрочем, не продолжайте

а ещё есть windos, и что? мы говорим о нормальных дровах под нормальной лицензией, блобы же удел геев-проприерастов

я уже понял, что вы красноглазый неадекват :DD

Deleted ()
Ответ на: комментарий от haku

а ещё есть windos, и что?

Верно, есть. И окромя проприетарной лицензии, она еще и дорого стоит и недружелюбна в использовании для более-менее технически подкованного пользователя.

мы говорим о нормальных дровах под нормальной лицензией

Блоб, хоть и под проприетарной лицензией, доступен бесплатно для владельцев железки и нормально работает (за исключением некоторых острых углов).

Кроме вопросов свободы программного обеспечения, есть еще много других аспектов, которые также нужно учитывать. Хотя что использовать - конечно же, личное дело каждого.

kravich ★★★★ ()
Ответ на: комментарий от kravich

доступен бесплатно

«бесплатно» не равно «свободно», уж на этом сайте должны бы понимать это и без подсказок, а раз не свободно то о какой нормальности (в контексте свободных ОС) можно говорить? изначально я утверждал что нормальных дров нет, и, де-факто, их нет

с таким же успехом можно утверждать «а на венде то летает!», но разве это аргумент?

haku ★★★★★ ()
Ответ на: комментарий от haku

«бесплатно» не равно «свободно»

И где я ставил равенство между этими двумя различными понятиями?
Все, что я хочу сказать - неправильно ставить знак равенства между «проприетарным» и «плохим», нужно учитывать и другие аспекты. Хотя «свободность» - это дополнительный плюс в пользу такого ПО

kravich ★★★★ ()
Ответ на: комментарий от Deleted

использую вяленого постоянно, правда пока с 3 гномом, работает прекрасно, гораздо лучше иксов, если переносить на плазму изображение то в 100 раз лучше чем было в иксах.

erzentdd ()
Ответ на: комментарий от tailgunner

видео даже в 2К, на иксах бывали тормоза, когда половина экрана не поспевала за второй, или тормозила, изображение чётче и более плавное, ощущение вообще, будто в иксах изображения выше 1080 нет вообще.

erzentdd ()

Угу, давайте отключим композитинг и вообще вынесем игру на другой экран, а пока мы будем переключаться между виртуальными консолями, чтобы прочитать что-нибудь в браузере или сменить канал в тимспике, прилетят нейтралы и всех поубивают.

INFOMAN ★★★★★ ()
Ответ на: комментарий от erzentdd

изображение то в 100 раз лучше чем было в иксах

Пиксели четче и ярче, да?

видео даже в 2К [...] изображение чётче

Блин, у тебя же реально гречневая^Wрисовая каша вместо мозга. Можешь не отвечать.

tailgunner ★★★★★ ()
Ответ на: комментарий от Deleted

Если иксы такие все из себя нужные, то почему в самой популярной UNIX-like OS — OS X используется такая же затычка XQuartz, как XWayland в Wayland?

EXL ★★★★★ ()
Ответ на: комментарий от INFOMAN

Угу, давайте отключим композитинг и вообще вынесем игру на другой экран

Серьезно, вынос игры на отдельный VT выглядит как костыль.

kravich ★★★★ ()

Итак, что мы можем сделать? Я думал об этом и предлагаю кардинально решить проблему с играми в Linux: убрать оконную систему! Игры должны общаться с KMS напрямую, игры должны взаимодействовать с libinput (библиотека ввода, прим. перев.) напрямую. Давайте удалим все лишние прослойки, нам это не нужно, это только мешает игровой производительности.

Как человек, играющий только в окне, я дико с этим не согласен.

AITap ★★★★★ ()

Пост-то не про Wayland/X11. Пост про то, что чувак предлагает пускать игры в обход и X11, и Wayland, то есть вообще серверов. Этому как раз и посвящена его четвертая часть.

Zubok ★★★★★ ()
Ответ на: комментарий от Sunderland93

Можно попробовать поставить xfce+compton. Лично я пользуюсь именно такой конфигурацией на Debian 9, проседаний в играх (если они хорошо оптимизированы, конечно) не замечал.

  • SOMA - тормозов на максимальных настройках нет.
  • Alien: Isolation - есть тормоза со включенным параметром SSAO
  • Source-игры - нет проседаний, за исключением тех случаев, когда разработчики ломают оптимизацию с новыми обновлениями, типа как в CS:GO или TF2 (в dota2 не играю, не знаю что там).
  • Dying Light - отвратительная оптимизация, из-за чего я вынужден был запускать её на минимальных настройках, и она все-равно иногда тормозит.

Это лишь несколько примеров. Compton включен всегда, проблем не наблюдаю (хотя вот в Mark of The Ninja есть тиринг и иногда проседает fps, что очень странно для 2D-игры).

Возможно, я неправильно понял суть, но мысли вот такие.

Еще хочу попробовать Saints Row IV, посмотреть как оно там будет работать.

tekk ★★★★★ ()
Ответ на: комментарий от haku

Учи матчасть.

А ваши эти пятые даже QtCurve не умеют.

Если QtCurve не умеет Qt5, то это разработчики QtCurve забили на поддержку Qt5 (и GTK3 в своё время), а не наоборот.

И запускаться в вяленый без системд тоже не могут.

Это сделано специально, ибо это верный путь. Собственно, X'овая сессия KDE5 может работать без logind исключительно с целью обратной совместимости, не более.

Нафига они вообще нужны такие?

Ну да, слакварщикам и прочим маргиналам не понять.

carasin ★★★★★ ()
Последнее исправление: carasin (всего исправлений: 2)
Ответ на: комментарий от tailgunner

раньше было ощущение, что открывая видео 1080 в линуксе, оно как 480 на винде, сейчас тоже самое только 2K при иксах выглядит значительно хуже чем при вяленом. Особенно если в фильме много спецэффектов, иксах бывают даже расслоения картинки.

erzentdd ()
Ответ на: комментарий от carasin

а я месяц мучая разрабов вайланде в фодоре, наконец уже 4 дня как получил обнову, что теперь даже в gt5 приложениях нормально работает раскладка ^_^, правда пока всё равно сижу в 3 гноме, в принципе уже к нему привык, осталось только смену раскладки сделать удобно, но пока лень гном-твик осваивать.

erzentdd ()
Ответ на: комментарий от carasin

я просто несколько тем на лоре прочитал, как там раскладку на кнопку супер переводили, и чтот понял, что мне лень осваивать это. хочу альт+шифт сменить на «win» либо pgdn. Но чтот читая темы на 2 форумах, я там только ужасы видел на 5-6 страниц.

erzentdd ()
Ответ на: комментарий от carasin

Это сделано специально, ибо это верный путь.

Расскажи ка нам, как и почему kde5 on wayland без systemd это неверный путь и какие это такие профиты даёт systemd для kde5 что без него DE не работает?

haku ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.