aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/drm.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r--backend/drm/drm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index b0b36a4e..10966940 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -349,6 +349,7 @@ static void layer_handle_addon_destroy(struct wlr_addon *addon) {
drm_fb_clear(&layer->pending_fb);
drm_fb_clear(&layer->queued_fb);
drm_fb_clear(&layer->current_fb);
+ free(layer->candidate_planes);
free(layer);
}
@@ -381,6 +382,8 @@ static struct wlr_drm_layer *get_or_create_layer(struct wlr_drm_backend *drm,
return NULL;
}
+ layer->wlr = wlr_layer;
+
#if HAVE_LIBLIFTOFF
layer->liftoff = liftoff_layer_create(crtc->liftoff);
if (layer->liftoff == NULL) {
@@ -391,6 +394,15 @@ static struct wlr_drm_layer *get_or_create_layer(struct wlr_drm_backend *drm,
abort(); // unreachable
#endif
+ layer->candidate_planes = calloc(sizeof(bool), drm->num_planes);
+ if (layer->candidate_planes == NULL) {
+#if HAVE_LIBLIFTOFF
+ liftoff_layer_destroy(layer->liftoff);
+#endif
+ free(layer);
+ return NULL;
+ }
+
wlr_addon_init(&layer->addon, &wlr_layer->addons, drm, &layer_impl);
wl_list_insert(&crtc->layers, &layer->link);