Skip to content

Commit

Permalink
spice/gl: add & use qemu_spice_gl_monitor_config
Browse files Browse the repository at this point in the history
Cc: qemu-stable@nongnu.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
(cherry picked from commit 39414ef)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
kraxel authored and mdroth committed Aug 4, 2016
1 parent d00ba3f commit 5b6c12e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/ui/spice-display.h
Expand Up @@ -71,6 +71,7 @@ typedef struct QXLCookie {
QXLRect area;
int redraw;
} render;
void *data;
} u;
} QXLCookie;

Expand Down
30 changes: 30 additions & 0 deletions ui/spice-display.c
Expand Up @@ -660,6 +660,11 @@ static void interface_async_complete(QXLInstance *sin, uint64_t cookie_token)
qemu_bh_schedule(ssd->gl_unblock_bh);
break;
}
case QXL_COOKIE_TYPE_IO:
if (cookie->io == QXL_IO_MONITORS_CONFIG_ASYNC) {
g_free(cookie->u.data);
}
break;
#endif
default:
/* should never be called, used in qxl native mode only */
Expand Down Expand Up @@ -795,6 +800,29 @@ static const DisplayChangeListenerOps display_listener_ops = {

#ifdef HAVE_SPICE_GL

static void qemu_spice_gl_monitor_config(SimpleSpiceDisplay *ssd,
int x, int y, int w, int h)
{
QXLMonitorsConfig *config;
QXLCookie *cookie;

config = g_malloc0(sizeof(QXLMonitorsConfig) + sizeof(QXLHead));
config->count = 1;
config->max_allowed = 1;
config->heads[0].x = x;
config->heads[0].y = y;
config->heads[0].width = w;
config->heads[0].height = h;
cookie = qxl_cookie_new(QXL_COOKIE_TYPE_IO,
QXL_IO_MONITORS_CONFIG_ASYNC);
cookie->u.data = config;

spice_qxl_monitors_config_async(&ssd->qxl,
(uintptr_t)config,
MEMSLOT_GROUP_HOST,
(uintptr_t)cookie);
}

static void qemu_spice_gl_block(SimpleSpiceDisplay *ssd, bool block)
{
uint64_t timeout;
Expand Down Expand Up @@ -858,6 +886,8 @@ static void qemu_spice_gl_scanout(DisplayChangeListener *dcl,
surface_width(ssd->ds),
surface_height(ssd->ds),
stride, fourcc, y_0_top);

qemu_spice_gl_monitor_config(ssd, x, y, w, h);
}

static void qemu_spice_gl_update(DisplayChangeListener *dcl,
Expand Down

0 comments on commit 5b6c12e

Please sign in to comment.