diff mbox series

[PULL,v2,18/18] ui/dbus: restrict opengl to gbm-enabled config

Message ID 20230313200134.503083-19-marcandre.lureau@redhat.com
State New
Headers show
Series [PULL,v2,01/18] ui/dbus: initialize cursor_fb | expand

Commit Message

Marc-André Lureau March 13, 2023, 8:01 p.m. UTC
From: Marc-André Lureau <marcandre.lureau@redhat.com>

We can enable EGL later for non-GBM hosts.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
 ui/dbus-listener.c | 10 +++++-----
 ui/dbus.c          | 12 +++++++++++-
 2 files changed, 16 insertions(+), 6 deletions(-)

Comments

Fabiano Rosas March 24, 2023, 3:25 p.m. UTC | #1
marcandre.lureau@redhat.com writes:

> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> We can enable EGL later for non-GBM hosts.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  ui/dbus-listener.c | 10 +++++-----
>  ui/dbus.c          | 12 +++++++++++-
>  2 files changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
> index 85692f1b27..911acdc529 100644
> --- a/ui/dbus-listener.c
> +++ b/ui/dbus-listener.c
> @@ -50,7 +50,7 @@ struct _DBusDisplayListener {
>  
>  G_DEFINE_TYPE(DBusDisplayListener, dbus_display_listener, G_TYPE_OBJECT)
>  
> -#ifdef CONFIG_OPENGL
> +#ifdef CONFIG_GBM
>  static void dbus_update_gl_cb(GObject *source_object,
>                             GAsyncResult *res,
>                             gpointer user_data)
> @@ -239,7 +239,7 @@ static void dbus_refresh(DisplayChangeListener *dcl)
>      graphic_hw_update(dcl->con);
>  }
>  
> -#ifdef CONFIG_OPENGL
> +#ifdef CONFIG_GBM
>  static void dbus_gl_gfx_update(DisplayChangeListener *dcl,
>                                 int x, int y, int w, int h)
>  {
> @@ -302,7 +302,7 @@ static void dbus_gfx_update(DisplayChangeListener *dcl,
>          DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
>  }
>  
> -#ifdef CONFIG_OPENGL
> +#ifdef CONFIG_GBM
>  static void dbus_gl_gfx_switch(DisplayChangeListener *dcl,
>                                 struct DisplaySurface *new_surface)
>  {
> @@ -369,7 +369,7 @@ static void dbus_cursor_define(DisplayChangeListener *dcl,
>          NULL);
>  }
>  
> -#ifdef CONFIG_OPENGL
> +#ifdef CONFIG_GBM
>  const DisplayChangeListenerOps dbus_gl_dcl_ops = {
>      .dpy_name                = "dbus-gl",
>      .dpy_gfx_update          = dbus_gl_gfx_update,
> @@ -417,7 +417,7 @@ dbus_display_listener_constructed(GObject *object)
>      DBusDisplayListener *ddl = DBUS_DISPLAY_LISTENER(object);
>  
>      ddl->dcl.ops = &dbus_dcl_ops;
> -#ifdef CONFIG_OPENGL
> +#ifdef CONFIG_GBM
>      if (display_opengl) {
>          ddl->dcl.ops = &dbus_gl_dcl_ops;
>      }
> diff --git a/ui/dbus.c b/ui/dbus.c
> index 904f5a0a6d..0513de9918 100644
> --- a/ui/dbus.c
> +++ b/ui/dbus.c
> @@ -47,8 +47,10 @@ static DBusDisplay *dbus_display;
>  static QEMUGLContext dbus_create_context(DisplayGLCtx *dgc,
>                                           QEMUGLParams *params)
>  {
> +#ifdef CONFIG_GBM
>      eglMakeCurrent(qemu_egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
>                     qemu_egl_rn_ctx);
> +#endif
>      return qemu_egl_create_context(dgc, params);
>  }
>  
> @@ -56,7 +58,11 @@ static bool
>  dbus_is_compatible_dcl(DisplayGLCtx *dgc,
>                         DisplayChangeListener *dcl)
>  {
> -    return dcl->ops == &dbus_gl_dcl_ops || dcl->ops == &dbus_console_dcl_ops;
> +    return
> +#ifdef CONFIG_GBM
> +        dcl->ops == &dbus_gl_dcl_ops ||
> +#endif
> +        dcl->ops == &dbus_console_dcl_ops;
>  }
>  
>  static void
> @@ -459,7 +465,11 @@ early_dbus_init(DisplayOptions *opts)
>      DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_OFF;
>  
>      if (mode != DISPLAYGL_MODE_OFF) {
> +#ifdef CONFIG_OPENGL
>          egl_init(opts->u.dbus.rendernode, mode, &error_fatal);
> +#else
> +        error_report("dbus: GL rendering is not supported");
> +#endif
>      }
>  
>      type_register(&dbus_vc_type_info);

With this patch I get:

FAILED: libcommon.fa.p/ui_dbus-listener.c.o
cc -m64 -mcx16 -Ilibcommon.fa.p -Iui -I../ui -I/usr/include/pixman-1 \
               -I/usr/include/libpng16 -I/usr/include/spice-server \
               -I/usr/include/cacard -I/usr/include/nss3 -I/usr/include/nspr4 -I/usrc
../ui/dbus-listener.c: In function ‘dbus_call_update_gl’:
../ui/dbus-listener.c:74:5: error: implicit declaration of function ‘glFlush’; did you mean ‘fflush’? [-Werror=implicit-function-declaration]
     glFlush();
     ^~~~~~~
     fflush

I don't have libepoxy, only virgl installed. Did we miss something in
meson perhaps?
diff mbox series

Patch

diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 85692f1b27..911acdc529 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -50,7 +50,7 @@  struct _DBusDisplayListener {
 
 G_DEFINE_TYPE(DBusDisplayListener, dbus_display_listener, G_TYPE_OBJECT)
 
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_GBM
 static void dbus_update_gl_cb(GObject *source_object,
                            GAsyncResult *res,
                            gpointer user_data)
@@ -239,7 +239,7 @@  static void dbus_refresh(DisplayChangeListener *dcl)
     graphic_hw_update(dcl->con);
 }
 
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_GBM
 static void dbus_gl_gfx_update(DisplayChangeListener *dcl,
                                int x, int y, int w, int h)
 {
@@ -302,7 +302,7 @@  static void dbus_gfx_update(DisplayChangeListener *dcl,
         DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
 }
 
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_GBM
 static void dbus_gl_gfx_switch(DisplayChangeListener *dcl,
                                struct DisplaySurface *new_surface)
 {
@@ -369,7 +369,7 @@  static void dbus_cursor_define(DisplayChangeListener *dcl,
         NULL);
 }
 
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_GBM
 const DisplayChangeListenerOps dbus_gl_dcl_ops = {
     .dpy_name                = "dbus-gl",
     .dpy_gfx_update          = dbus_gl_gfx_update,
@@ -417,7 +417,7 @@  dbus_display_listener_constructed(GObject *object)
     DBusDisplayListener *ddl = DBUS_DISPLAY_LISTENER(object);
 
     ddl->dcl.ops = &dbus_dcl_ops;
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_GBM
     if (display_opengl) {
         ddl->dcl.ops = &dbus_gl_dcl_ops;
     }
diff --git a/ui/dbus.c b/ui/dbus.c
index 904f5a0a6d..0513de9918 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -47,8 +47,10 @@  static DBusDisplay *dbus_display;
 static QEMUGLContext dbus_create_context(DisplayGLCtx *dgc,
                                          QEMUGLParams *params)
 {
+#ifdef CONFIG_GBM
     eglMakeCurrent(qemu_egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
                    qemu_egl_rn_ctx);
+#endif
     return qemu_egl_create_context(dgc, params);
 }
 
@@ -56,7 +58,11 @@  static bool
 dbus_is_compatible_dcl(DisplayGLCtx *dgc,
                        DisplayChangeListener *dcl)
 {
-    return dcl->ops == &dbus_gl_dcl_ops || dcl->ops == &dbus_console_dcl_ops;
+    return
+#ifdef CONFIG_GBM
+        dcl->ops == &dbus_gl_dcl_ops ||
+#endif
+        dcl->ops == &dbus_console_dcl_ops;
 }
 
 static void
@@ -459,7 +465,11 @@  early_dbus_init(DisplayOptions *opts)
     DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_OFF;
 
     if (mode != DISPLAYGL_MODE_OFF) {
+#ifdef CONFIG_OPENGL
         egl_init(opts->u.dbus.rendernode, mode, &error_fatal);
+#else
+        error_report("dbus: GL rendering is not supported");
+#endif
     }
 
     type_register(&dbus_vc_type_info);