From 9975134593e497ad587ca913e2d6496c6357a347 Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Mon, 18 May 2020 15:22:49 +0300 Subject: [PATCH] drm: Introduce drm_plane_reset_state() helper function Introduce a helper function to reset the current state of a drm_plane. Signed-off-by: Alexandros Frantzis --- libweston/backend-drm/drm-gbm.c | 5 +---- libweston/backend-drm/drm-internal.h | 2 ++ libweston/backend-drm/drm.c | 5 +---- libweston/backend-drm/state-helpers.c | 15 +++++++++++++++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libweston/backend-drm/drm-gbm.c b/libweston/backend-drm/drm-gbm.c index 4b83e994..30609e3e 100644 --- a/libweston/backend-drm/drm-gbm.c +++ b/libweston/backend-drm/drm-gbm.c @@ -260,10 +260,7 @@ drm_output_fini_egl(struct drm_output *output) if (!b->shutting_down && output->scanout_plane->state_cur->fb && output->scanout_plane->state_cur->fb->type == BUFFER_GBM_SURFACE) { - drm_plane_state_free(output->scanout_plane->state_cur, true); - output->scanout_plane->state_cur = - drm_plane_state_alloc(NULL, output->scanout_plane); - output->scanout_plane->state_cur->complete = true; + drm_plane_reset_state(output->scanout_plane); } gl_renderer->output_destroy(&output->base); diff --git a/libweston/backend-drm/drm-internal.h b/libweston/backend-drm/drm-internal.h index 03c6f40b..7ece756d 100644 --- a/libweston/backend-drm/drm-internal.h +++ b/libweston/backend-drm/drm-internal.h @@ -748,6 +748,8 @@ drm_plane_state_put_back(struct drm_plane_state *state); bool drm_plane_state_coords_for_view(struct drm_plane_state *state, struct weston_view *ev, uint64_t zpos); +void +drm_plane_reset_state(struct drm_plane *plane); void drm_assign_planes(struct weston_output *output_base, void *repaint_data); diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c index 4e5f39cf..7c1c0b40 100644 --- a/libweston/backend-drm/drm.c +++ b/libweston/backend-drm/drm.c @@ -1272,10 +1272,7 @@ drm_output_fini_pixman(struct drm_output *output) if (!b->shutting_down && output->scanout_plane->state_cur->fb && output->scanout_plane->state_cur->fb->type == BUFFER_PIXMAN_DUMB) { - drm_plane_state_free(output->scanout_plane->state_cur, true); - output->scanout_plane->state_cur = - drm_plane_state_alloc(NULL, output->scanout_plane); - output->scanout_plane->state_cur->complete = true; + drm_plane_reset_state(output->scanout_plane); } pixman_renderer_output_destroy(&output->base); diff --git a/libweston/backend-drm/state-helpers.c b/libweston/backend-drm/state-helpers.c index d1054993..0ee663cb 100644 --- a/libweston/backend-drm/state-helpers.c +++ b/libweston/backend-drm/state-helpers.c @@ -261,6 +261,21 @@ drm_plane_state_coords_for_view(struct drm_plane_state *state, return true; } +/** + * Reset the current state of a DRM plane + * + * The current state will be freed and replaced by a pristine state. + * + * @param plane The plane to reset the current state of + */ +void +drm_plane_reset_state(struct drm_plane *plane) +{ + drm_plane_state_free(plane->state_cur, true); + plane->state_cur = drm_plane_state_alloc(NULL, plane); + plane->state_cur->complete = true; +} + /** * Return a plane state from a drm_output_state. */