From a4c700231dfbd20a7d48b64ff64e8cc40a6c22bc Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Tue, 28 Mar 2023 14:12:53 +0200 Subject: [PATCH] xwayland: Check for implicit scanout availability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With implicit modifiers, DRM_FORMAT_MOD_INVALID is an allowed modifier, to indicate that the server can support the format. When looking for a scanout capable tranche with implicit modifiers, we ought to check for the availability of a tranche with an invalid modifier for the given format. Signed-off-by: Olivier Fourdan Reviewed-by: Michel Dänzer --- hw/xwayland/xwayland-glamor.c | 8 ++++++++ hw/xwayland/xwayland-window.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c index db1434ffb..af227bb03 100644 --- a/hw/xwayland/xwayland-glamor.c +++ b/hw/xwayland/xwayland-glamor.c @@ -747,8 +747,16 @@ xwl_window_dmabuf_feedback_done(void *data, struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback) { struct xwl_window *xwl_window = data; + uint32_t format = wl_drm_format_for_depth(xwl_window->window->drawable.depth); xwl_dmabuf_feedback_done(&xwl_window->feedback, dmabuf_feedback); + + xwl_window->has_implicit_scanout_support = + xwl_feedback_is_modifier_supported(&xwl_window->feedback, format, + DRM_FORMAT_MOD_INVALID, TRUE); + DebugF("XWAYLAND: Window 0x%x can%s get implicit scanout support\n", + xwl_window->window->drawable.id, + xwl_window->has_implicit_scanout_support ? "" : "not"); } static void diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h index 65dfb69ff..92c700e41 100644 --- a/hw/xwayland/xwayland-window.h +++ b/hw/xwayland/xwayland-window.h @@ -119,6 +119,8 @@ struct xwl_window { #endif struct xwayland_surface_v1 *xwayland_surface; struct xwl_dmabuf_feedback feedback; + /* If TRUE, the window buffer format supports scanout with implicit modifier */ + Bool has_implicit_scanout_support; }; struct xwl_window *xwl_window_get(WindowPtr window);