WIP: Initial dmabuf hints support
WIP because it relies on wayland-protocols!8 (merged).
It also assumes primary_device
sends a string of ID_PATH_TAG
, rather than a file descriptor. See wayland-protocols#10 (closed).
struct weston_hint
A basic container type for hints, which contains a device and some formats (see below). A compositor-wide default hints exists, and well as one per surface. This PR currently only sets default hints, and no per-surface hints are currently sent.
struct weston_format
This is a type that is just a format+modifier pair that also has a preference associated with it, which becomes the dmabuf-hint tranches. Currently only the renderer sets these formats, and everything ends up as the same priority. Future work would be to modify the DRM backend (and possibly others) to add formats that could be scanned out as a higher priority than the renderer formats.
A possible priority could be
- Formats than can be scanned out
- Formats that the driver supports natively (
eglQueryDmaBufFormatsEXT
) - Formats that weston has a renderer fallback for (e.g. some of the YUV formats)
The implementation is fairly basic. I don't know if something more elaborate is wanted/required.
This is somewhat redundant with the query_dmabuf_formats
and query_dmabuf_modifiers
renderer functions which also gets used by linux-dmabuf. Perhaps we want to change the normal format/modifier event to use this new format and deprecate/remove these functions.
EGL devices
This makes use of EGL_EXT_device_drm to get the DRM device, and works across all backends that the GL renderer supports. This takes some commits from !348 (closed).
weston-simple-dmabuf-egl
This was updated to now use dmabuf-hints to select its rendering device, and adds libudev as a new dependency for it. It doesn't make use of any format hints yet.