From 4dae12890f511aed876cc156eb0f28827ed76086 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 28 Apr 2021 23:39:36 +0200 Subject: backend: automatically create allocator Introduce a new backend_get_allocator function that automatically creates an allocator for the backend if the backend has a renderer. --- backend/backend.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'backend') diff --git a/backend/backend.c b/backend/backend.c index f7c618f3..8a7d69bd 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -19,6 +19,7 @@ #include #include "backend/backend.h" #include "backend/multi.h" +#include "render/allocator.h" #include "util/signal.h" #if WLR_HAS_X11_BACKEND @@ -36,6 +37,7 @@ void wlr_backend_init(struct wlr_backend *backend, void wlr_backend_finish(struct wlr_backend *backend) { wlr_signal_emit_safe(&backend->events.destroy, backend); + wlr_allocator_destroy(backend->allocator); wlr_renderer_destroy(backend->renderer); } @@ -116,6 +118,23 @@ uint32_t backend_get_buffer_caps(struct wlr_backend *backend) { return backend->impl->get_buffer_caps(backend); } +struct wlr_allocator *backend_get_allocator(struct wlr_backend *backend) { + if (backend->allocator != NULL) { + return backend->allocator; + } + + struct wlr_renderer *renderer = wlr_backend_get_renderer(backend); + if (renderer == NULL) { + return NULL; + } + + backend->allocator = wlr_allocator_autocreate(backend, renderer); + if (backend->allocator == NULL) { + wlr_log(WLR_ERROR, "Failed to create backend allocator"); + } + return backend->allocator; +} + static size_t parse_outputs_env(const char *name) { const char *outputs_str = getenv(name); if (outputs_str == NULL) { -- cgit v1.2.3