blob: 66228d24bb041fc1df8fb7ee1f1c06bc13aa0a33 [file] [log] [blame]
From de6dfab2d936cbce13fb4711125b4fb38989ca12 Mon Sep 17 00:00:00 2001
From: David Riley <davidriley@chromium.org>
Date: Mon, 11 May 2020 17:16:56 -0700
Subject: [PATCH] xwayland: Fall back to gbm_bo_create if no modifiers are
available.
As of Mesa commit 4e3a7dcf6ee4946c46ae8b35e7883a49859ef6fb
(gallium: enable EGL_EXT_image_dma_buf_import_modifiers unconditionally)
Xwayland uses the gbm_bo_create_with_modifiers even if there are no
modifiers available. Fall back to the old case where usage flags
are provided if modifiers are not available.
Without this change a suboptimal buffer might be allocated which
could result in extra copies of buffers for scanout.
Signed-off-by: David Riley <davidriley@chromium.org>
---
hw/xwayland/xwayland-glamor-gbm.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c
index 80655fd16..17bfa7236 100644
--- a/hw/xwayland/xwayland-glamor-gbm.c
+++ b/hw/xwayland/xwayland-glamor-gbm.c
@@ -216,7 +216,7 @@ xwl_glamor_gbm_create_pixmap(ScreenPtr screen,
{
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
- struct gbm_bo *bo;
+ struct gbm_bo *bo = NULL;
PixmapPtr pixmap = NULL;
if (width > 0 && height > 0 && depth >= 15 &&
@@ -231,13 +231,15 @@ xwl_glamor_gbm_create_pixmap(ScreenPtr screen,
uint64_t *modifiers = NULL;
glamor_get_modifiers(screen, format, &num_modifiers, &modifiers);
- bo = gbm_bo_create_with_modifiers(xwl_gbm->gbm, width, height,
- format, modifiers, num_modifiers);
+ if (num_modifiers) {
+ bo = gbm_bo_create_with_modifiers(xwl_gbm->gbm, width, height,
+ format, modifiers,
+ num_modifiers);
+ }
free(modifiers);
}
- else
#endif
- {
+ if (!bo) {
bo = gbm_bo_create(xwl_gbm->gbm, width, height, format,
GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
}
--
2.26.2.645.ge9eca65c58-goog