diff --git a/hw/xwayland/xwayland-glamor-eglstream.c b/hw/xwayland/xwayland-glamor-eglstream.c index c911ed987..e5131b09c 100644 --- a/hw/xwayland/xwayland-glamor-eglstream.c +++ b/hw/xwayland/xwayland-glamor-eglstream.c @@ -962,6 +962,11 @@ xwl_glamor_eglstream_init_egl(struct xwl_screen *xwl_screen) }; int n; + if (!(xwl_screen->glamor & XWL_GLAMOR_GL)) { + ErrorF("glamor: eglstream backend requires desktop OpenGL\n"); + goto error; + } + xwl_screen->egl_display = glamor_egl_get_display( EGL_PLATFORM_DEVICE_EXT, xwl_eglstream->egl_device); if (!xwl_screen->egl_display) diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c index fca476b86..5707b5e63 100644 --- a/hw/xwayland/xwayland-glamor-gbm.c +++ b/hw/xwayland/xwayland-glamor-gbm.c @@ -1072,6 +1072,9 @@ xwl_glamor_try_big_gl_api(struct xwl_screen *xwl_screen) }; int gl_version; + if (!(xwl_screen->glamor & XWL_GLAMOR_GL)) + return FALSE; + eglBindAPI(EGL_OPENGL_API); xwl_screen->egl_context = @@ -1112,6 +1115,9 @@ xwl_glamor_try_gles_api(struct xwl_screen *xwl_screen) EGL_NONE, }; + if (!(xwl_screen->glamor & XWL_GLAMOR_GL)) + return FALSE; + eglBindAPI(EGL_OPENGL_ES_API); xwl_screen->egl_context = eglCreateContext(xwl_screen->egl_display, diff --git a/hw/xwayland/xwayland-glamor.h b/hw/xwayland/xwayland-glamor.h index 183fe755a..f4069553c 100644 --- a/hw/xwayland/xwayland-glamor.h +++ b/hw/xwayland/xwayland-glamor.h @@ -41,6 +41,11 @@ typedef enum _xwl_egl_backend_flags { XWL_EGL_BACKEND_NEEDS_N_BUFFERING = (1 << 1), } xwl_egl_backend_flags; +typedef enum _xwl_glamor_mode_flags{ + XWL_GLAMOR_NONE = 0, + XWL_GLAMOR_GL = (1 << 0), +} xwl_glamor_mode_flags; + struct xwl_egl_backend { /* Set by the backend if available */ Bool is_available; diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c index cc14e0771..7cc7775d0 100644 --- a/hw/xwayland/xwayland-screen.c +++ b/hw/xwayland/xwayland-screen.c @@ -54,6 +54,9 @@ #ifdef XWL_HAS_EI #include "xwayland-xtest.h" #endif +#ifdef XWL_HAS_GLAMOR +#include "xwayland-glamor.h" +#endif #ifdef MITSHM #include "shmint.h" @@ -757,7 +760,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) #endif #ifdef XWL_HAS_GLAMOR - xwl_screen->glamor = 1; + xwl_screen->glamor = XWL_GLAMOR_GL; #endif for (i = 1; i < argc; i++) { @@ -778,7 +781,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) defaultScreenSaverInterval = 0; } else if (strcmp(argv[i], "-shm") == 0) { - xwl_screen->glamor = 0; + xwl_screen->glamor = XWL_GLAMOR_NONE; } else if (strcmp(argv[i], "-eglstream") == 0) { #ifdef XWL_HAS_EGLSTREAM @@ -961,7 +964,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) if (xwl_screen->egl_backend == NULL || !xwl_glamor_init(xwl_screen)) { ErrorF("Failed to initialize glamor, falling back to sw\n"); - xwl_screen->glamor = 0; + xwl_screen->glamor = XWL_GLAMOR_NONE; } } #ifdef GLAMOR_HAS_GBM diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h index bd66dd681..9eaac16db 100644 --- a/hw/xwayland/xwayland-screen.h +++ b/hw/xwayland/xwayland-screen.h @@ -60,7 +60,7 @@ struct xwl_screen { enum RootClipMode root_clip_mode; int rootless; - int glamor; + xwl_glamor_mode_flags glamor; int present; int force_xrandr_emulation; int fullscreen;