From 35c6a4b814dc179ed28456cac17fd7510da6e6e0 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 (cherry picked from commit 29d480813ad64cfde3f1c8bd64310db08bdfba28) --- 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 55e9414b..48600880 100644 --- a/libweston/backend-drm/drm-internal.h +++ b/libweston/backend-drm/drm-internal.h @@ -236,6 +236,7 @@ enum try_view_on_plane_failure_reasons { FAILURE_REASONS_FB_FORMAT_INCOMPATIBLE = (1 << 1), FAILURE_REASONS_DMABUF_MODIFIER_INVALID = (1 << 2), FAILURE_REASONS_ADD_FB_FAILED = (1 << 3), + FAILURE_REASONS_GBM_BO_IMPORT_FAILED = (1 << 4) }; /** diff --git a/libweston/backend-drm/fb.c b/libweston/backend-drm/fb.c index ffe2cc52..ba0c177e 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 72e4db93..7b350aa4 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -602,7 +602,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 |