virtio-gpu: block any rendering until client (ui) is done
Wire up gl_block callback, so ui code can request to stop virtio-gpu rendering. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
0c55a1cfd3
commit
321c9adba5
@ -383,6 +383,11 @@ void virtio_gpu_virgl_process_cmd(VirtIOGPU *g,
|
||||
{
|
||||
VIRTIO_GPU_FILL_CMD(cmd->cmd_hdr);
|
||||
|
||||
cmd->waiting = g->renderer_blocked;
|
||||
if (cmd->waiting) {
|
||||
return;
|
||||
}
|
||||
|
||||
virgl_renderer_force_ctx_0();
|
||||
switch (cmd->cmd_hdr.type) {
|
||||
case VIRTIO_GPU_CMD_CTX_CREATE:
|
||||
|
@ -897,11 +897,22 @@ static int virtio_gpu_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void virtio_gpu_gl_block(void *opaque, bool block)
|
||||
{
|
||||
VirtIOGPU *g = opaque;
|
||||
|
||||
g->renderer_blocked = block;
|
||||
if (!block) {
|
||||
virtio_gpu_process_cmdq(g);
|
||||
}
|
||||
}
|
||||
|
||||
const GraphicHwOps virtio_gpu_ops = {
|
||||
.invalidate = virtio_gpu_invalidate_display,
|
||||
.gfx_update = virtio_gpu_update_display,
|
||||
.text_update = virtio_gpu_text_update,
|
||||
.ui_info = virtio_gpu_ui_info,
|
||||
.gl_block = virtio_gpu_gl_block,
|
||||
};
|
||||
|
||||
static void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
||||
|
@ -66,11 +66,21 @@ static int virtio_vga_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void virtio_vga_gl_block(void *opaque, bool block)
|
||||
{
|
||||
VirtIOVGA *vvga = opaque;
|
||||
|
||||
if (virtio_gpu_ops.gl_block) {
|
||||
virtio_gpu_ops.gl_block(&vvga->vdev, block);
|
||||
}
|
||||
}
|
||||
|
||||
static const GraphicHwOps virtio_vga_ops = {
|
||||
.invalidate = virtio_vga_invalidate_display,
|
||||
.gfx_update = virtio_vga_update_display,
|
||||
.text_update = virtio_vga_text_update,
|
||||
.ui_info = virtio_vga_ui_info,
|
||||
.gl_block = virtio_vga_gl_block,
|
||||
};
|
||||
|
||||
/* VGA device wrapper around PCI device around virtio GPU */
|
||||
|
@ -107,6 +107,7 @@ typedef struct VirtIOGPU {
|
||||
|
||||
bool use_virgl_renderer;
|
||||
bool renderer_inited;
|
||||
bool renderer_blocked;
|
||||
QEMUTimer *fence_poll;
|
||||
QEMUTimer *print_stats;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user