From 29d480813ad64cfde3f1c8bd64310db08bdfba28 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Sun, 24 Apr 2022 02:36:58 +0200 Subject: [PATCH] backend-drm: Add failure reasons for failing gbm_bo_import And add it to the list of failures triggering a resend of dmabuf feedback scanout tranches. Closes https://gitlab.freedesktop.org/wayland/weston/-/issues/614 Signed-off-by: Robert Mader --- libweston/backend-drm/drm-internal.h | 1 + libweston/backend-drm/fb.c | 6 +++++- libweston/backend-drm/state-propose.c | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libweston/backend-drm/drm-internal.h b/libweston/backend-drm/drm-internal.h index 706dfcab..23da81c0 100644 --- a/libweston/backend-drm/drm-internal.h +++ b/libweston/backend-drm/drm-internal.h @@ -245,6 +245,7 @@ enum try_view_on_plane_failure_reasons { FAILURE_REASONS_BUFFER_TYPE = 1 << 9, FAILURE_REASONS_GLOBAL_ALPHA = 1 << 10, FAILURE_REASONS_NO_GBM = 1 << 11, + FAILURE_REASONS_GBM_BO_IMPORT_FAILED = 1 << 12, }; /** diff --git a/libweston/backend-drm/fb.c b/libweston/backend-drm/fb.c index e563b52e..328d1f85 100644 --- a/libweston/backend-drm/fb.c +++ b/libweston/backend-drm/fb.c @@ -276,8 +276,12 @@ drm_fb_get_from_dmabuf(struct linux_dmabuf_buffer *dmabuf, fb->bo = gbm_bo_import(backend->gbm, GBM_BO_IMPORT_FD_MODIFIER, &import_mod, GBM_BO_USE_SCANOUT); - if (!fb->bo) + if (!fb->bo) { + if (try_view_on_plane_failure_reasons) + *try_view_on_plane_failure_reasons |= + FAILURE_REASONS_GBM_BO_IMPORT_FAILED; goto err_free; + } fb->width = dmabuf->attributes.width; fb->height = dmabuf->attributes.height; diff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c index 790db3ec..49911d98 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -340,7 +340,8 @@ dmabuf_feedback_maybe_update(struct drm_backend *b, struct weston_view *ev, if (try_view_on_plane_failure_reasons & (FAILURE_REASONS_ADD_FB_FAILED | FAILURE_REASONS_FB_FORMAT_INCOMPATIBLE | - FAILURE_REASONS_DMABUF_MODIFIER_INVALID)) + FAILURE_REASONS_DMABUF_MODIFIER_INVALID | + FAILURE_REASONS_GBM_BO_IMPORT_FAILED)) action_needed |= ACTION_NEEDED_ADD_SCANOUT_TRANCHE; assert(action_needed != (ACTION_NEEDED_REMOVE_SCANOUT_TRANCHE |