summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Mader <robert.mader@collabora.com>2022-04-24 02:36:58 +0200
committerMarius Vlad <marius.vlad@collabora.com>2022-05-24 22:11:23 +0300
commit35c6a4b814dc179ed28456cac17fd7510da6e6e0 (patch)
tree8fdc1f3efc4d21ae2ab3a79d6632295697bac7b1
parent7b390f1dae43cf3c9845c0b78d9ba87cadefd740 (diff)
downloadweston-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.h1
-rw-r--r--libweston/backend-drm/fb.c6
-rw-r--r--libweston/backend-drm/state-propose.c3
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 |