virgl: count the calls to gl_block
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Tue, 14 Jun 2016 13:44:07 +0000 (15:44 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 6 Jul 2016 08:32:14 +0000 (10:32 +0200)
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>
hw/display/virtio-gpu.c
include/hw/virtio/virtio-gpu.h

index 136c095b7d5336dde3657028e7a2184a3165c88e..f8b02747529a183fe2c2223a0c8fa487f8f78b92 100644 (file)
@@ -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);
     }
 }
index 89f4879f55b98f9960da82dc3bc14580df779e25..3dff0c9a765f93db3bb20e4e8c4393f686c73baa 100644 (file)
@@ -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;