[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 16/37] ui: dispatch GL events to all listeners
From: |
marcandre . lureau |
Subject: |
[PATCH v2 16/37] ui: dispatch GL events to all listeners |
Date: |
Sun, 10 Oct 2021 01:08:17 +0400 |
From: Marc-André Lureau <marcandre.lureau@redhat.com>
For now, only one listener can receive GL events. Let's dispatch to all
listeners. (preliminary check ensure there is a single listener now
during regitration, and in next patches, compatible listeners only)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/console.c | 58 +++++++++++++++++++++++++++++++++++++---------------
1 file changed, 42 insertions(+), 16 deletions(-)
diff --git a/ui/console.c b/ui/console.c
index 016ace5029..75e432106b 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1882,8 +1882,12 @@ int dpy_gl_ctx_make_current(QemuConsole *con,
QEMUGLContext ctx)
void dpy_gl_scanout_disable(QemuConsole *con)
{
- assert(con->gl);
- con->gl->ops->dpy_gl_scanout_disable(con->gl);
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
+
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ dcl->ops->dpy_gl_scanout_disable(dcl);
+ }
}
void dpy_gl_scanout_texture(QemuConsole *con,
@@ -1894,58 +1898,80 @@ void dpy_gl_scanout_texture(QemuConsole *con,
uint32_t x, uint32_t y,
uint32_t width, uint32_t height)
{
- assert(con->gl);
- con->gl->ops->dpy_gl_scanout_texture(con->gl, backing_id,
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
+
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ dcl->ops->dpy_gl_scanout_texture(dcl, backing_id,
backing_y_0_top,
backing_width, backing_height,
x, y, width, height);
+ }
}
void dpy_gl_scanout_dmabuf(QemuConsole *con,
QemuDmaBuf *dmabuf)
{
- assert(con->gl);
- con->gl->ops->dpy_gl_scanout_dmabuf(con->gl, dmabuf);
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
+
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ dcl->ops->dpy_gl_scanout_dmabuf(dcl, dmabuf);
+ }
}
void dpy_gl_cursor_dmabuf(QemuConsole *con, QemuDmaBuf *dmabuf,
bool have_hot, uint32_t hot_x, uint32_t hot_y)
{
- assert(con->gl);
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
- if (con->gl->ops->dpy_gl_cursor_dmabuf) {
- con->gl->ops->dpy_gl_cursor_dmabuf(con->gl, dmabuf,
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->ops->dpy_gl_cursor_dmabuf) {
+ dcl->ops->dpy_gl_cursor_dmabuf(dcl, dmabuf,
have_hot, hot_x, hot_y);
+ }
}
}
void dpy_gl_cursor_position(QemuConsole *con,
uint32_t pos_x, uint32_t pos_y)
{
- assert(con->gl);
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
- if (con->gl->ops->dpy_gl_cursor_position) {
- con->gl->ops->dpy_gl_cursor_position(con->gl, pos_x, pos_y);
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->ops->dpy_gl_cursor_position) {
+ dcl->ops->dpy_gl_cursor_position(dcl, pos_x, pos_y);
+ }
}
}
void dpy_gl_release_dmabuf(QemuConsole *con,
QemuDmaBuf *dmabuf)
{
- assert(con->gl);
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
- if (con->gl->ops->dpy_gl_release_dmabuf) {
- con->gl->ops->dpy_gl_release_dmabuf(con->gl, dmabuf);
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->ops->dpy_gl_release_dmabuf) {
+ dcl->ops->dpy_gl_release_dmabuf(dcl, dmabuf);
+ }
}
}
void dpy_gl_update(QemuConsole *con,
uint32_t x, uint32_t y, uint32_t w, uint32_t h)
{
+ DisplayState *s = con->ds;
+ DisplayChangeListener *dcl;
+
assert(con->gl);
graphic_hw_gl_block(con, true);
- con->gl->ops->dpy_gl_update(con->gl, x, y, w, h);
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ dcl->ops->dpy_gl_update(dcl, x, y, w, h);
+ }
graphic_hw_gl_block(con, false);
}
--
2.33.0.721.g106298f7f9
- [PATCH v2 06/37] ui/clipboard: add qemu_clipboard_check_serial(), (continued)
- [PATCH v2 06/37] ui/clipboard: add qemu_clipboard_check_serial(), marcandre . lureau, 2021/10/09
- [PATCH v2 07/37] ui/clipboard: add a clipboard reset serial event, marcandre . lureau, 2021/10/09
- [PATCH v2 08/37] hw/display: report an error if virgl initialization failed, marcandre . lureau, 2021/10/09
- [PATCH v2 09/37] virtio-gpu: use VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP, marcandre . lureau, 2021/10/09
- [PATCH v2 10/37] ui: do not delay further remote resize, marcandre . lureau, 2021/10/09
- [PATCH v2 11/37] ui: factor out qemu_console_set_display_gl_ctx(), marcandre . lureau, 2021/10/09
- [PATCH v2 12/37] ui: associate GL context outside of display listener registration, marcandre . lureau, 2021/10/09
- [PATCH v2 13/37] ui: make gl_block use a counter, marcandre . lureau, 2021/10/09
- [PATCH v2 14/37] ui: add a gl-unblock warning timer, marcandre . lureau, 2021/10/09
- [PATCH v2 15/37] ui: simplify gl unblock & flush, marcandre . lureau, 2021/10/09
- [PATCH v2 16/37] ui: dispatch GL events to all listeners,
marcandre . lureau <=
- [PATCH v2 17/37] ui: split the GL context in a different object, marcandre . lureau, 2021/10/09
- [PATCH v2 18/37] ui: move qemu_spice_fill_device_address to ui/util.c, marcandre . lureau, 2021/10/09
- [PATCH v2 19/37] console: save current scanout details, marcandre . lureau, 2021/10/09
- [PATCH v2 20/37] scripts: teach modinfo to skip non-C sources, marcandre . lureau, 2021/10/09
- [PATCH v2 21/37] docs/sphinx: add sphinx modules to include D-Bus documentation, marcandre . lureau, 2021/10/09
- [PATCH v2 22/37] backends: move dbus-vmstate1.xml to backends/, marcandre . lureau, 2021/10/09
- [PATCH v2 23/37] docs: move D-Bus VMState documentation to source XML, marcandre . lureau, 2021/10/09
- [PATCH v2 25/37] build-sys: set glib dependency version, marcandre . lureau, 2021/10/09
- [PATCH v2 24/37] docs: add dbus-display documentation, marcandre . lureau, 2021/10/09
- [PATCH v2 26/37] ui: add a D-Bus display backend, marcandre . lureau, 2021/10/09