backend/drm: always create multigpu renderers

Multi-gpu code needs a context for each GPU in the system, but as
of now we only create renderers for secondary devices. This always
creates the multigpu renderer so we can use it for copying.
This commit is contained in:
Austin Shafer 2024-02-01 17:55:04 -05:00
parent 2f3ea4590a
commit 5a388b4a90

View file

@ -53,9 +53,7 @@ static void backend_destroy(struct wlr_backend *backend) {
wl_list_remove(&drm->dev_change.link); wl_list_remove(&drm->dev_change.link);
wl_list_remove(&drm->dev_remove.link); wl_list_remove(&drm->dev_remove.link);
if (drm->parent) {
finish_drm_renderer(&drm->mgpu_renderer); finish_drm_renderer(&drm->mgpu_renderer);
}
finish_drm_resources(drm); finish_drm_resources(drm);
@ -224,7 +222,6 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
goto error_event; goto error_event;
} }
if (drm->parent) {
if (!init_drm_renderer(drm, &drm->mgpu_renderer)) { if (!init_drm_renderer(drm, &drm->mgpu_renderer)) {
wlr_log(WLR_ERROR, "Failed to initialize renderer"); wlr_log(WLR_ERROR, "Failed to initialize renderer");
goto error_resources; goto error_resources;
@ -235,11 +232,10 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
struct wlr_renderer *renderer = drm->mgpu_renderer.wlr_rend; struct wlr_renderer *renderer = drm->mgpu_renderer.wlr_rend;
const struct wlr_drm_format_set *texture_formats = const struct wlr_drm_format_set *texture_formats =
wlr_renderer_get_dmabuf_texture_formats(renderer); wlr_renderer_get_dmabuf_texture_formats(renderer);
if (texture_formats == NULL) { // Some configurations (alpine CI job) will have a renderer here that does not
wlr_log(WLR_ERROR, "Failed to query renderer texture formats"); // support dmabuf formats. We don't want to fail creation of the drm backend
goto error_mgpu_renderer; // as a result of this, we simply don't populate the format set in that case.
} if (texture_formats) {
// Forbid implicit modifiers, because their meaning changes from one // Forbid implicit modifiers, because their meaning changes from one
// GPU to another. // GPU to another.
for (size_t i = 0; i < texture_formats->len; i++) { for (size_t i = 0; i < texture_formats->len; i++) {
@ -259,8 +255,6 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
return &drm->backend; return &drm->backend;
error_mgpu_renderer:
finish_drm_renderer(&drm->mgpu_renderer);
error_resources: error_resources:
finish_drm_resources(drm); finish_drm_resources(drm);
error_event: error_event: