aboutsummaryrefslogtreecommitdiff
path: root/render/egl.c
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-02-23 11:41:47 +0100
committerSimon Ser <contact@emersion.fr>2021-03-27 11:23:32 +0100
commitb89bcffea4fccdf4727f65b58576ba05903daa75 (patch)
treef4a1d34466f41fc5e1ba4a8227b3c1de127b9e3d /render/egl.c
parent741da702bcc9a40f6c471560b86e20303f981133 (diff)
render/egl, backend/wayland: add workaround for split render/display setups
Split render/display setups have two separate devices: one display-only with a primary node, and one render-only with a render node. However in these cases the EGL implementation and the Wayland compositor will advertise the display device instead of the render device [1]. The EGL implementation will magically open the render device when the display device is passed in. So just pass the display device as if it were a render device. Maybe in the future Mesa will advertise the render device instead and we'll be able to remove this workaround. [1]: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4178
Diffstat (limited to 'render/egl.c')
-rw-r--r--render/egl.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/render/egl.c b/render/egl.c
index e42529e9..0a20a696 100644
--- a/render/egl.c
+++ b/render/egl.c
@@ -766,7 +766,12 @@ static char *get_render_name(const char *name) {
if (match == NULL) {
wlr_log(WLR_ERROR, "Cannot find DRM device %s", name);
} else if (!(match->available_nodes & (1 << DRM_NODE_RENDER))) {
- wlr_log(WLR_ERROR, "DRM device %s has no render node", name);
+ // Likely a split display/render setup. Pick the primary node and hope
+ // Mesa will open the right render node under-the-hood.
+ wlr_log(WLR_DEBUG, "DRM device %s has no render node, "
+ "falling back to primary node", name);
+ assert(match->available_nodes & (1 << DRM_NODE_PRIMARY));
+ render_name = strdup(match->nodes[DRM_NODE_PRIMARY]);
} else {
render_name = strdup(match->nodes[DRM_NODE_RENDER]);
}