LINUX.ORG.RU

Weston. Список реализованных протоколов.

 ,


1

1

Пытаюсь разобраться с Wayland/Weston.

Начал с того, что прочитал https://wayland.freedesktop.org/docs/html/

Потом начал смотреть все доступные расширения протокола: стабильные ( https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/master/stable ) и нестабильные ( https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/master/unstab... ).

А потом неожиданно наткнулся на https://cgit.freedesktop.org/mesa/mesa/tree/src/egl/wayland/wayland-drm/wayla... , которого нет на https://gitlab.freedesktop.org/wayland/wayland-protocols/

Собственно вопросы:

1. Как посмотреть список всех протоколов, реализованных для конкретного wayland-композитора не запуская его? Можно на примере weston https://gitlab.freedesktop.org/wayland/weston

2. Есть ли у wayland-тусовочки какой-то IRQ/Discord/etc. где можно пообщаться с ними online?

**Update#1**

* Найти все глобальные интерфейсы можно через поиск вызова функции `wl_global_create` (спасибо @arrecck). Вопрос про неглобальные интерфейсы остальных протоколов все еще не решен.

* Чатик вроде как тут https://webchat.freenode.net/ > #freedesktop , но в информации о канале со всеми вопросами предлагают обращатся в xdg@lists.freedesktop.org

P.S. Если где-то в терминах плаваю - не стесняйтесь «поправлять» в комментариях. Я в этой теме совсем недавно.

★★★★★

Ответ на: комментарий от trex6

Для регистрации нового протокола в коде нужно:

  1. Создать структуру wl_interface. Добавляется имя, методы и тд.
  2. Добавить интерфейс (как глобальный объект) в регистр объектов через wl_global_create. Теперь когда клиент запросит wl_registry, в нем будет список всех доступных расширений.

Грепнуть исходники на wl_global самый простой вариант. Второй параметр в вызове wl_global_create это имя интерфейса. Само описание протокола либо в xml, либо в сишной структуре.

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

К сожалению я так и не нашел каким образом подключается https://cgit.freedesktop.org/mesa/mesa/tree/src/egl/wayland/wayland-drm/wayla...

Я правильно понимаю, что wl_drm интерфейс не регистрируется как глобальный, но при этом реализован в weston?

В описании интерфейса нашел вот такое:

This object is created by the server and published using the display's global event.

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

вместо него используется linux-dmabuf (здесь ./weston/libweston/linux-dmabuf.c). В композиторе, как будет устроен wl_display и работа с буферами(поверхностями), оставлено на откуп разработчика. Может вообще не быть drm, а реализация поверх x11 window. linux-dmabuf не кроссплатформенно, а wl-drm привязано к mesa.

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

Я тут раскопал, что этот интерфейс специально создан для совместимости с EGL. Там вокруг интеграции wayland и EGL - один сплошной хак (в том смысле, что парни из freedesktop просто запилили себе конкретную реализацию безо всяких протоколов). Для этого есть достойное оправдание - не хотели городить лишних (дорогих по времени) межпроцессорных round trip-ов.

Подробности есть в документации и немного вот тут https://lists.freedesktop.org/archives/wayland-devel/2020-September/041620.html

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