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
This commit is contained in:
parent
741da702bc
commit
b89bcffea4
|
@ -143,7 +143,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]);
|
||||
}
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue