diff options
author | Olivier Fourdan <ofourdan@redhat.com> | 2023-04-07 11:03:14 +0200 |
---|---|---|
committer | Olivier Fourdan <ofourdan@redhat.com> | 2023-04-12 10:44:25 +0200 |
commit | 967ad0fa1e6b249aef1c21913234c25f97966e98 (patch) | |
tree | 48407fa650b3bf7b9e43ad7009e4ab3a9a900959 | |
parent | f31ca9238f845a1d9bea5b4410c0597ffe70e8d1 (diff) | |
download | xserver-967ad0fa1e6b249aef1c21913234c25f97966e98.tar.gz |
xwayland: Add xwl_glamor_get_drawable_modifiers_and_scanout()
Add a new API similar to xwl_glamor_get_drawable_modifiers() but also
returning whether the format and modifiers are from a tranche which
supports scanout.
This is preparation work for adding scanout support with
gbm_bo_create_with_modifiers2() when supported.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
-rw-r--r-- | hw/xwayland/xwayland-glamor.c | 33 | ||||
-rw-r--r-- | hw/xwayland/xwayland-glamor.h | 5 |
2 files changed, 32 insertions, 6 deletions
diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c index 792af6144..3c03b2523 100644 --- a/hw/xwayland/xwayland-glamor.c +++ b/hw/xwayland/xwayland-glamor.c @@ -327,7 +327,8 @@ xwl_get_modifiers_for_format(struct xwl_format *format_array, int num_formats, static Bool xwl_get_modifiers_for_device(struct xwl_dmabuf_feedback *feedback, drmDevice *device, uint32_t format, uint32_t *num_modifiers, - uint64_t **modifiers) + uint64_t **modifiers, + Bool *supports_scanout) { /* Now try to find a matching set of tranches for the window's device */ for (int i = 0; i < feedback->dev_formats_len; i++) { @@ -335,8 +336,11 @@ xwl_get_modifiers_for_device(struct xwl_dmabuf_feedback *feedback, drmDevice *de if (drmDevicesEqual(dev_formats->drm_dev, device) && xwl_get_modifiers_for_format(dev_formats->formats, dev_formats->num_formats, - format, num_modifiers, modifiers)) + format, num_modifiers, modifiers)) { + if (supports_scanout) + *supports_scanout = !!dev_formats->supports_scanout; return TRUE; + } } return FALSE; @@ -360,7 +364,8 @@ xwl_glamor_get_modifiers(ScreenPtr screen, uint32_t format, main_dev = xwl_screen_get_main_dev(xwl_screen); return xwl_get_modifiers_for_device(&xwl_screen->default_feedback, main_dev, - format, num_modifiers, modifiers); + format, num_modifiers, modifiers, + NULL); } else { return xwl_get_modifiers_for_format(xwl_screen->formats, xwl_screen->num_formats, format, num_modifiers, modifiers); @@ -368,8 +373,11 @@ xwl_glamor_get_modifiers(ScreenPtr screen, uint32_t format, } Bool -xwl_glamor_get_drawable_modifiers(DrawablePtr drawable, uint32_t format, - uint32_t *num_modifiers, uint64_t **modifiers) +xwl_glamor_get_drawable_modifiers_and_scanout(DrawablePtr drawable, + uint32_t format, + uint32_t *num_modifiers, + uint64_t **modifiers, + Bool *supports_scanout) { struct xwl_screen *xwl_screen = xwl_screen_get(drawable->pScreen); struct xwl_window *xwl_window; @@ -377,6 +385,8 @@ xwl_glamor_get_drawable_modifiers(DrawablePtr drawable, uint32_t format, *num_modifiers = 0; *modifiers = NULL; + if (supports_scanout) + *supports_scanout = FALSE; /* We can only return per-drawable modifiers if the compositor supports feedback */ if (xwl_screen->dmabuf_protocol_version < 4) @@ -394,7 +404,18 @@ xwl_glamor_get_drawable_modifiers(DrawablePtr drawable, uint32_t format, main_dev = xwl_screen_get_main_dev(xwl_screen); return xwl_get_modifiers_for_device(&xwl_window->feedback, main_dev, - format, num_modifiers, modifiers); + format, num_modifiers, modifiers, + supports_scanout); + +} + +Bool +xwl_glamor_get_drawable_modifiers(DrawablePtr drawable, uint32_t format, + uint32_t *num_modifiers, uint64_t **modifiers) +{ + return xwl_glamor_get_drawable_modifiers_and_scanout(drawable, + format, num_modifiers, + modifiers, NULL); } diff --git a/hw/xwayland/xwayland-glamor.h b/hw/xwayland/xwayland-glamor.h index c2eed95e9..313d7faf1 100644 --- a/hw/xwayland/xwayland-glamor.h +++ b/hw/xwayland/xwayland-glamor.h @@ -142,6 +142,11 @@ Bool xwl_glamor_get_formats(ScreenPtr screen, CARD32 *num_formats, CARD32 **formats); Bool xwl_glamor_get_modifiers(ScreenPtr screen, uint32_t format, uint32_t *num_modifiers, uint64_t **modifiers); +Bool xwl_glamor_get_drawable_modifiers_and_scanout(DrawablePtr drawable, + uint32_t format, + uint32_t *num_modifiers, + uint64_t **modifiers, + Bool *supports_scanout); Bool xwl_glamor_get_drawable_modifiers(DrawablePtr drawable, uint32_t format, uint32_t *num_modifiers, uint64_t **modifiers); Bool xwl_glamor_check_flip(PixmapPtr pixmap); |