aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-04-28 23:39:36 +0200
committerKenny Levinsen <kl@kl.wtf>2021-05-21 22:13:54 +0200
commit4dae12890f511aed876cc156eb0f28827ed76086 (patch)
treedf5ffce38eccc05c1c800371c1e46198bb1420a2 /backend
parentbcabe34a2edc71fef338cd770e851a43b68484cf (diff)
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.
Diffstat (limited to 'backend')
-rw-r--r--backend/backend.c19
1 files changed, 19 insertions, 0 deletions
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 <wlr/util/log.h>
#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) {