[PATCH xserver] xwayland: Fix build without glamor

Olivier Fourdan ofourdan at redhat.com
Mon Apr 16 07:39:09 UTC 2018


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



More information about the xorg-devel mailing list