Merge branch 'match-platform-device' into 'master'

Draft: render: open platform device render node

See merge request wlroots/wlroots!4372
This commit is contained in:
Simon Ser 2023-11-19 18:44:40 +00:00
commit e6d9aa5d62
8 changed files with 133 additions and 130 deletions

View file

@ -214,15 +214,13 @@ struct wlr_drm *wlr_drm_create(struct wl_display *display,
return NULL;
}
char *node_name = NULL;
if (dev->available_nodes & (1 << DRM_NODE_RENDER)) {
node_name = strdup(dev->nodes[DRM_NODE_RENDER]);
} else {
assert(dev->available_nodes & (1 << DRM_NODE_PRIMARY));
wlr_log(WLR_DEBUG, "No DRM render node available, "
"falling back to primary node '%s'", dev->nodes[DRM_NODE_PRIMARY]);
node_name = strdup(dev->nodes[DRM_NODE_PRIMARY]);
if (!(dev->available_nodes & (1 << DRM_NODE_RENDER))) {
wlr_log(WLR_DEBUG, "No DRM render node available");
drmFreeDevice(&dev);
return NULL;
}
char *node_name = strdup(dev->nodes[DRM_NODE_RENDER]);
drmFreeDevice(&dev);
if (node_name == NULL) {
return NULL;

View file

@ -884,24 +884,20 @@ static bool set_default_feedback(struct wlr_linux_dmabuf_v1 *linux_dmabuf,
goto error_compiled;
}
const char *name = NULL;
if (device->available_nodes & (1 << DRM_NODE_RENDER)) {
name = device->nodes[DRM_NODE_RENDER];
} else {
// Likely a split display/render setup
assert(device->available_nodes & (1 << DRM_NODE_PRIMARY));
name = device->nodes[DRM_NODE_PRIMARY];
wlr_log(WLR_DEBUG, "DRM device %s has no render node, "
"falling back to primary node", name);
}
int main_device_fd = open(name, O_RDWR | O_CLOEXEC);
drmFreeDevice(&device);
if (main_device_fd < 0) {
wlr_log_errno(WLR_ERROR, "Failed to open DRM device %s", name);
if (!(device->available_nodes & (1 << DRM_NODE_RENDER))) {
wlr_log(WLR_DEBUG, "DRM device has no render node");
goto error_compiled;
}
const char *name = device->nodes[DRM_NODE_RENDER];
int main_device_fd = open(name, O_RDWR | O_CLOEXEC);
if (main_device_fd < 0) {
wlr_log_errno(WLR_ERROR, "Failed to open DRM device %s", name);
drmFreeDevice(&device);
goto error_compiled;
}
drmFreeDevice(&device);
size_t tranches_len =
feedback->tranches.size / sizeof(struct wlr_linux_dmabuf_feedback_v1_tranche);
const struct wlr_linux_dmabuf_feedback_v1_tranche *tranches = feedback->tranches.data;