[PATCH xserver] xwayland: Fix build without glamor

Roman Gilg subdiff at gmail.com
Mon Apr 16 13:01:15 UTC 2018


Thank you Olivier. Sorry for that.

An alternative solution would be to only ifdef out the
xwl_glamor_pixmap_get_wl_buffer call in xwl_present_flip and otherwise
return FALSE. But we then would needlessly still build the Present
support when compiling without glamor.

Reviewed-by: Roman Gilg <subdiff at gmail.com>

On Mon, Apr 16, 2018 at 9:39 AM, Olivier Fourdan <ofourdan at redhat.com> wrote:
> Present support in Xwayland relies on glamor, make sure Xwayland can
> be built without glamor by moving references to Present code inside
> the conditional GLAMOR_HAS_GBM.
>
> Reported-by: Matt Turner <mattst88 at gmail.com>
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
> ---
>  hw/xwayland/Makefile.am |  4 ++--
>  hw/xwayland/meson.build |  3 +--
>  hw/xwayland/xwayland.c  | 10 +++++++++-
>  hw/xwayland/xwayland.h  |  7 ++++++-
>  4 files changed, 18 insertions(+), 6 deletions(-)
>
> diff --git a/hw/xwayland/Makefile.am b/hw/xwayland/Makefile.am
> index 0291afee7..80d3a1f19 100644
> --- a/hw/xwayland/Makefile.am
> +++ b/hw/xwayland/Makefile.am
> @@ -11,7 +11,6 @@ Xwayland_CFLAGS =                             \
>
>  Xwayland_SOURCES =                             \
>         xwayland.c                              \
> -       xwayland-present.c                      \
>         xwayland-input.c                        \
>         xwayland-cursor.c                       \
>         xwayland-shm.c                          \
> @@ -35,7 +34,8 @@ Xwayland_built_sources =
>
>  if GLAMOR_EGL
>  Xwayland_SOURCES +=                            \
> -       xwayland-glamor.c
> +       xwayland-glamor.c                       \
> +       xwayland-present.c
>  if XV
>  Xwayland_SOURCES +=                            \
>         xwayland-glamor-xv.c
> diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build
> index 69a5c819a..8d178825e 100644
> --- a/hw/xwayland/meson.build
> +++ b/hw/xwayland/meson.build
> @@ -1,6 +1,5 @@
>  srcs = [
>      'xwayland.c',
> -    'xwayland-present.c',
>      'xwayland-input.c',
>      'xwayland-cursor.c',
>      'xwayland-shm.c',
> @@ -53,7 +52,7 @@ srcs += code.process(dmabuf_xml)
>
>  xwayland_glamor = []
>  if gbm_dep.found()
> -    srcs += 'xwayland-glamor.c'
> +    srcs += [ 'xwayland-glamor.c', 'xwayland-present.c' ]
>      if build_xv
>          srcs += 'xwayland-glamor-xv.c'
>      endif
> diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
> index dd074c341..44bbc3b18 100644
> --- a/hw/xwayland/xwayland.c
> +++ b/hw/xwayland/xwayland.c
> @@ -525,6 +525,7 @@ xwl_realize_window(WindowPtr window)
>          wl_region_destroy(region);
>      }
>
> +#ifdef GLAMOR_HAS_GBM
>      if (xwl_screen->present) {
>          xwl_window->present_crtc_fake = RRCrtcCreate(xwl_screen->screen, xwl_window);
>          xwl_window->present_msc = 1;
> @@ -533,6 +534,7 @@ xwl_realize_window(WindowPtr window)
>          xorg_list_init(&xwl_window->present_event_list);
>          xorg_list_init(&xwl_window->present_release_queue);
>      }
> +#endif
>
>      wl_display_flush(xwl_screen->display);
>
> @@ -599,9 +601,11 @@ xwl_unrealize_window(WindowPtr window)
>
>      compUnredirectWindow(serverClient, window, CompositeRedirectManual);
>
> +#ifdef GLAMOR_HAS_GBM
>      if (xwl_screen->present)
>          /* Always cleanup Present (Present might have been active on child window) */
>          xwl_present_cleanup(window);
> +#endif
>
>      screen->UnrealizeWindow = xwl_screen->UnrealizeWindow;
>      ret = (*screen->UnrealizeWindow) (window);
> @@ -621,8 +625,10 @@ xwl_unrealize_window(WindowPtr window)
>      if (xwl_window->frame_callback)
>          wl_callback_destroy(xwl_window->frame_callback);
>
> +#ifdef GLAMOR_HAS_GBM
>      if (xwl_window->present_crtc_fake)
>          RRCrtcDestroy(xwl_window->present_crtc_fake);
> +#endif
>
>      free(xwl_window);
>      dixSetPrivate(&window->devPrivates, &xwl_window_private_key, NULL);
> @@ -709,9 +715,11 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
>
>      xorg_list_for_each_entry_safe(xwl_window, next_xwl_window,
>                                    &xwl_screen->damage_window_list, link_damage) {
> +#ifdef GLAMOR_HAS_GBM
>          /* Present on the main surface. So don't commit here as well. */
>          if (xwl_window->present_window)
>              continue;
> +#endif
>          /* If we're waiting on a frame callback from the server,
>           * don't attach a new buffer. */
>          if (xwl_window->frame_callback)
> @@ -1053,10 +1061,10 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
>          ErrorF("Failed to initialize glamor, falling back to sw\n");
>          xwl_screen->glamor = 0;
>      }
> -#endif
>
>      if (xwl_screen->glamor && xwl_screen->rootless)
>          xwl_screen->present = xwl_present_init(pScreen);
> +#endif
>
>      if (!xwl_screen->glamor) {
>          xwl_screen->CreateScreenResources = pScreen->CreateScreenResources;
> diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
> index a65559374..cf2551b99 100644
> --- a/hw/xwayland/xwayland.h
> +++ b/hw/xwayland/xwayland.h
> @@ -127,7 +127,7 @@ struct xwl_window {
>      struct xorg_list link_damage;
>      struct wl_callback *frame_callback;
>      Bool allow_commits;
> -
> +#ifdef GLAMOR_HAS_GBM
>      /* present */
>      RRCrtcPtr present_crtc_fake;
>      struct xorg_list present_link;
> @@ -143,8 +143,10 @@ struct xwl_window {
>
>      struct xorg_list present_event_list;
>      struct xorg_list present_release_queue;
> +#endif
>  };
>
> +#ifdef GLAMOR_HAS_GBM
>  struct xwl_present_event {
>      uint64_t event_id;
>      uint64_t target_msc;
> @@ -159,6 +161,7 @@ struct xwl_present_event {
>
>      struct xorg_list list;
>  };
> +#endif
>
>  #define MODIFIER_META 0x01
>
> @@ -378,8 +381,10 @@ struct wl_buffer *xwl_glamor_pixmap_get_wl_buffer(PixmapPtr pixmap,
>                                                    unsigned short height,
>                                                    Bool *created);
>
> +#ifdef GLAMOR_HAS_GBM
>  Bool xwl_present_init(ScreenPtr screen);
>  void xwl_present_cleanup(WindowPtr window);
> +#endif
>
>  void xwl_screen_release_tablet_manager(struct xwl_screen *xwl_screen);
>
> --
> 2.17.0
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list