diff options
author | Robert Mader <robert.mader@collabora.com> | 2022-04-24 02:36:58 +0200 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2022-05-24 22:11:23 +0300 |
commit | 35c6a4b814dc179ed28456cac17fd7510da6e6e0 (patch) | |
tree | 8fdc1f3efc4d21ae2ab3a79d6632295697bac7b1 | |
parent | 7b390f1dae43cf3c9845c0b78d9ba87cadefd740 (diff) | |
download | weston-35c6a4b814dc179ed28456cac17fd7510da6e6e0.tar.gz |
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 <robert.mader@collabora.com>
(cherry picked from commit 29d480813ad64cfde3f1c8bd64310db08bdfba28)
-rw-r--r-- | libweston/backend-drm/drm-internal.h | 1 | ||||
-rw-r--r-- | libweston/backend-drm/fb.c | 6 | ||||
-rw-r--r-- | 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 | |