* [PATCH v3 00/18] ui: dbus & misc fixes
@ 2023-03-13 10:11 marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 01/18] ui/dbus: initialize cursor_fb marcandre.lureau
` (17 more replies)
0 siblings, 18 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Hi,
This is a respin of a series I sent end of January that didn't get reviews, here
is your chance! :) A collection of fixes for UI related-stuff, and paving the
way for accelerated/egl dbus display support on win32 (for 8.1 hopefully).
I think they are worth to include in 8.0, as little fixes and improvements. It
would be nice to have included as early as rc0.
v3:
- call SDL_GL_DeleteContext, matchin SDL_GL_CreateContext change
- use SDL hint (environment) instead of compile-time conditional for debugging
- fix potential unreachable code warning in egl_init()
- do not enable -display dbus on windows yet
- add r-b tags
v2:
- add "ui/dbus: initialize cursor_fb"
- add "ui/shader: fix #version directive must occur on first line"
- add "ui/egl: print EGL error, helping debugging"
- add "ui/sdl: add optional logging when _SDL_DEBUG is set"
- add "ui/sdl: try to instantiate the matching opengl renderer"
- add "ui: introduce egl_init()"
- add "ui/dbus: do not require opengl & gbm"
- add "ui/dbus: restrict opengl to gbm-enabled config"
- drop "ui/dbus: update the display when switching surface", as I
am not yet confident enough about it
- rebased
Marc-André Lureau (18):
ui/dbus: initialize cursor_fb
ui/dbus: unregister clipboard on connection close
audio/dbus: there are no sender for p2p mode
ui/dbus: set mouse is-absolute during console creation
meson: ensure dbus-display generated code is built before other units
ui: rename cursor_{put->unref}
ui: rename cursor_{get->ref}, return it
ui: keep current cursor with QemuConsole
ui: set cursor upon listener registration
ui: set cursor position upon listener registration
ui/sdl: get the GL context from the window
ui/shader: fix #version directive must occur on first line
ui/egl: print EGL error, helping debugging
ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment
ui/sdl: try to instantiate the matching opengl renderer
ui: introduce egl_init()
ui/dbus: do not require opengl & gbm
ui/dbus: restrict opengl to gbm-enabled config
meson.build | 4 +-
audio/audio_int.h | 2 +-
include/ui/console.h | 5 +-
include/ui/egl-helpers.h | 4 ++
ui/vnc.h | 1 -
audio/dbusaudio.c | 7 ++-
hw/display/qxl-render.c | 4 +-
hw/display/qxl.c | 2 +-
hw/display/vmware_vga.c | 4 +-
ui/console.c | 18 ++++++++
ui/cursor.c | 5 +-
ui/dbus-clipboard.c | 18 +++-----
ui/dbus-console.c | 13 ++++--
ui/dbus-listener.c | 22 ++++++---
ui/dbus.c | 29 ++++++++----
ui/egl-headless.c | 16 +++----
ui/egl-helpers.c | 78 +++++++++++++++++++++++++++++---
ui/sdl2.c | 24 +++++++++-
ui/spice-core.c | 7 +--
ui/spice-display.c | 8 ++--
ui/vnc.c | 8 +---
tests/qtest/meson.build | 2 +-
ui/meson.build | 6 ++-
ui/shader/texture-blit-flip.vert | 1 -
ui/shader/texture-blit.frag | 1 -
ui/shader/texture-blit.vert | 1 -
26 files changed, 210 insertions(+), 80 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 01/18] ui/dbus: initialize cursor_fb
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 02/18] ui/dbus: unregister clipboard on connection close marcandre.lureau
` (16 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Or else, we may randomly destroy some textures..
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/ui/egl-helpers.h | 2 ++
ui/dbus-listener.c | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h
index 2fb6e0dd6b..c92dd90e33 100644
--- a/include/ui/egl-helpers.h
+++ b/include/ui/egl-helpers.h
@@ -22,6 +22,8 @@ typedef struct egl_fb {
QemuDmaBuf *dmabuf;
} egl_fb;
+#define EGL_FB_INIT { 0, }
+
void egl_fb_destroy(egl_fb *fb);
void egl_fb_setup_default(egl_fb *fb, int width, int height);
void egl_fb_setup_for_tex(egl_fb *fb, int width, int height,
diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 57d4e401db..2dafd6569c 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -149,7 +149,7 @@ static void dbus_cursor_dmabuf(DisplayChangeListener *dcl,
DBusDisplayListener *ddl = container_of(dcl, DBusDisplayListener, dcl);
DisplaySurface *ds;
GVariant *v_data = NULL;
- egl_fb cursor_fb;
+ egl_fb cursor_fb = EGL_FB_INIT;
if (!dmabuf) {
qemu_dbus_display1_listener_call_mouse_set(
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 02/18] ui/dbus: unregister clipboard on connection close
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 01/18] ui/dbus: initialize cursor_fb marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 03/18] audio/dbus: there are no sender for p2p mode marcandre.lureau
` (15 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Fixes unregistration with p2p connections, since they don't have an
associated name owner.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/dbus-clipboard.c | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/ui/dbus-clipboard.c b/ui/dbus-clipboard.c
index df9a754a8d..fe7fcdecb6 100644
--- a/ui/dbus-clipboard.c
+++ b/ui/dbus-clipboard.c
@@ -204,15 +204,6 @@ dbus_clipboard_unregister_proxy(DBusDisplay *dpy)
g_clear_object(&dpy->clipboard_proxy);
}
-static void
-dbus_on_clipboard_proxy_name_owner_changed(
- DBusDisplay *dpy,
- GObject *object,
- GParamSpec *pspec)
-{
- dbus_clipboard_unregister_proxy(dpy);
-}
-
static gboolean
dbus_clipboard_register(
DBusDisplay *dpy,
@@ -220,6 +211,7 @@ dbus_clipboard_register(
{
g_autoptr(GError) err = NULL;
const char *name = NULL;
+ GDBusConnection *connection = g_dbus_method_invocation_get_connection(invocation);
if (dpy->clipboard_proxy) {
g_dbus_method_invocation_return_error(
@@ -232,7 +224,7 @@ dbus_clipboard_register(
dpy->clipboard_proxy =
qemu_dbus_display1_clipboard_proxy_new_sync(
- g_dbus_method_invocation_get_connection(invocation),
+ connection,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
g_dbus_method_invocation_get_sender(invocation),
"/org/qemu/Display1/Clipboard",
@@ -252,7 +244,11 @@ dbus_clipboard_register(
g_object_connect(dpy->clipboard_proxy,
"swapped-signal::notify::g-name-owner",
- dbus_on_clipboard_proxy_name_owner_changed, dpy,
+ dbus_clipboard_unregister_proxy, dpy,
+ NULL);
+ g_object_connect(connection,
+ "swapped-signal::closed",
+ dbus_clipboard_unregister_proxy, dpy,
NULL);
qemu_clipboard_reset_serial();
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 03/18] audio/dbus: there are no sender for p2p mode
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 01/18] ui/dbus: initialize cursor_fb marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 02/18] ui/dbus: unregister clipboard on connection close marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 04/18] ui/dbus: set mouse is-absolute during console creation marcandre.lureau
` (14 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
audio/audio_int.h | 2 +-
audio/dbusaudio.c | 7 +++++--
ui/dbus.c | 2 +-
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index d51d63f08d..e57ff50155 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -143,7 +143,7 @@ struct audio_driver {
void *(*init) (Audiodev *);
void (*fini) (void *);
#ifdef CONFIG_GIO
- void (*set_dbus_server) (AudioState *s, GDBusObjectManagerServer *manager);
+ void (*set_dbus_server) (AudioState *s, GDBusObjectManagerServer *manager, bool p2p);
#endif
struct audio_pcm_ops *pcm_ops;
int can_be_default;
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index 722df0355e..fece74f78c 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -43,6 +43,7 @@
typedef struct DBusAudio {
GDBusObjectManagerServer *server;
+ bool p2p;
GDBusObjectSkeleton *audio;
QemuDBusDisplay1Audio *iface;
GHashTable *out_listeners;
@@ -448,7 +449,8 @@ dbus_audio_register_listener(AudioState *s,
bool out)
{
DBusAudio *da = s->drv_opaque;
- const char *sender = g_dbus_method_invocation_get_sender(invocation);
+ const char *sender =
+ da->p2p ? "p2p" : g_dbus_method_invocation_get_sender(invocation);
g_autoptr(GDBusConnection) listener_conn = NULL;
g_autoptr(GError) err = NULL;
g_autoptr(GSocket) socket = NULL;
@@ -591,7 +593,7 @@ dbus_audio_register_in_listener(AudioState *s,
}
static void
-dbus_audio_set_server(AudioState *s, GDBusObjectManagerServer *server)
+dbus_audio_set_server(AudioState *s, GDBusObjectManagerServer *server, bool p2p)
{
DBusAudio *da = s->drv_opaque;
@@ -599,6 +601,7 @@ dbus_audio_set_server(AudioState *s, GDBusObjectManagerServer *server)
g_assert(!da->server);
da->server = g_object_ref(server);
+ da->p2p = p2p;
da->audio = g_dbus_object_skeleton_new(DBUS_DISPLAY1_AUDIO_PATH);
da->iface = qemu_dbus_display1_audio_skeleton_new();
diff --git a/ui/dbus.c b/ui/dbus.c
index f2dcba03d0..f529928f0b 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -220,7 +220,7 @@ dbus_display_complete(UserCreatable *uc, Error **errp)
dd->audiodev);
return;
}
- audio_state->drv->set_dbus_server(audio_state, dd->server);
+ audio_state->drv->set_dbus_server(audio_state, dd->server, dd->p2p);
}
consoles = g_array_new(FALSE, FALSE, sizeof(guint32));
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 04/18] ui/dbus: set mouse is-absolute during console creation
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (2 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 03/18] audio/dbus: there are no sender for p2p mode marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 05/18] meson: ensure dbus-display generated code is built before other units marcandre.lureau
` (13 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
ui/dbus-console.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/ui/dbus-console.c b/ui/dbus-console.c
index 0bfaa2298d..f77bc49d2e 100644
--- a/ui/dbus-console.c
+++ b/ui/dbus-console.c
@@ -411,15 +411,21 @@ dbus_mouse_release(DBusDisplayConsole *ddc,
return DBUS_METHOD_INVOCATION_HANDLED;
}
+static void
+dbus_mouse_update_is_absolute(DBusDisplayConsole *ddc)
+{
+ g_object_set(ddc->iface_mouse,
+ "is-absolute", qemu_input_is_absolute(),
+ NULL);
+}
+
static void
dbus_mouse_mode_change(Notifier *notify, void *data)
{
DBusDisplayConsole *ddc =
container_of(notify, DBusDisplayConsole, mouse_mode_notifier);
- g_object_set(ddc->iface_mouse,
- "is-absolute", qemu_input_is_absolute(),
- NULL);
+ dbus_mouse_update_is_absolute(ddc);
}
int dbus_display_console_get_index(DBusDisplayConsole *ddc)
@@ -492,6 +498,7 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con)
register_displaychangelistener(&ddc->dcl);
ddc->mouse_mode_notifier.notify = dbus_mouse_mode_change;
qemu_add_mouse_mode_change_notifier(&ddc->mouse_mode_notifier);
+ dbus_mouse_update_is_absolute(ddc);
return ddc;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 05/18] meson: ensure dbus-display generated code is built before other units
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (3 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 04/18] ui/dbus: set mouse is-absolute during console creation marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 06/18] ui: rename cursor_{put->unref} marcandre.lureau
` (12 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
It's simply by luck that dbus-display header is built first before the
other units using it.
With sourceset, I can't find an easier way out than declaring an extra
dependency for dbus-display1 generate code.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/meson.build | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/ui/meson.build b/ui/meson.build
index 612ea2325b..0b2d0d21d1 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -83,7 +83,9 @@ if dbus_display
'--interface-prefix', 'org.qemu.',
'--c-namespace', 'QemuDBus',
'--generate-c-code', '@BASENAME@'])
- dbus_ss.add(when: [gio, pixman, opengl, gbm],
+ 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],
if_true: [files(
'dbus-chardev.c',
'dbus-clipboard.c',
@@ -91,7 +93,7 @@ if dbus_display
'dbus-error.c',
'dbus-listener.c',
'dbus.c',
- ), dbus_display1])
+ )])
ui_modules += {'dbus' : dbus_ss}
endif
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 06/18] ui: rename cursor_{put->unref}
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (4 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 05/18] meson: ensure dbus-display generated code is built before other units marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 07/18] ui: rename cursor_{get->ref}, return it marcandre.lureau
` (11 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The naming is more conventional in QEMU.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/ui/console.h | 2 +-
hw/display/qxl-render.c | 4 ++--
hw/display/qxl.c | 2 +-
hw/display/vmware_vga.c | 4 ++--
ui/cursor.c | 2 +-
ui/dbus-listener.c | 2 +-
ui/spice-display.c | 4 ++--
ui/vnc.c | 2 +-
8 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index 1cb53acc33..3efd1f6b82 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -152,7 +152,7 @@ typedef struct QEMUCursor {
QEMUCursor *cursor_alloc(int width, int height);
void cursor_get(QEMUCursor *c);
-void cursor_put(QEMUCursor *c);
+void cursor_unref(QEMUCursor *c);
QEMUCursor *cursor_builtin_hidden(void);
QEMUCursor *cursor_builtin_left_ptr(void);
void cursor_print_ascii_art(QEMUCursor *c, const char *prefix);
diff --git a/hw/display/qxl-render.c b/hw/display/qxl-render.c
index fcfd40c3ac..ec99ec887a 100644
--- a/hw/display/qxl-render.c
+++ b/hw/display/qxl-render.c
@@ -290,7 +290,7 @@ static QEMUCursor *qxl_cursor(PCIQXLDevice *qxl, QXLCursor *cursor,
return c;
fail:
- cursor_put(c);
+ cursor_unref(c);
return NULL;
}
@@ -336,7 +336,7 @@ int qxl_render_cursor(PCIQXLDevice *qxl, QXLCommandExt *ext)
}
qemu_mutex_lock(&qxl->ssd.lock);
if (qxl->ssd.cursor) {
- cursor_put(qxl->ssd.cursor);
+ cursor_unref(qxl->ssd.cursor);
}
qxl->ssd.cursor = c;
qxl->ssd.mouse_x = cmd->u.set.position.x;
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index ec712d3ca2..80ce1e9a93 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -299,7 +299,7 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl)
qxl->guest_cursor = 0;
qemu_mutex_unlock(&qxl->track_lock);
if (qxl->ssd.cursor) {
- cursor_put(qxl->ssd.cursor);
+ cursor_unref(qxl->ssd.cursor);
}
qxl->ssd.cursor = cursor_builtin_hidden();
}
diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c
index 59ae7f74b8..09591fbd39 100644
--- a/hw/display/vmware_vga.c
+++ b/hw/display/vmware_vga.c
@@ -550,12 +550,12 @@ static inline void vmsvga_cursor_define(struct vmsvga_state_s *s,
default:
fprintf(stderr, "%s: unhandled bpp %d, using fallback cursor\n",
__func__, c->bpp);
- cursor_put(qc);
+ cursor_unref(qc);
qc = cursor_builtin_left_ptr();
}
dpy_cursor_define(s->vga.con, qc);
- cursor_put(qc);
+ cursor_unref(qc);
}
#endif
diff --git a/ui/cursor.c b/ui/cursor.c
index 835f0802f9..31b09bf058 100644
--- a/ui/cursor.c
+++ b/ui/cursor.c
@@ -111,7 +111,7 @@ void cursor_get(QEMUCursor *c)
c->refcount++;
}
-void cursor_put(QEMUCursor *c)
+void cursor_unref(QEMUCursor *c)
{
if (c == NULL)
return;
diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 2dafd6569c..906ab296ca 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -345,7 +345,7 @@ static void dbus_cursor_define(DisplayChangeListener *dcl,
c->data,
c->width * c->height * 4,
TRUE,
- (GDestroyNotify)cursor_put,
+ (GDestroyNotify)cursor_unref,
c);
qemu_dbus_display1_listener_call_cursor_define(
diff --git a/ui/spice-display.c b/ui/spice-display.c
index 16802f99cb..243a794638 100644
--- a/ui/spice-display.c
+++ b/ui/spice-display.c
@@ -464,7 +464,7 @@ void qemu_spice_cursor_refresh_bh(void *opaque)
qemu_mutex_unlock(&ssd->lock);
dpy_cursor_define(ssd->dcl.con, c);
qemu_mutex_lock(&ssd->lock);
- cursor_put(c);
+ cursor_unref(c);
}
if (ssd->mouse_x != -1 && ssd->mouse_y != -1) {
@@ -766,7 +766,7 @@ static void display_mouse_define(DisplayChangeListener *dcl,
qemu_mutex_lock(&ssd->lock);
cursor_get(c);
- cursor_put(ssd->cursor);
+ cursor_unref(ssd->cursor);
ssd->cursor = c;
ssd->hot_x = c->hot_x;
ssd->hot_y = c->hot_y;
diff --git a/ui/vnc.c b/ui/vnc.c
index d9eacad759..0bdcc3dfce 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1029,7 +1029,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener *dcl,
VncDisplay *vd = container_of(dcl, VncDisplay, dcl);
VncState *vs;
- cursor_put(vd->cursor);
+ cursor_unref(vd->cursor);
g_free(vd->cursor_mask);
vd->cursor = c;
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 07/18] ui: rename cursor_{get->ref}, return it
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (5 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 06/18] ui: rename cursor_{put->unref} marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 08/18] ui: keep current cursor with QemuConsole marcandre.lureau
` (10 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The naming is more conventional in QEMU code, and allows to simplify
some code by changing the API design, so it returns the input parameter,
instead of void.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/ui/console.h | 2 +-
ui/cursor.c | 3 ++-
ui/dbus-listener.c | 3 +--
ui/spice-display.c | 4 ++--
ui/vnc.c | 3 +--
5 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index 3efd1f6b82..0b01df947e 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -151,7 +151,7 @@ typedef struct QEMUCursor {
} QEMUCursor;
QEMUCursor *cursor_alloc(int width, int height);
-void cursor_get(QEMUCursor *c);
+QEMUCursor *cursor_ref(QEMUCursor *c);
void cursor_unref(QEMUCursor *c);
QEMUCursor *cursor_builtin_hidden(void);
QEMUCursor *cursor_builtin_left_ptr(void);
diff --git a/ui/cursor.c b/ui/cursor.c
index 31b09bf058..6fe67990e2 100644
--- a/ui/cursor.c
+++ b/ui/cursor.c
@@ -106,9 +106,10 @@ QEMUCursor *cursor_alloc(int width, int height)
return c;
}
-void cursor_get(QEMUCursor *c)
+QEMUCursor *cursor_ref(QEMUCursor *c)
{
c->refcount++;
+ return c;
}
void cursor_unref(QEMUCursor *c)
diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 906ab296ca..2e87ed7e9a 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -339,14 +339,13 @@ static void dbus_cursor_define(DisplayChangeListener *dcl,
DBusDisplayListener *ddl = container_of(dcl, DBusDisplayListener, dcl);
GVariant *v_data = NULL;
- cursor_get(c);
v_data = g_variant_new_from_data(
G_VARIANT_TYPE("ay"),
c->data,
c->width * c->height * 4,
TRUE,
(GDestroyNotify)cursor_unref,
- c);
+ cursor_ref(c));
qemu_dbus_display1_listener_call_cursor_define(
ddl->proxy,
diff --git a/ui/spice-display.c b/ui/spice-display.c
index 243a794638..5bee19a7f9 100644
--- a/ui/spice-display.c
+++ b/ui/spice-display.c
@@ -460,7 +460,7 @@ void qemu_spice_cursor_refresh_bh(void *opaque)
if (ssd->cursor) {
QEMUCursor *c = ssd->cursor;
assert(ssd->dcl.con);
- cursor_get(c);
+ cursor_ref(c);
qemu_mutex_unlock(&ssd->lock);
dpy_cursor_define(ssd->dcl.con, c);
qemu_mutex_lock(&ssd->lock);
@@ -765,7 +765,7 @@ static void display_mouse_define(DisplayChangeListener *dcl,
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
qemu_mutex_lock(&ssd->lock);
- cursor_get(c);
+ cursor_ref(c);
cursor_unref(ssd->cursor);
ssd->cursor = c;
ssd->hot_x = c->hot_x;
diff --git a/ui/vnc.c b/ui/vnc.c
index 0bdcc3dfce..8aec5d751e 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1032,8 +1032,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener *dcl,
cursor_unref(vd->cursor);
g_free(vd->cursor_mask);
- vd->cursor = c;
- cursor_get(vd->cursor);
+ vd->cursor = cursor_ref(vd->cursor);
vd->cursor_msize = cursor_get_mono_bpl(c) * c->height;
vd->cursor_mask = g_malloc0(vd->cursor_msize);
cursor_get_mono_mask(c, 0, vd->cursor_mask);
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 08/18] ui: keep current cursor with QemuConsole
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (6 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 07/18] ui: rename cursor_{get->ref}, return it marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 09/18] ui: set cursor upon listener registration marcandre.lureau
` (9 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Keeping the current cursor around is useful, not only for VNC, but for
other displays. Let's move it down, see the following patches for other
usages.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/ui/console.h | 1 +
ui/vnc.h | 1 -
ui/console.c | 8 ++++++++
ui/vnc.c | 7 ++-----
4 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index 0b01df947e..2a8fab091f 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -459,6 +459,7 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
uint32_t head, Error **errp);
QemuConsole *qemu_console_lookup_unused(void);
+QEMUCursor *qemu_console_get_cursor(QemuConsole *con);
bool qemu_console_is_visible(QemuConsole *con);
bool qemu_console_is_graphic(QemuConsole *con);
bool qemu_console_is_fixedsize(QemuConsole *con);
diff --git a/ui/vnc.h b/ui/vnc.h
index a60fb13115..757fa83044 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -159,7 +159,6 @@ struct VncDisplay
QKbdState *kbd;
QemuMutex mutex;
- QEMUCursor *cursor;
int cursor_msize;
uint8_t *cursor_mask;
diff --git a/ui/console.c b/ui/console.c
index 98b701f5a3..0dccbdd4be 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -94,6 +94,7 @@ struct QemuConsole {
uint32_t head;
QemuUIInfo ui_info;
QEMUTimer *ui_timer;
+ QEMUCursor *cursor;
const GraphicHwOps *hw_ops;
void *hw;
@@ -1923,6 +1924,8 @@ void dpy_cursor_define(QemuConsole *con, QEMUCursor *cursor)
DisplayState *s = con->ds;
DisplayChangeListener *dcl;
+ cursor_unref(con->cursor);
+ con->cursor = cursor_ref(cursor);
if (!qemu_console_is_visible(con)) {
return;
}
@@ -2288,6 +2291,11 @@ QemuConsole *qemu_console_lookup_unused(void)
return NULL;
}
+QEMUCursor *qemu_console_get_cursor(QemuConsole *con)
+{
+ return con->cursor;
+}
+
bool qemu_console_is_visible(QemuConsole *con)
{
return (con == active_console) || (con->dcls > 0);
diff --git a/ui/vnc.c b/ui/vnc.c
index 8aec5d751e..bbd8b6baae 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -988,10 +988,10 @@ static void vnc_mouse_set(DisplayChangeListener *dcl,
static int vnc_cursor_define(VncState *vs)
{
- QEMUCursor *c = vs->vd->cursor;
+ QEMUCursor *c = qemu_console_get_cursor(vs->vd->dcl.con);
int isize;
- if (!vs->vd->cursor) {
+ if (!c) {
return -1;
}
@@ -1029,10 +1029,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener *dcl,
VncDisplay *vd = container_of(dcl, VncDisplay, dcl);
VncState *vs;
- cursor_unref(vd->cursor);
g_free(vd->cursor_mask);
-
- vd->cursor = cursor_ref(vd->cursor);
vd->cursor_msize = cursor_get_mono_bpl(c) * c->height;
vd->cursor_mask = g_malloc0(vd->cursor_msize);
cursor_get_mono_mask(c, 0, vd->cursor_mask);
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 09/18] ui: set cursor upon listener registration
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (7 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 08/18] ui: keep current cursor with QemuConsole marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 10/18] ui: set cursor position " marcandre.lureau
` (8 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/console.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ui/console.c b/ui/console.c
index 0dccbdd4be..7b808f080e 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1662,6 +1662,9 @@ void register_displaychangelistener(DisplayChangeListener *dcl)
con = active_console;
}
displaychangelistener_display_console(dcl, con, dcl->con ? &error_fatal : NULL);
+ if (con->cursor && dcl->ops->dpy_cursor_define) {
+ dcl->ops->dpy_cursor_define(dcl, con->cursor);
+ }
text_console_update_cursor(NULL);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 10/18] ui: set cursor position upon listener registration
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (8 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 09/18] ui: set cursor upon listener registration marcandre.lureau
@ 2023-03-13 10:11 ` marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 11/18] ui/sdl: get the GL context from the window marcandre.lureau
` (7 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/console.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/ui/console.c b/ui/console.c
index 7b808f080e..8fc18c44bf 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -95,6 +95,7 @@ struct QemuConsole {
QemuUIInfo ui_info;
QEMUTimer *ui_timer;
QEMUCursor *cursor;
+ int cursor_x, cursor_y, cursor_on;
const GraphicHwOps *hw_ops;
void *hw;
@@ -1665,6 +1666,9 @@ void register_displaychangelistener(DisplayChangeListener *dcl)
if (con->cursor && dcl->ops->dpy_cursor_define) {
dcl->ops->dpy_cursor_define(dcl, con->cursor);
}
+ if (dcl->ops->dpy_mouse_set) {
+ dcl->ops->dpy_mouse_set(dcl, con->cursor_x, con->cursor_y, con->cursor_on);
+ }
text_console_update_cursor(NULL);
}
@@ -1909,6 +1913,9 @@ void dpy_mouse_set(QemuConsole *con, int x, int y, int on)
DisplayState *s = con->ds;
DisplayChangeListener *dcl;
+ con->cursor_x = x;
+ con->cursor_y = y;
+ con->cursor_on = on;
if (!qemu_console_is_visible(con)) {
return;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 11/18] ui/sdl: get the GL context from the window
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (9 preceding siblings ...)
2023-03-13 10:11 ` [PATCH v3 10/18] ui: set cursor position " marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:18 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 12/18] ui/shader: fix #version directive must occur on first line marcandre.lureau
` (6 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
There is no guarantee to have a current GL context here. The current
code seems to rely on the renderer using a GL backend, and to set a
current GL context. But this is not always the case, for example if the
renderer backend is DirectX.
This change is enough to fix using virgl with sdl2 on win32, on my setup.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/sdl2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 8cb77416af..137f7ab57f 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -101,7 +101,7 @@ void sdl2_window_create(struct sdl2_console *scon)
flags);
scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0);
if (scon->opengl) {
- scon->winctx = SDL_GL_GetCurrentContext();
+ scon->winctx = SDL_GL_CreateContext(scon->real_window);
}
sdl_update_caption(scon);
}
@@ -112,6 +112,8 @@ void sdl2_window_destroy(struct sdl2_console *scon)
return;
}
+ SDL_GL_DeleteContext(scon->winctx);
+ scon->winctx = NULL;
SDL_DestroyRenderer(scon->real_renderer);
scon->real_renderer = NULL;
SDL_DestroyWindow(scon->real_window);
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 12/18] ui/shader: fix #version directive must occur on first line
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (10 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 11/18] ui/sdl: get the GL context from the window marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 13/18] ui/egl: print EGL error, helping debugging marcandre.lureau
` (5 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
ANGLE fails to compile shaders otherwise.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/shader/texture-blit-flip.vert | 1 -
ui/shader/texture-blit.frag | 1 -
ui/shader/texture-blit.vert | 1 -
3 files changed, 3 deletions(-)
diff --git a/ui/shader/texture-blit-flip.vert b/ui/shader/texture-blit-flip.vert
index ba081fa5a6..f7a448d229 100644
--- a/ui/shader/texture-blit-flip.vert
+++ b/ui/shader/texture-blit-flip.vert
@@ -1,4 +1,3 @@
-
#version 300 es
in vec2 in_position;
diff --git a/ui/shader/texture-blit.frag b/ui/shader/texture-blit.frag
index bfa202c22b..8ed95a46b6 100644
--- a/ui/shader/texture-blit.frag
+++ b/ui/shader/texture-blit.frag
@@ -1,4 +1,3 @@
-
#version 300 es
uniform sampler2D image;
diff --git a/ui/shader/texture-blit.vert b/ui/shader/texture-blit.vert
index 6fe2744d68..fb48d70665 100644
--- a/ui/shader/texture-blit.vert
+++ b/ui/shader/texture-blit.vert
@@ -1,4 +1,3 @@
-
#version 300 es
in vec2 in_position;
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 13/18] ui/egl: print EGL error, helping debugging
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (11 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 12/18] ui/shader: fix #version directive must occur on first line marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment marcandre.lureau
` (4 subsequent siblings)
17 siblings, 0 replies; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
ui/egl-helpers.c | 54 ++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 48 insertions(+), 6 deletions(-)
diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c
index 3a88245b67..b11837415b 100644
--- a/ui/egl-helpers.c
+++ b/ui/egl-helpers.c
@@ -26,6 +26,48 @@ DisplayGLMode qemu_egl_mode;
/* ------------------------------------------------------------------ */
+#if defined(CONFIG_X11) || defined(CONFIG_GBM)
+static const char *egl_get_error_string(void)
+{
+ EGLint error = eglGetError();
+
+ switch (error) {
+ case EGL_SUCCESS:
+ return "EGL_SUCCESS";
+ case EGL_NOT_INITIALIZED:
+ return "EGL_NOT_INITIALIZED";
+ case EGL_BAD_ACCESS:
+ return "EGL_BAD_ACCESS";
+ case EGL_BAD_ALLOC:
+ return "EGL_BAD_ALLOC";
+ case EGL_BAD_ATTRIBUTE:
+ return "EGL_BAD_ATTRIBUTE";
+ case EGL_BAD_CONTEXT:
+ return "EGL_BAD_CONTEXT";
+ case EGL_BAD_CONFIG:
+ return "EGL_BAD_CONFIG";
+ case EGL_BAD_CURRENT_SURFACE:
+ return "EGL_BAD_CURRENT_SURFACE";
+ case EGL_BAD_DISPLAY:
+ return "EGL_BAD_DISPLAY";
+ case EGL_BAD_SURFACE:
+ return "EGL_BAD_SURFACE";
+ case EGL_BAD_MATCH:
+ return "EGL_BAD_MATCH";
+ case EGL_BAD_PARAMETER:
+ return "EGL_BAD_PARAMETER";
+ case EGL_BAD_NATIVE_PIXMAP:
+ return "EGL_BAD_NATIVE_PIXMAP";
+ case EGL_BAD_NATIVE_WINDOW:
+ return "EGL_BAD_NATIVE_WINDOW";
+ case EGL_CONTEXT_LOST:
+ return "EGL_CONTEXT_LOST";
+ default:
+ return "Unknown EGL error";
+ }
+}
+#endif
+
static void egl_fb_delete_texture(egl_fb *fb)
{
if (!fb->delete_texture) {
@@ -438,20 +480,20 @@ static int qemu_egl_init_dpy(EGLNativeDisplayType dpy,
qemu_egl_display = qemu_egl_get_display(dpy, platform);
if (qemu_egl_display == EGL_NO_DISPLAY) {
- error_report("egl: eglGetDisplay failed");
+ error_report("egl: eglGetDisplay failed: %s", egl_get_error_string());
return -1;
}
b = eglInitialize(qemu_egl_display, &major, &minor);
if (b == EGL_FALSE) {
- error_report("egl: eglInitialize failed");
+ error_report("egl: eglInitialize failed: %s", egl_get_error_string());
return -1;
}
b = eglBindAPI(gles ? EGL_OPENGL_ES_API : EGL_OPENGL_API);
if (b == EGL_FALSE) {
- error_report("egl: eglBindAPI failed (%s mode)",
- gles ? "gles" : "core");
+ error_report("egl: eglBindAPI failed (%s mode): %s",
+ gles ? "gles" : "core", egl_get_error_string());
return -1;
}
@@ -459,8 +501,8 @@ static int qemu_egl_init_dpy(EGLNativeDisplayType dpy,
gles ? conf_att_gles : conf_att_core,
&qemu_egl_config, 1, &n);
if (b == EGL_FALSE || n != 1) {
- error_report("egl: eglChooseConfig failed (%s mode)",
- gles ? "gles" : "core");
+ error_report("egl: eglChooseConfig failed (%s mode): %s",
+ gles ? "gles" : "core", egl_get_error_string());
return -1;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (12 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 13/18] ui/egl: print EGL error, helping debugging marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:20 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer marcandre.lureau
` (3 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Enable SDL logging when QEMU_ENABLE_SDL_LOGGING variable is set, as
suggested by Sam Lantinga, upstream SDL maintainer.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/sdl2.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 137f7ab57f..221cdced60 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -843,6 +843,10 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
}
#endif
+ if (SDL_GetHintBoolean("QEMU_ENABLE_SDL_LOGGING", SDL_FALSE)) {
+ SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
+ }
+
if (SDL_Init(SDL_INIT_VIDEO)) {
fprintf(stderr, "Could not initialize SDL(%s) - exiting\n",
SDL_GetError());
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (13 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:21 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 16/18] ui: introduce egl_init() marcandre.lureau
` (2 subsequent siblings)
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
-display sdl,gl=es didn't actually use OpenGL ES.
Using OpenGL ES allows to use ANGLE, which works generally better than
Windows/OEM OpenGL driver.
(note: users can still bypass the QEMU choice with SDL_RENDER_DRIVER
environment variable)
(note: for some reason, specifying a driver disables batching and
breaks rendering, so enable it explicitly)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/sdl2.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 221cdced60..35c58c1104 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -58,6 +58,11 @@ static Notifier mouse_mode_notifier;
#define SDL2_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \
/ SDL2_REFRESH_INTERVAL_BUSY + 1)
+/* introduced in SDL 2.0.10 */
+#ifndef SDL_HINT_RENDER_BATCHING
+#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING"
+#endif
+
static void sdl_update_caption(struct sdl2_console *scon);
static struct sdl2_console *get_scon_from_window(uint32_t window_id)
@@ -99,7 +104,18 @@ void sdl2_window_create(struct sdl2_console *scon)
surface_width(scon->surface),
surface_height(scon->surface),
flags);
+ if (scon->opengl) {
+ const char *driver = "opengl";
+
+ if (scon->opts->gl == DISPLAYGL_MODE_ES) {
+ driver = "opengles2";
+ }
+
+ SDL_SetHint(SDL_HINT_RENDER_DRIVER, driver);
+ SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");
+ }
scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0);
+
if (scon->opengl) {
scon->winctx = SDL_GL_CreateContext(scon->real_window);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 16/18] ui: introduce egl_init()
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (14 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:22 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 17/18] ui/dbus: do not require opengl & gbm marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config marcandre.lureau
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Future patches will introduce EGL support on win32 (too late for 8.0
though). Having a common place for EGL initialization and error handling
will make it simpler.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/egl-helpers.h | 2 ++
ui/dbus.c | 7 +------
ui/egl-headless.c | 16 ++++++++--------
ui/egl-helpers.c | 24 ++++++++++++++++++++++++
ui/spice-core.c | 7 +------
5 files changed, 36 insertions(+), 20 deletions(-)
diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h
index c92dd90e33..53d953ddf4 100644
--- a/include/ui/egl-helpers.h
+++ b/include/ui/egl-helpers.h
@@ -65,4 +65,6 @@ int qemu_egl_init_dpy_mesa(EGLNativeDisplayType dpy, DisplayGLMode mode);
EGLContext qemu_egl_init_ctx(void);
bool qemu_egl_has_dmabuf(void);
+bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp);
+
#endif /* EGL_HELPERS_H */
diff --git a/ui/dbus.c b/ui/dbus.c
index f529928f0b..ebf03bd84d 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -451,12 +451,7 @@ early_dbus_init(DisplayOptions *opts)
DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_OFF;
if (mode != DISPLAYGL_MODE_OFF) {
- if (egl_rendernode_init(opts->u.dbus.rendernode, mode) < 0) {
- error_report("dbus: render node init failed");
- exit(1);
- }
-
- display_opengl = 1;
+ egl_init(opts->u.dbus.rendernode, mode, &error_fatal);
}
type_register(&dbus_vc_type_info);
diff --git a/ui/egl-headless.c b/ui/egl-headless.c
index ae07e91302..ef70e6a18e 100644
--- a/ui/egl-headless.c
+++ b/ui/egl-headless.c
@@ -1,7 +1,7 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
#include "qemu/module.h"
-#include "sysemu/sysemu.h"
+#include "qapi/error.h"
#include "ui/console.h"
#include "ui/egl-helpers.h"
#include "ui/egl-context.h"
@@ -191,21 +191,21 @@ static const DisplayGLCtxOps eglctx_ops = {
static void early_egl_headless_init(DisplayOptions *opts)
{
- display_opengl = 1;
+ DisplayGLMode mode = DISPLAYGL_MODE_ON;
+
+ if (opts->has_gl) {
+ mode = opts->gl;
+ }
+
+ egl_init(opts->u.egl_headless.rendernode, mode, &error_fatal);
}
static void egl_headless_init(DisplayState *ds, DisplayOptions *opts)
{
- DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_ON;
QemuConsole *con;
egl_dpy *edpy;
int idx;
- if (egl_rendernode_init(opts->u.egl_headless.rendernode, mode) < 0) {
- error_report("egl: render node init failed");
- exit(1);
- }
-
for (idx = 0;; idx++) {
DisplayGLCtx *ctx;
diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c
index b11837415b..4203163ace 100644
--- a/ui/egl-helpers.c
+++ b/ui/egl-helpers.c
@@ -19,6 +19,8 @@
#include "qemu/error-report.h"
#include "ui/console.h"
#include "ui/egl-helpers.h"
+#include "sysemu/sysemu.h"
+#include "qapi/error.h"
EGLDisplay *qemu_egl_display;
EGLConfig qemu_egl_config;
@@ -569,3 +571,25 @@ EGLContext qemu_egl_init_ctx(void)
return ectx;
}
+
+bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp)
+{
+ ERRP_GUARD();
+
+ if (mode == DISPLAYGL_MODE_OFF) {
+ error_setg(errp, "egl: turning off GL doesn't make sense");
+ return false;
+ }
+
+#ifdef CONFIG_GBM
+ if (egl_rendernode_init(rendernode, mode) < 0) {
+ error_setg(errp, "egl: render node init failed");
+ return false;
+ }
+ display_opengl = 1;
+ return true;
+#else
+ error_setg(errp, "egl: not available on this platform");
+ return false;
+#endif
+}
diff --git a/ui/spice-core.c b/ui/spice-core.c
index 76f7c2bc3d..b05c830086 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -820,12 +820,7 @@ static void qemu_spice_init(void)
"incompatible with -spice port/tls-port");
exit(1);
}
- if (egl_rendernode_init(qemu_opt_get(opts, "rendernode"),
- DISPLAYGL_MODE_ON) != 0) {
- error_report("Failed to initialize EGL render node for SPICE GL");
- exit(1);
- }
- display_opengl = 1;
+ egl_init(qemu_opt_get(opts, "rendernode"), DISPLAYGL_MODE_ON, &error_fatal);
spice_opengl = 1;
}
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 17/18] ui/dbus: do not require opengl & gbm
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (15 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 16/18] ui: introduce egl_init() marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:23 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config marcandre.lureau
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
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 | 4 ++--
ui/dbus-listener.c | 15 +++++++++++++--
ui/dbus.c | 8 ++++++++
tests/qtest/meson.build | 2 +-
ui/meson.build | 4 ++--
5 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 6bcab8bf0d..29f8644d6d 100644
--- a/meson.build
+++ b/meson.build
@@ -1746,8 +1746,8 @@ 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') \
+ .require(targetos != 'windows',
+ error_message: '-display dbus is not available on Windows') \
.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 c9292b64fb..85ea4e8d99 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
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
` (16 preceding siblings ...)
2023-03-13 10:12 ` [PATCH v3 17/18] ui/dbus: do not require opengl & gbm marcandre.lureau
@ 2023-03-13 10:12 ` marcandre.lureau
2023-03-13 10:23 ` Daniel P. Berrangé
17 siblings, 1 reply; 25+ messages in thread
From: marcandre.lureau @ 2023-03-13 10:12 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, Thomas Huth
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>
---
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);
--
2.39.2
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v3 11/18] ui/sdl: get the GL context from the window
2023-03-13 10:12 ` [PATCH v3 11/18] ui/sdl: get the GL context from the window marcandre.lureau
@ 2023-03-13 10:18 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:18 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:00PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> There is no guarantee to have a current GL context here. The current
> code seems to rely on the renderer using a GL backend, and to set a
> current GL context. But this is not always the case, for example if the
> renderer backend is DirectX.
>
> This change is enough to fix using virgl with sdl2 on win32, on my setup.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/sdl2.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment
2023-03-13 10:12 ` [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment marcandre.lureau
@ 2023-03-13 10:20 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:20 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:03PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Enable SDL logging when QEMU_ENABLE_SDL_LOGGING variable is set, as
> suggested by Sam Lantinga, upstream SDL maintainer.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/sdl2.c | 4 ++++
> 1 file changed, 4 insertions(+)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer
2023-03-13 10:12 ` [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer marcandre.lureau
@ 2023-03-13 10:21 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:21 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:04PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> -display sdl,gl=es didn't actually use OpenGL ES.
>
> Using OpenGL ES allows to use ANGLE, which works generally better than
> Windows/OEM OpenGL driver.
>
> (note: users can still bypass the QEMU choice with SDL_RENDER_DRIVER
> environment variable)
>
> (note: for some reason, specifying a driver disables batching and
> breaks rendering, so enable it explicitly)
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/sdl2.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 16/18] ui: introduce egl_init()
2023-03-13 10:12 ` [PATCH v3 16/18] ui: introduce egl_init() marcandre.lureau
@ 2023-03-13 10:22 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:22 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:05PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Future patches will introduce EGL support on win32 (too late for 8.0
> though). Having a common place for EGL initialization and error handling
> will make it simpler.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/ui/egl-helpers.h | 2 ++
> ui/dbus.c | 7 +------
> ui/egl-headless.c | 16 ++++++++--------
> ui/egl-helpers.c | 24 ++++++++++++++++++++++++
> ui/spice-core.c | 7 +------
> 5 files changed, 36 insertions(+), 20 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 17/18] ui/dbus: do not require opengl & gbm
2023-03-13 10:12 ` [PATCH v3 17/18] ui/dbus: do not require opengl & gbm marcandre.lureau
@ 2023-03-13 10:23 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:23 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:06PM +0400, 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 | 4 ++--
> ui/dbus-listener.c | 15 +++++++++++++--
> ui/dbus.c | 8 ++++++++
> tests/qtest/meson.build | 2 +-
> ui/meson.build | 4 ++--
> 5 files changed, 26 insertions(+), 7 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config
2023-03-13 10:12 ` [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config marcandre.lureau
@ 2023-03-13 10:23 ` Daniel P. Berrangé
0 siblings, 0 replies; 25+ messages in thread
From: Daniel P. Berrangé @ 2023-03-13 10:23 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, Gerd Hoffmann, Paolo Bonzini,
Philippe Mathieu-Daudé, Laurent Vivier, Thomas Huth
On Mon, Mar 13, 2023 at 02:12:07PM +0400, marcandre.lureau@redhat.com wrote:
> 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>
> ---
> ui/dbus-listener.c | 10 +++++-----
> ui/dbus.c | 12 +++++++++++-
> 2 files changed, 16 insertions(+), 6 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2023-03-13 10:24 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-13 10:11 [PATCH v3 00/18] ui: dbus & misc fixes marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 01/18] ui/dbus: initialize cursor_fb marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 02/18] ui/dbus: unregister clipboard on connection close marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 03/18] audio/dbus: there are no sender for p2p mode marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 04/18] ui/dbus: set mouse is-absolute during console creation marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 05/18] meson: ensure dbus-display generated code is built before other units marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 06/18] ui: rename cursor_{put->unref} marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 07/18] ui: rename cursor_{get->ref}, return it marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 08/18] ui: keep current cursor with QemuConsole marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 09/18] ui: set cursor upon listener registration marcandre.lureau
2023-03-13 10:11 ` [PATCH v3 10/18] ui: set cursor position " marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 11/18] ui/sdl: get the GL context from the window marcandre.lureau
2023-03-13 10:18 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 12/18] ui/shader: fix #version directive must occur on first line marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 13/18] ui/egl: print EGL error, helping debugging marcandre.lureau
2023-03-13 10:12 ` [PATCH v3 14/18] ui/sdl: add QEMU_ENABLE_SDL_LOGGING setting/environment marcandre.lureau
2023-03-13 10:20 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 15/18] ui/sdl: try to instantiate the matching opengl renderer marcandre.lureau
2023-03-13 10:21 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 16/18] ui: introduce egl_init() marcandre.lureau
2023-03-13 10:22 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 17/18] ui/dbus: do not require opengl & gbm marcandre.lureau
2023-03-13 10:23 ` Daniel P. Berrangé
2023-03-13 10:12 ` [PATCH v3 18/18] ui/dbus: restrict opengl to gbm-enabled config marcandre.lureau
2023-03-13 10:23 ` Daniel P. Berrangé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).