From: Marc-André Lureau <marcandre.lureau@redhat.com>
Allow to build & use the DBus display without 3d/GPU acceleration support.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 2 --
ui/dbus-listener.c | 15 +++++++++++++--
ui/dbus.c | 8 ++++++++
tests/qtest/meson.build | 2 +-
ui/meson.build | 4 ++--
5 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 6bcab8bf0d..a73d050946 100644
--- a/meson.build
+++ b/meson.build
@@ -1746,8 +1746,6 @@ dbus_display = get_option('dbus_display') \
error_message: '-display dbus requires glib>=2.64') \
.require(gdbus_codegen.found(),
error_message: gdbus_codegen_error.format('-display dbus')) \
- .require(opengl.found() and gbm.found(),
- error_message: '-display dbus requires epoxy/egl and gbm') \
.allowed()
have_virtfs = get_option('virtfs') \
diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 2e87ed7e9a..85692f1b27 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -27,9 +27,11 @@
#include "dbus.h"
#include <gio/gunixfdlist.h>
+#ifdef CONFIG_OPENGL
#include "ui/shader.h"
#include "ui/egl-helpers.h"
#include "ui/egl-context.h"
+#endif
#include "trace.h"
struct _DBusDisplayListener {
@@ -48,6 +50,7 @@ struct _DBusDisplayListener {
G_DEFINE_TYPE(DBusDisplayListener, dbus_display_listener, G_TYPE_OBJECT)
+#ifdef CONFIG_OPENGL
static void dbus_update_gl_cb(GObject *source_object,
GAsyncResult *res,
gpointer user_data)
@@ -229,12 +232,14 @@ static void dbus_gl_refresh(DisplayChangeListener *dcl)
ddl->gl_updates = 0;
}
}
+#endif
static void dbus_refresh(DisplayChangeListener *dcl)
{
graphic_hw_update(dcl->con);
}
+#ifdef CONFIG_OPENGL
static void dbus_gl_gfx_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
{
@@ -242,6 +247,7 @@ static void dbus_gl_gfx_update(DisplayChangeListener *dcl,
ddl->gl_updates++;
}
+#endif
static void dbus_gfx_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
@@ -296,6 +302,7 @@ static void dbus_gfx_update(DisplayChangeListener *dcl,
DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
}
+#ifdef CONFIG_OPENGL
static void dbus_gl_gfx_switch(DisplayChangeListener *dcl,
struct DisplaySurface *new_surface)
{
@@ -311,6 +318,7 @@ static void dbus_gl_gfx_switch(DisplayChangeListener *dcl,
width, height, 0, 0, width, height);
}
}
+#endif
static void dbus_gfx_switch(DisplayChangeListener *dcl,
struct DisplaySurface *new_surface)
@@ -361,6 +369,7 @@ static void dbus_cursor_define(DisplayChangeListener *dcl,
NULL);
}
+#ifdef CONFIG_OPENGL
const DisplayChangeListenerOps dbus_gl_dcl_ops = {
.dpy_name = "dbus-gl",
.dpy_gfx_update = dbus_gl_gfx_update,
@@ -378,6 +387,7 @@ const DisplayChangeListenerOps dbus_gl_dcl_ops = {
.dpy_gl_release_dmabuf = dbus_release_dmabuf,
.dpy_gl_update = dbus_scanout_update,
};
+#endif
const DisplayChangeListenerOps dbus_dcl_ops = {
.dpy_name = "dbus",
@@ -406,11 +416,12 @@ dbus_display_listener_constructed(GObject *object)
{
DBusDisplayListener *ddl = DBUS_DISPLAY_LISTENER(object);
+ ddl->dcl.ops = &dbus_dcl_ops;
+#ifdef CONFIG_OPENGL
if (display_opengl) {
ddl->dcl.ops = &dbus_gl_dcl_ops;
- } else {
- ddl->dcl.ops = &dbus_dcl_ops;
}
+#endif
G_OBJECT_CLASS(dbus_display_listener_parent_class)->constructed(object);
}
diff --git a/ui/dbus.c b/ui/dbus.c
index ebf03bd84d..904f5a0a6d 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -30,8 +30,10 @@
#include "qom/object_interfaces.h"
#include "sysemu/sysemu.h"
#include "ui/dbus-module.h"
+#ifdef CONFIG_OPENGL
#include "ui/egl-helpers.h"
#include "ui/egl-context.h"
+#endif
#include "audio/audio.h"
#include "audio/audio_int.h"
#include "qapi/error.h"
@@ -41,6 +43,7 @@
static DBusDisplay *dbus_display;
+#ifdef CONFIG_OPENGL
static QEMUGLContext dbus_create_context(DisplayGLCtx *dgc,
QEMUGLParams *params)
{
@@ -84,6 +87,7 @@ static const DisplayGLCtxOps dbus_gl_ops = {
.dpy_gl_ctx_destroy_texture = dbus_destroy_texture,
.dpy_gl_ctx_update_texture = dbus_update_texture,
};
+#endif
static NotifierList dbus_display_notifiers =
NOTIFIER_LIST_INITIALIZER(dbus_display_notifiers);
@@ -112,10 +116,12 @@ dbus_display_init(Object *o)
DBusDisplay *dd = DBUS_DISPLAY(o);
g_autoptr(GDBusObjectSkeleton) vm = NULL;
+#ifdef CONFIG_OPENGL
dd->glctx.ops = &dbus_gl_ops;
if (display_opengl) {
dd->glctx.gls = qemu_gl_init_shader();
}
+#endif
dd->iface = qemu_dbus_display1_vm_skeleton_new();
dd->consoles = g_ptr_array_new_with_free_func(g_object_unref);
@@ -152,7 +158,9 @@ dbus_display_finalize(Object *o)
g_clear_object(&dd->iface);
g_free(dd->dbus_addr);
g_free(dd->audiodev);
+#ifdef CONFIG_OPENGL
g_clear_pointer(&dd->glctx.gls, qemu_gl_fini_shader);
+#endif
dbus_display = NULL;
}
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 29a4efb4c2..f23a4aaa24 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -101,7 +101,7 @@ qtests_i386 = \
'numa-test'
]
-if dbus_display
+if dbus_display and targetos != 'windows'
qtests_i386 += ['dbus-display-test']
endif
diff --git a/ui/meson.build b/ui/meson.build
index 0b2d0d21d1..330369707d 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -85,7 +85,7 @@ if dbus_display
'--generate-c-code', '@BASENAME@'])
dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: gio)
dbus_display1_dep = declare_dependency(link_with: dbus_display1_lib, include_directories: include_directories('.'))
- dbus_ss.add(when: [gio, pixman, opengl, gbm, dbus_display1_dep],
+ dbus_ss.add(when: [gio, pixman, dbus_display1_dep],
if_true: [files(
'dbus-chardev.c',
'dbus-clipboard.c',
@@ -93,7 +93,7 @@ if dbus_display
'dbus-error.c',
'dbus-listener.c',
'dbus.c',
- )])
+ ), opengl, gbm])
ui_modules += {'dbus' : dbus_ss}
endif
--
2.39.2
Hi On Tue, Mar 7, 2023 at 3:59 PM <marcandre.lureau@redhat.com> wrote: > > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > Allow to build & use the DBus display without 3d/GPU acceleration support. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > meson.build | 2 -- > ui/dbus-listener.c | 15 +++++++++++++-- > ui/dbus.c | 8 ++++++++ > tests/qtest/meson.build | 2 +- > ui/meson.build | 4 ++-- > 5 files changed, 24 insertions(+), 7 deletions(-) > > diff --git a/meson.build b/meson.build > index 6bcab8bf0d..a73d050946 100644 > --- a/meson.build > +++ b/meson.build > @@ -1746,8 +1746,6 @@ dbus_display = get_option('dbus_display') \ > error_message: '-display dbus requires glib>=2.64') \ > .require(gdbus_codegen.found(), > error_message: gdbus_codegen_error.format('-display dbus')) \ > - .require(opengl.found() and gbm.found(), > - error_message: '-display dbus requires epoxy/egl and gbm') \ > .allowed() This change enables compilation of dbus on win32, although it requires additional fixes. I'll update it with: + .require(targetos != 'windows', + error_message: '-display dbus is not available on Windows') \ > > have_virtfs = get_option('virtfs') \ > diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c > index 2e87ed7e9a..85692f1b27 100644 > --- a/ui/dbus-listener.c > +++ b/ui/dbus-listener.c > @@ -27,9 +27,11 @@ > #include "dbus.h" > #include <gio/gunixfdlist.h> > > +#ifdef CONFIG_OPENGL > #include "ui/shader.h" > #include "ui/egl-helpers.h" > #include "ui/egl-context.h" > +#endif > #include "trace.h" > > struct _DBusDisplayListener { > @@ -48,6 +50,7 @@ struct _DBusDisplayListener { > > G_DEFINE_TYPE(DBusDisplayListener, dbus_display_listener, G_TYPE_OBJECT) > > +#ifdef CONFIG_OPENGL > static void dbus_update_gl_cb(GObject *source_object, > GAsyncResult *res, > gpointer user_data) > @@ -229,12 +232,14 @@ static void dbus_gl_refresh(DisplayChangeListener *dcl) > ddl->gl_updates = 0; > } > } > +#endif > > static void dbus_refresh(DisplayChangeListener *dcl) > { > graphic_hw_update(dcl->con); > } > > +#ifdef CONFIG_OPENGL > static void dbus_gl_gfx_update(DisplayChangeListener *dcl, > int x, int y, int w, int h) > { > @@ -242,6 +247,7 @@ static void dbus_gl_gfx_update(DisplayChangeListener *dcl, > > ddl->gl_updates++; > } > +#endif > > static void dbus_gfx_update(DisplayChangeListener *dcl, > int x, int y, int w, int h) > @@ -296,6 +302,7 @@ static void dbus_gfx_update(DisplayChangeListener *dcl, > DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL); > } > > +#ifdef CONFIG_OPENGL > static void dbus_gl_gfx_switch(DisplayChangeListener *dcl, > struct DisplaySurface *new_surface) > { > @@ -311,6 +318,7 @@ static void dbus_gl_gfx_switch(DisplayChangeListener *dcl, > width, height, 0, 0, width, height); > } > } > +#endif > > static void dbus_gfx_switch(DisplayChangeListener *dcl, > struct DisplaySurface *new_surface) > @@ -361,6 +369,7 @@ static void dbus_cursor_define(DisplayChangeListener *dcl, > NULL); > } > > +#ifdef CONFIG_OPENGL > const DisplayChangeListenerOps dbus_gl_dcl_ops = { > .dpy_name = "dbus-gl", > .dpy_gfx_update = dbus_gl_gfx_update, > @@ -378,6 +387,7 @@ const DisplayChangeListenerOps dbus_gl_dcl_ops = { > .dpy_gl_release_dmabuf = dbus_release_dmabuf, > .dpy_gl_update = dbus_scanout_update, > }; > +#endif > > const DisplayChangeListenerOps dbus_dcl_ops = { > .dpy_name = "dbus", > @@ -406,11 +416,12 @@ dbus_display_listener_constructed(GObject *object) > { > DBusDisplayListener *ddl = DBUS_DISPLAY_LISTENER(object); > > + ddl->dcl.ops = &dbus_dcl_ops; > +#ifdef CONFIG_OPENGL > if (display_opengl) { > ddl->dcl.ops = &dbus_gl_dcl_ops; > - } else { > - ddl->dcl.ops = &dbus_dcl_ops; > } > +#endif > > G_OBJECT_CLASS(dbus_display_listener_parent_class)->constructed(object); > } > diff --git a/ui/dbus.c b/ui/dbus.c > index ebf03bd84d..904f5a0a6d 100644 > --- a/ui/dbus.c > +++ b/ui/dbus.c > @@ -30,8 +30,10 @@ > #include "qom/object_interfaces.h" > #include "sysemu/sysemu.h" > #include "ui/dbus-module.h" > +#ifdef CONFIG_OPENGL > #include "ui/egl-helpers.h" > #include "ui/egl-context.h" > +#endif > #include "audio/audio.h" > #include "audio/audio_int.h" > #include "qapi/error.h" > @@ -41,6 +43,7 @@ > > static DBusDisplay *dbus_display; > > +#ifdef CONFIG_OPENGL > static QEMUGLContext dbus_create_context(DisplayGLCtx *dgc, > QEMUGLParams *params) > { > @@ -84,6 +87,7 @@ static const DisplayGLCtxOps dbus_gl_ops = { > .dpy_gl_ctx_destroy_texture = dbus_destroy_texture, > .dpy_gl_ctx_update_texture = dbus_update_texture, > }; > +#endif > > static NotifierList dbus_display_notifiers = > NOTIFIER_LIST_INITIALIZER(dbus_display_notifiers); > @@ -112,10 +116,12 @@ dbus_display_init(Object *o) > DBusDisplay *dd = DBUS_DISPLAY(o); > g_autoptr(GDBusObjectSkeleton) vm = NULL; > > +#ifdef CONFIG_OPENGL > dd->glctx.ops = &dbus_gl_ops; > if (display_opengl) { > dd->glctx.gls = qemu_gl_init_shader(); > } > +#endif > dd->iface = qemu_dbus_display1_vm_skeleton_new(); > dd->consoles = g_ptr_array_new_with_free_func(g_object_unref); > > @@ -152,7 +158,9 @@ dbus_display_finalize(Object *o) > g_clear_object(&dd->iface); > g_free(dd->dbus_addr); > g_free(dd->audiodev); > +#ifdef CONFIG_OPENGL > g_clear_pointer(&dd->glctx.gls, qemu_gl_fini_shader); > +#endif > dbus_display = NULL; > } > > diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build > index 29a4efb4c2..f23a4aaa24 100644 > --- a/tests/qtest/meson.build > +++ b/tests/qtest/meson.build > @@ -101,7 +101,7 @@ qtests_i386 = \ > 'numa-test' > ] > > -if dbus_display > +if dbus_display and targetos != 'windows' > qtests_i386 += ['dbus-display-test'] > endif > > diff --git a/ui/meson.build b/ui/meson.build > index 0b2d0d21d1..330369707d 100644 > --- a/ui/meson.build > +++ b/ui/meson.build > @@ -85,7 +85,7 @@ if dbus_display > '--generate-c-code', '@BASENAME@']) > dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: gio) > dbus_display1_dep = declare_dependency(link_with: dbus_display1_lib, include_directories: include_directories('.')) > - dbus_ss.add(when: [gio, pixman, opengl, gbm, dbus_display1_dep], > + dbus_ss.add(when: [gio, pixman, dbus_display1_dep], > if_true: [files( > 'dbus-chardev.c', > 'dbus-clipboard.c', > @@ -93,7 +93,7 @@ if dbus_display > 'dbus-error.c', > 'dbus-listener.c', > 'dbus.c', > - )]) > + ), opengl, gbm]) > ui_modules += {'dbus' : dbus_ss} > endif > > -- > 2.39.2 > > -- Marc-André Lureau
© 2016 - 2025 Red Hat, Inc.