LINUX.ORG.RU

Нужно чинить иксы

 , , , ,


5

5

X11 robustness: DRI3 без аппаратного ускорения (комментарий)

Сабж

Судя по всему последний раз проблема поднималась в 2018, потом все как-то забыли - да и решения там были весьма сомнительные предлагались - копмозитинг предлагается вынести в иксы, тем самым прибив модульность

В общем, без композитинга всё работает как надо, present через damage вызывает fbCopyNtoN на экранную поверхность, present отрабатывает, пусть и с тирингом.

С композитингом же всё сильно хуже - present делает такое же копирование, но в поверхность окна, для которой работает composite redirect.

Без изменений в композиторе ничего сделать не выйдет - сейчас в протоколе composite композитор получает пиксмапу окна и ожидает что после damage event в ней будут актуальные данные. Это совершенно несовместимос с подходом dri3/present, который привязвает несколько пиксмап к окну и требует лишнего копирования.

Изначальная идея в present предполагала отправлять Notify в композитор. Вероятно от неё отказались т.к это неэффективно - иксы здесь занимаются перессылкой событий и fence между процессами.

В здесь целом напрашивается получение дескриптора для отправки событий композитору напрямую, но это тоже выглядит как какой-то костыль. Но в принципе, dri3 передаёт файловые дескрипторы текстур - почему он не может так же передавать дескрипторы некоего канала с композитором? Звучит как вполне разумное решение, которое будет полезно и для xwayland т.к можно будет передать контроль wayland-композитору напрямую, минуя процесс Xwayland

VK_KHR_swapchain помимо fence оперирует с семафорами. Может можно вообще timeline semaphore задействовать? Но в любом случае надо как-то передавать индекс буфера. Расширение протокола позволит задействовать все возможности Vulkan при условии поддержки композитором. Так же vulkan’овые объекты доступны и в opengl

В общем интересно, остались ли тут разбирающиеся в устройстве иксов и vulkan люди, может кто-нибудь может подкинуть идеи

Возможная идея, что можно пересылать в композитор: https://github.com/notpeelz/monado/blob/main/src/xrt/ipc/client/ipc_client_compositor.c#L737 (freedesktop gitlab опять лежит) Здесь есть 2 варианта функции - с семафорой (включая timeline) и просто с fence. Причём создаётся семафора довольно просто - в vulkan queue отправляется пустой Submit с семафорой, которая ожидается уже другим процессом. То есть даже какая-то дополнительная поддержка со стороны приложения не нужна - дальше вся синхронизация присходит прямо в gpu.

P.S дополнение, всем фанатам и просто пользователям Вяленного, набежавишим в тред. Современный графический стек, предполагающий на каждый чих использовать opengl на клиенте немного несовместим с современными GPU, которые могут потерять все контексты в любой момент на любой чих в шейдере в любом приоложении. И даже если сделать перезапуск композитора с переподключением - это нифига не поможет от падения всего десктопного софта, который вынужден рисоваться через opengl. Почему-то на windows есть GDI и там нет этой проблемы. В иксах же есть свой аналог GDI и потенциальная возможность свести все эти отказы к единой точке, которую устранить. Достаточно избавиться от glamor в сервере, можно даже попытаться переписать его на vulkan, добавив обработку потери контекста. Я сейчас категорически не могу рассматривать рендеринг всех десктопных приложений на клиентах через opengl т.к это создаёт огромные неудобства при gpu reset. Да, можно сделать софтовый wayland композитор и нечто похожее на мой костыльный патч в modesetting, но нормально решить проблему потери контекстов просто нельзя - в архитектуре это просто не предусмотренно. Так что можно хвалить wayland, он прекрасно справляется с медиазадачами вроде 3д десктопа в виртуальной реальности, но превращается в тыкву, когда GPU не может работать

★★★★★

Последнее исправление: mittorn (всего исправлений: 5)
Ответ на: комментарий от Skullnet

Может быть надо было ещё «Accel» «on» и «AccelMethod» «sna»? Или у тебя gpu слишком новый и драйвер intel не может включить ускорение? У меня даже на старой системе с ivybridge dxvk работал, пусть и большинство игр не могли создать текстуры.

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

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

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

Получаем в результате калейдоскоп из самопальных серверов с вечной разработкой и фрагментацией.

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

anonymous
()
Ответ на: комментарий от mittorn

Может быть надо было ещё «Accel» «on» и «AccelMethod» «sna»?

Всё это тоже пробовал, но к DRI3 это по факту мало относится.

ли у тебя gpu слишком новый и драйвер intel не может включить ускорение?

Где-то 2018 года процессор. В любом случае, на драйвера, кроме modesetting разработчики забили.

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

В общем смотри в логи иксов, твой хейт в сторону dri3 не понятен. И кстати, dri3 можно реализовать везде где есть dri2 и работает GEM_OPEN и PRIME_HANDLE_TO_FD, просто некоторые драйвера уже заброшены и некому это сделать. Статья по ссылке из ОП-поста - отличный пример как этот самый dri3 делается буквально из ничего. А у тебя видимо был какой-то неправильный intel драйвер, т.к в драйвере intel dri3 появисля ещё в 2016, возможно даже раньше modesetting - ведь dri3 изначально интелом и делался

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

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

По твоей логике, Wayland - такое же сишное говно, только из этого века.

Но горстка совсем упоротых уже мёртвый продукт не починят.

Починят и тебя даже спрашивать не будут.

Это эволюция в условиях распределенной разработки

«It’s evolving, just backwards.»

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

не перенесли, api ядерного драйвера очень ограничено и без сложного юзерспейсного драйвера ты можешь сделать примерно ничего, даже текстуру прочитать не выйдет. Потому wayland без gbm превращается в тыкву даже на уровне протокола

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

С разными dpi у wayland конечно есть преимещества - например окно может одновременно рисоваться под 2 вывода с разными dpi и композитор это обработает

Как он обработает? На одном из мониторов окно будет мытое или наоборот уменьшенное?

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

не вникал в подробности, но вроде как свежий gtk рендерит 2 текстуры окна под разные плотности экрана и сделать такое на иксах без сильнейших костылей не выйдет

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

хотелось бы мне посмотреть на реализацию opengl/vulkan, читающую текстуры, аллоцированных через GBM, без gbm. Не линейных, а любых конечно же. Сейчас даже импорт gbm’овой текстуры в vulkan проблема т.к gbm может отдать modifier, не поддерживаемый vulkan драйвером (и зачастую равный (uint64)-1) В реализацию opengl, не использующую gbm текстуру из gbm в принципе импортировать невозможно - с этим возможно сталкивались те, кто использовал иксовый драйвер от amdgpu-pro и получал полосы вместо изображения в приложениях на свободном драйвере.

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

И да, в Линуксе GBM – это технически дополнительный интерфейс, реализуемый драйверами OpenGL из состава Mesa. Что-то отдельное это только в Android, но у них и так свой аналог есть.

У тех, кто использует Zink, GBM полностью реализован через Vulkan.

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

Wayland - такое же сишное говно

Wayland - это, в отличие от иксов, протокол. В каждом Wayland-композитере (можно и не на Си писать) своя реализация поддержки этого протокола.

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

На швабодном десктопе вечно так - что-то отдельно взятое нормально работает в каком-нибудь де/вм/дисп. сервере.

Не юзать же Е теперь…
Енлайтмент и без безумия в одном предложении само по себе забавно)

А это как раз должно быть силой опесурса - можно толпой людей пилить каждый свою фичу в рамках одного продукта… Вместо этого (в тч из-за того что в иксах не было навязанного раб стола и даже тулкита), все пилят свой ДЕ/ВМ… Теперь ещё и ДС.

anonymous
()
Ответ на: комментарий от saahriktu

В каждом Wayland-композитере (можно и не на Си писать) своя реализация поддержки этого протокола.

На практике всё же часто используют «сишное говно» вроде того же wlroots. Не уверен, что вообще есть какие-то полноценные реализации, кроме Mutter, Kwin и wlroots. Ну, Weston как некий референс ещё.

anonymous
()
Ответ на: комментарий от X512

если уже выводишь на экран из вулкана, остальное выделять будешь из него же, ну

И оно довольно сырое

не мешай набрасывать, жду не дождусь когда opengl и прочее будут выкорчёвывать из кишок системы

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

А это как раз должно быть силой опесурса - можно толпой людей пилить каждый свою фичу в рамках одного продукта…

Реальность показывает, что это сила корпораций, когда толпа людей пилит бесплатно фичи в коммерческом продукте.

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

Ты ни.уя не понял. Иди уроки делай.

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

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

Да.

Но если бы в попенсурсе работало так как надо, корпорастические аналоги общеупотребительного софта (типа ДЕ) не шмогли бы конкурировать с таковым, пилищемся огромным кол-вом народу.

А так, я всё надеюсь дожить до фридесктопа по стабильности, скорости, нежручести доросшего до классического (без говноАеро) вида Семерочки (или где там была последняя версия его).

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

в ядре реализована функция копирования буфферов на amdgpu через sdma. В mesa реализована функция копирования буффера через sdma. Но в ядерном API её нет. Почему бы не вытащить столь полезные функции в ядерное API, чтобы приложения могли копировать buffer object’ы без тяжёлых и тормозных opengl/vulkan?

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

У вулкана обычно в списке поддерживаемых модифаеров 3.5 инвалида, а gbm вместо modifier выдаёт -1, если она не была создана с явным указанием modifier. vulkan не имеет -1 в списке поддерживаемых модифаеров. На некоторых реализациях фулкана импорт -1 срабатывает (т.к они сделаны поверх gbm), но это полностью нарушает стандарт и не проходит валидацию. В общем на практике, ничего не работает в реализациях не использующих тот же самый gbm, в котором текстура была аллоцирована. Приходите в то отделение, в котором вам эту текстуру выпустили XD

Да, modifier должны решить проблему, но пока что они только во влажных мечтах её решают

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

Да, знаю. Основная проблема здесь что GBM это эдакий чёрный ящик и нет гарантии совместимости его между драйверами - то, что выделено и экспортировано через gbm импортировать можно только в совместимом с ним gbm. modifier это попытка решить эту проблему, заменив непрозрачный gbm_bo на непрозрачный dmabuf с непрозрачным modifier. Непрозрачный потому что без какой-то совместимой с этим dmabuf и modifier реализации опять же ничего сделать нельзя. Исключение - dumb buffer’ы, которые можно замаппить. Кстати, vulkan - прекрасная замена gbm, но он не модульный и раздувается до огрмоных размеров. Я недавно сравнивал время загрузки radv 2021 года и актуального - разница примерно в 5 раз. Использовать монстра, реализующего растеризацию, рейтрейсинг, видеоенкодинг/декодинг лишь для аллокации буфферов - огромный оверкилл

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

Интересно, если удалить этот наброс (вот уж от кого не ожидал…) и все ответы на него, в теме останется хоть один комментарий?

Человек же в заголовке написал, что вопрос по иксам, и поставил соответствующий тег. Нет, набежали фанбои, замусорили тему.

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

У вулкана обычно в списке поддерживаемых модифаеров 3.5 инвалида

О каком железе речь? Intel? Amdgpu? Nouveau?

На некоторых реализациях фулкана импорт -1 срабатывает (т.к они сделаны поверх gbm)

Vulkan никогда не работает поверх GBM. Бывает только наоборот. У Vulkan свои драйверы, не зависящие от фреймворка DRI.

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

intel и amdgpu, на nouveau я пока не видел вулкана. Я пытался импортировать текстуру из composite и получал -1 вместо modifier. vulkan ничего не может с этим сделать - одни gpu это сжирают, другие зависают, но его нет в списке и по стандарту я его не могу использовать с vulkan

vulkan вероятно поверх gbm не работает (как минимум потому что gbm не умеет нужный функционал), но вполне может шарить с ним код (конечно не тот, который в dri фреймворке, а общий). Но в любом случае реализация должна как-то договариваться о том, как будет отдаваться текстура из swapchain в композитор, который вероятнее всего будет работать через drm, а вот в обратную сторону оно не может работать. Это кстати возможно одна из причин, почему реализации vulkan не работают поверх dri2 - нет стандартного способа импортировать dri2 буфферы в вулкан - это нужна специальная поддержка в драйвере.

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

Я правильно понимаю, что оно работает через DisplayLink? Если так, то нечего покупать дефектное с рождения говно.

UPD: почитал руководство, type-a с убожеством DisplayLink там похоже только для луддитов без нормальных type-c с DisplayPort. Чтд, ноуту без type-c место там же.

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

Чел, выйди уже наконец из криокамеры и взгляни на мир реальными глазами. Заодно траву потрогай. Никто сейчас не вкладывается в иксы как таковые, только если это не Xwayland и не XWM в Wayland композиторах. Потому твое «Нужно чинить иксы» выглядит не более чем клоунада, провокация. Также как «Нужно форкнуть systemd». Ты просто рискуешь остаться с описанной тобой проблемой наедине, потому тебе путь только в профильные форумы, чаты и тд, где сидят такие же как ты, не принимающие суровую действительность.

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

Ты починишь одну реализацию, а остальные останутся сломанными

Пусть этим заморачиваются разработчики конкретной реализации. Это их проблемы и только. Есть стандартные протоколы. Есть библиотеки-абстракции, по типу wlroots. Каждый занят своим. Зачем мне к примеру чинить что-то в Mutter если я пользуюсь Kwin? Вполне здравая логика. А подход иксов уже доказал, что один дисплейный сервер на всех - путь в никуда. Один фиг все пришлось переносить в клиенты.

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

один дисплейный сервер на всех

Причём это не спасло от зоопарка реализаций клиентской части разной степени полноты и корректности. Так что профит совсем неясен.

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

Чем лор не профильный форум? В холиварах тут вполне участвуют как сторонники вяленного, так и иксов. Конечно я предполагал, что в треде начнётся холивар. Но тред создавался всё же скорее для поиска единомышленников, которые могут подкинуть идею. Так то я костыль могу вкорячить за вечер, чтобы иксы в конфигурации из статьи проц не жрали хотя бы. Но нормальное решение же потребует какой-то отдельный комплексный канал синхронизации, иначе картинка на экране будет не плавной, либо с задержкой

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

Я не копал, там было переключение 3D ускорения только на opengl программу не зависимо от того, fullscreen или нет. Знаю только, что 2D окна ускоряются отлично и в открытых, и pro драйверах безо всякого композитора, а с композитором в открытых драйверах в окне 3D тормозит, а в про - как без композитора в открытых. Я не программист иксов, я хардкорный юзер

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