diff options
author | Marc-André Lureau | 2016-06-14 15:44:07 +0200 |
---|---|---|
committer | Gerd Hoffmann | 2016-07-06 10:32:14 +0200 |
commit | c540128f93e17141c63d41a8eb77bde80a2fc752 (patch) | |
tree | 852cc607a6c66a4889b9bdfae3b907c49331b1b1 | |
parent | spice: avoid .set_mm_time on >= 0.12.6 (diff) | |
download | qemu-c540128f93e17141c63d41a8eb77bde80a2fc752.tar.gz qemu-c540128f93e17141c63d41a8eb77bde80a2fc752.tar.xz qemu-c540128f93e17141c63d41a8eb77bde80a2fc752.zip |
virgl: count the calls to gl_block
In virgl_cmd_resource_flush(), when several consoles are updated, it
needs to keep blocking until all spice gl draws are done. This fixes an
assert() in spice when using multiple monitors with virgl.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 1465911849-30423-2-git-send-email-marcandre.lureau@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | hw/display/virtio-gpu.c | 10 | ||||
-rw-r--r-- | include/hw/virtio/virtio-gpu.h | 2 |
2 files changed, 9 insertions, 3 deletions
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 136c095b7d..f8b0274752 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -934,8 +934,14 @@ static void virtio_gpu_gl_block(void *opaque, bool block) { VirtIOGPU *g = opaque; - g->renderer_blocked = block; - if (!block) { + if (block) { + g->renderer_blocked++; + } else { + g->renderer_blocked--; + } + assert(g->renderer_blocked >= 0); + + if (g->renderer_blocked == 0) { virtio_gpu_process_cmdq(g); } } diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index 89f4879f55..3dff0c9a76 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -107,7 +107,7 @@ typedef struct VirtIOGPU { bool use_virgl_renderer; bool renderer_inited; - bool renderer_blocked; + int renderer_blocked; QEMUTimer *fence_poll; QEMUTimer *print_stats; |