From 4b03bdc3ab0cb1a0296c4d48b125f15a07ca99bd Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 19 Dec 2020 11:34:28 +0100 Subject: [PATCH] Remove wlr_create_renderer_func_t This callback allowed compositors to customize the EGL config used by the renderer. However with renderer v6 EGL configs aren't used anymore. Instead, buffers are allocated via GBM and GL FBOs are rendered to. So customizing the EGL config is a no-op. --- backend/backend.c | 42 +++++++++++++++------------------- backend/drm/backend.c | 5 ++-- backend/drm/renderer.c | 8 ++----- backend/headless/backend.c | 9 ++------ backend/wayland/backend.c | 8 ++----- backend/x11/backend.c | 9 ++------ examples/fullscreen-shell.c | 2 +- examples/multi-pointer.c | 2 +- examples/output-layout.c | 2 +- examples/pointer.c | 2 +- examples/rotation.c | 2 +- examples/simple.c | 2 +- examples/tablet.c | 2 +- examples/touch.c | 2 +- include/backend/drm/renderer.h | 2 +- include/wlr/backend.h | 10 +------- include/wlr/backend/drm.h | 3 +-- include/wlr/backend/headless.h | 3 +-- include/wlr/backend/wayland.h | 2 +- include/wlr/backend/x11.h | 2 +- 20 files changed, 43 insertions(+), 76 deletions(-) diff --git a/backend/backend.c b/backend/backend.c index 7df1cfbdb..8163e2039 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -87,9 +87,8 @@ static size_t parse_outputs_env(const char *name) { return outputs; } -static struct wlr_backend *attempt_wl_backend(struct wl_display *display, - wlr_renderer_create_func_t create_renderer_func) { - struct wlr_backend *backend = wlr_wl_backend_create(display, NULL, create_renderer_func); +static struct wlr_backend *attempt_wl_backend(struct wl_display *display) { + struct wlr_backend *backend = wlr_wl_backend_create(display, NULL); if (backend == NULL) { return NULL; } @@ -104,8 +103,8 @@ static struct wlr_backend *attempt_wl_backend(struct wl_display *display, #if WLR_HAS_X11_BACKEND static struct wlr_backend *attempt_x11_backend(struct wl_display *display, - const char *x11_display, wlr_renderer_create_func_t create_renderer_func) { - struct wlr_backend *backend = wlr_x11_backend_create(display, x11_display, create_renderer_func); + const char *x11_display) { + struct wlr_backend *backend = wlr_x11_backend_create(display, x11_display); if (backend == NULL) { return NULL; } @@ -120,8 +119,8 @@ static struct wlr_backend *attempt_x11_backend(struct wl_display *display, #endif static struct wlr_backend *attempt_headless_backend( - struct wl_display *display, wlr_renderer_create_func_t create_renderer_func) { - struct wlr_backend *backend = wlr_headless_backend_create(display, create_renderer_func); + struct wl_display *display) { + struct wlr_backend *backend = wlr_headless_backend_create(display); if (backend == NULL) { return NULL; } @@ -149,8 +148,7 @@ static struct wlr_backend *attempt_noop_backend(struct wl_display *display) { } static struct wlr_backend *attempt_drm_backend(struct wl_display *display, - struct wlr_backend *backend, struct wlr_session *session, - wlr_renderer_create_func_t create_renderer_func) { + struct wlr_backend *backend, struct wlr_session *session) { struct wlr_device *gpus[8]; size_t num_gpus = wlr_session_find_gpus(session, 8, gpus); struct wlr_backend *primary_drm = NULL; @@ -158,7 +156,7 @@ static struct wlr_backend *attempt_drm_backend(struct wl_display *display, for (size_t i = 0; i < num_gpus; ++i) { struct wlr_backend *drm = wlr_drm_backend_create(display, session, - gpus[i], primary_drm, create_renderer_func); + gpus[i], primary_drm); if (!drm) { wlr_log(WLR_ERROR, "Failed to create DRM backend"); continue; @@ -176,15 +174,15 @@ static struct wlr_backend *attempt_drm_backend(struct wl_display *display, static struct wlr_backend *attempt_backend_by_name(struct wl_display *display, struct wlr_backend *backend, struct wlr_session **session, - const char *name, wlr_renderer_create_func_t create_renderer_func) { + const char *name) { if (strcmp(name, "wayland") == 0) { - return attempt_wl_backend(display, create_renderer_func); + return attempt_wl_backend(display); #if WLR_HAS_X11_BACKEND } else if (strcmp(name, "x11") == 0) { - return attempt_x11_backend(display, NULL, create_renderer_func); + return attempt_x11_backend(display, NULL); #endif } else if (strcmp(name, "headless") == 0) { - return attempt_headless_backend(display, create_renderer_func); + return attempt_headless_backend(display); } else if (strcmp(name, "noop") == 0) { return attempt_noop_backend(display); } else if (strcmp(name, "drm") == 0 || strcmp(name, "libinput") == 0) { @@ -200,7 +198,7 @@ static struct wlr_backend *attempt_backend_by_name(struct wl_display *display, if (strcmp(name, "libinput") == 0) { return wlr_libinput_backend_create(display, *session); } else { - return attempt_drm_backend(display, backend, *session, create_renderer_func); + return attempt_drm_backend(display, backend, *session); } } @@ -208,8 +206,7 @@ static struct wlr_backend *attempt_backend_by_name(struct wl_display *display, return NULL; } -struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, - wlr_renderer_create_func_t create_renderer_func) { +struct wlr_backend *wlr_backend_autocreate(struct wl_display *display) { struct wlr_backend *backend = wlr_multi_backend_create(display); struct wlr_multi_backend *multi = (struct wlr_multi_backend *)backend; if (!backend) { @@ -230,7 +227,7 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, char *name = strtok_r(names, ",", &saveptr); while (name != NULL) { struct wlr_backend *subbackend = attempt_backend_by_name(display, - backend, &multi->session, name, create_renderer_func); + backend, &multi->session, name); if (subbackend == NULL) { wlr_log(WLR_ERROR, "failed to start backend '%s'", name); wlr_session_destroy(multi->session); @@ -255,8 +252,7 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, } if (getenv("WAYLAND_DISPLAY") || getenv("WAYLAND_SOCKET")) { - struct wlr_backend *wl_backend = attempt_wl_backend(display, - create_renderer_func); + struct wlr_backend *wl_backend = attempt_wl_backend(display); if (!wl_backend) { goto error; } @@ -269,7 +265,7 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, const char *x11_display = getenv("DISPLAY"); if (x11_display) { struct wlr_backend *x11_backend = - attempt_x11_backend(display, x11_display, create_renderer_func); + attempt_x11_backend(display, x11_display); if (!x11_backend) { goto error; } @@ -297,8 +293,8 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, } wlr_multi_backend_add(backend, libinput); - struct wlr_backend *primary_drm = attempt_drm_backend(display, backend, - multi->session, create_renderer_func); + struct wlr_backend *primary_drm = + attempt_drm_backend(display, backend, multi->session); if (!primary_drm) { wlr_log(WLR_ERROR, "Failed to open any DRM device"); wlr_backend_destroy(libinput); diff --git a/backend/drm/backend.c b/backend/drm/backend.c index 5e0f9bcb4..27f9d0453 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -128,8 +128,7 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) { struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, struct wlr_session *session, struct wlr_device *dev, - struct wlr_backend *parent, - wlr_renderer_create_func_t create_renderer_func) { + struct wlr_backend *parent) { assert(display && session && dev); assert(!parent || wlr_backend_is_drm(parent)); @@ -179,7 +178,7 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, goto error_event; } - if (!init_drm_renderer(drm, &drm->renderer, create_renderer_func)) { + if (!init_drm_renderer(drm, &drm->renderer)) { wlr_log(WLR_ERROR, "Failed to initialize renderer"); goto error_event; } diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index dd991dced..ebba3bb63 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -21,7 +21,7 @@ #include "render/wlr_renderer.h" bool init_drm_renderer(struct wlr_drm_backend *drm, - struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_renderer_func) { + struct wlr_drm_renderer *renderer) { renderer->backend = drm; renderer->gbm = gbm_create_device(drm->fd); @@ -30,11 +30,7 @@ bool init_drm_renderer(struct wlr_drm_backend *drm, return false; } - if (!create_renderer_func) { - create_renderer_func = wlr_renderer_autocreate; - } - - renderer->wlr_rend = create_renderer_func(&renderer->egl, + renderer->wlr_rend = wlr_renderer_autocreate(&renderer->egl, EGL_PLATFORM_GBM_KHR, renderer->gbm, NULL, 0); if (!renderer->wlr_rend) { wlr_log(WLR_ERROR, "Failed to create EGL/WLR renderer"); diff --git a/backend/headless/backend.c b/backend/headless/backend.c index fe893ddf1..6380b6a59 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -184,8 +184,7 @@ out: return fd; } -struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, - wlr_renderer_create_func_t create_renderer_func) { +struct wlr_backend *wlr_headless_backend_create(struct wl_display *display) { wlr_log(WLR_INFO, "Creating headless backend"); int drm_fd = open_drm_render_node(); @@ -207,11 +206,7 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, goto error_backend; } - if (!create_renderer_func) { - create_renderer_func = wlr_renderer_autocreate; - } - - struct wlr_renderer *renderer = create_renderer_func(&backend->priv_egl, + struct wlr_renderer *renderer = wlr_renderer_autocreate(&backend->priv_egl, EGL_PLATFORM_GBM_KHR, gbm_alloc->gbm_device, NULL, 0); if (!renderer) { wlr_log(WLR_ERROR, "Failed to create renderer"); diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index 11b769bf9..ea966d0cd 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -260,7 +260,7 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) { } struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, - const char *remote, wlr_renderer_create_func_t create_renderer_func) { + const char *remote) { wlr_log(WLR_INFO, "Creating wayland backend"); struct wlr_wl_backend *wl = calloc(1, sizeof(*wl)); @@ -315,11 +315,7 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, } wl_event_source_check(wl->remote_display_src); - if (!create_renderer_func) { - create_renderer_func = wlr_renderer_autocreate; - } - - wl->renderer = create_renderer_func(&wl->egl, EGL_PLATFORM_WAYLAND_EXT, + wl->renderer = wlr_renderer_autocreate(&wl->egl, EGL_PLATFORM_WAYLAND_EXT, wl->remote_display, NULL, 0); if (!wl->renderer) { wlr_log(WLR_ERROR, "Could not create renderer"); diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 2d09eebe6..11cc4fa9e 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -322,8 +322,7 @@ static bool query_dri3_formats(struct wlr_x11_backend *x11) { } struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, - const char *x11_display, - wlr_renderer_create_func_t create_renderer_func) { + const char *x11_display) { struct wlr_x11_backend *x11 = calloc(1, sizeof(*x11)); if (!x11) { return NULL; @@ -512,11 +511,7 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, } x11->allocator = &gbm_alloc->base; - if (!create_renderer_func) { - create_renderer_func = wlr_renderer_autocreate; - } - - x11->renderer = create_renderer_func(&x11->egl, EGL_PLATFORM_GBM_KHR, + x11->renderer = wlr_renderer_autocreate(&x11->egl, EGL_PLATFORM_GBM_KHR, gbm_alloc->gbm_device, NULL, 0); if (x11->renderer == NULL) { wlr_log(WLR_ERROR, "Failed to create renderer"); diff --git a/examples/fullscreen-shell.c b/examples/fullscreen-shell.c index 9b722c05c..9a2f7d7db 100644 --- a/examples/fullscreen-shell.c +++ b/examples/fullscreen-shell.c @@ -203,7 +203,7 @@ int main(int argc, char *argv[]) { struct fullscreen_server server = {0}; server.wl_display = wl_display_create(); - server.backend = wlr_backend_autocreate(server.wl_display, NULL); + server.backend = wlr_backend_autocreate(server.wl_display); server.renderer = wlr_backend_get_renderer(server.backend); wlr_renderer_init_wl_display(server.renderer, server.wl_display); diff --git a/examples/multi-pointer.c b/examples/multi-pointer.c index a48f58886..2445e2ff7 100644 --- a/examples/multi-pointer.c +++ b/examples/multi-pointer.c @@ -271,7 +271,7 @@ int main(int argc, char *argv[]) { .clear_color = { 0.25f, 0.25f, 0.25f, 1 }, .display = display, }; - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/examples/output-layout.c b/examples/output-layout.c index b3fff4196..0c86abcce 100644 --- a/examples/output-layout.c +++ b/examples/output-layout.c @@ -267,7 +267,7 @@ int main(int argc, char *argv[]) { state.layout = wlr_output_layout_create(); clock_gettime(CLOCK_MONOTONIC, &state.ts_last); - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/examples/pointer.c b/examples/pointer.c index 92a5934e8..648158045 100644 --- a/examples/pointer.c +++ b/examples/pointer.c @@ -333,7 +333,7 @@ int main(int argc, char *argv[]) { .display = display }; - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/examples/rotation.c b/examples/rotation.c index edd100e9b..4eb600d95 100644 --- a/examples/rotation.c +++ b/examples/rotation.c @@ -241,7 +241,7 @@ int main(int argc, char *argv[]) { }; wl_list_init(&state.outputs); - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/examples/simple.c b/examples/simple.c index ce58dfa94..34ca46c7a 100644 --- a/examples/simple.c +++ b/examples/simple.c @@ -173,7 +173,7 @@ int main(void) { .last_frame = { 0 }, .display = display }; - struct wlr_backend *backend = wlr_backend_autocreate(display, NULL); + struct wlr_backend *backend = wlr_backend_autocreate(display); if (!backend) { exit(1); } diff --git a/examples/tablet.c b/examples/tablet.c index 59bf69798..af21ad2e5 100644 --- a/examples/tablet.c +++ b/examples/tablet.c @@ -356,7 +356,7 @@ int main(int argc, char *argv[]) { }; wl_list_init(&state.tablet_pads); wl_list_init(&state.tablet_tools); - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/examples/touch.c b/examples/touch.c index 7f8980e11..c00530753 100644 --- a/examples/touch.c +++ b/examples/touch.c @@ -249,7 +249,7 @@ int main(int argc, char *argv[]) { wl_list_init(&state.touch_points); wl_list_init(&state.touch); - struct wlr_backend *wlr = wlr_backend_autocreate(display, NULL); + struct wlr_backend *wlr = wlr_backend_autocreate(display); if (!wlr) { exit(1); } diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index bafc4ad09..a22cc56a4 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -41,7 +41,7 @@ struct wlr_drm_fb { }; bool init_drm_renderer(struct wlr_drm_backend *drm, - struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_render); + struct wlr_drm_renderer *renderer); void finish_drm_renderer(struct wlr_drm_renderer *renderer); bool drm_surface_make_current(struct wlr_drm_surface *surf, int *buffer_age); diff --git a/include/wlr/backend.h b/include/wlr/backend.h index 3337e51c6..edccc6655 100644 --- a/include/wlr/backend.h +++ b/include/wlr/backend.h @@ -28,20 +28,12 @@ struct wlr_backend { } events; }; -typedef struct wlr_renderer *(*wlr_renderer_create_func_t)(struct wlr_egl *egl, EGLenum platform, - void *remote_display, EGLint *config_attribs, EGLint visual_id); /** * Automatically initializes the most suitable backend given the environment. * Will always return a multibackend. The backend is created but not started. * Returns NULL on failure. - * - * The compositor can request to initialize the backend's renderer by setting - * the create_render_func. The callback must initialize the given wlr_egl and - * return a valid wlr_renderer, or NULL if it has failed to initiaze it. - * Pass NULL as create_renderer_func to use the backend's default renderer. */ -struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, - wlr_renderer_create_func_t create_renderer_func); +struct wlr_backend *wlr_backend_autocreate(struct wl_display *display); /** * Start the backend. This may signal new_input or new_output immediately, but * may also wait until the display's event loop begins. Returns false on diff --git a/include/wlr/backend/drm.h b/include/wlr/backend/drm.h index cd0f3405d..0a307166a 100644 --- a/include/wlr/backend/drm.h +++ b/include/wlr/backend/drm.h @@ -23,8 +23,7 @@ */ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, struct wlr_session *session, struct wlr_device *dev, - struct wlr_backend *parent, - wlr_renderer_create_func_t create_renderer_func); + struct wlr_backend *parent); bool wlr_backend_is_drm(struct wlr_backend *backend); bool wlr_output_is_drm(struct wlr_output *output); diff --git a/include/wlr/backend/headless.h b/include/wlr/backend/headless.h index f94812289..3eb1677d2 100644 --- a/include/wlr/backend/headless.h +++ b/include/wlr/backend/headless.h @@ -17,8 +17,7 @@ * Creates a headless backend. A headless backend has no outputs or inputs by * default. */ -struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, - wlr_renderer_create_func_t create_renderer_func); +struct wlr_backend *wlr_headless_backend_create(struct wl_display *display); /** * Creates a headless backend with an existing renderer. */ diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h index e424e37a2..a32a682a1 100644 --- a/include/wlr/backend/wayland.h +++ b/include/wlr/backend/wayland.h @@ -16,7 +16,7 @@ * default) */ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, - const char *remote, wlr_renderer_create_func_t create_renderer_func); + const char *remote); /** * Returns the remote wl_display used by the Wayland backend. diff --git a/include/wlr/backend/x11.h b/include/wlr/backend/x11.h index 5a6f050b3..90918f3f8 100644 --- a/include/wlr/backend/x11.h +++ b/include/wlr/backend/x11.h @@ -17,7 +17,7 @@ * to NULL for the default behaviour of XOpenDisplay. */ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, - const char *x11_display, wlr_renderer_create_func_t create_renderer_func); + const char *x11_display); /** * Adds a new output to this backend. You may remove outputs by destroying them.