On 2026/08/25 19:20, Marc-André Lureau wrote:
Use the common virtio_gpu_disable_scanout() to reset the scanout state,
including GL state if any.
This actually:
Fixes: 7c092f17ccee ("virtio-gpu: Handle resource blob commands")
because it properly releases scanout->dmabuf.
Regards,
Akihiko Odaki
Signed-off-by: Marc-André Lureau <[email protected]>
---
hw/display/virtio-gpu-rutabaga.c | 4 +---
hw/display/virtio-gpu-virgl.c | 6 ++----
hw/display/virtio-gpu.c | 7 +++++--
3 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/hw/display/virtio-gpu-rutabaga.c b/hw/display/virtio-gpu-rutabaga.c
index fcd9c94d580c..5344a5f9e26a 100644
--- a/hw/display/virtio-gpu-rutabaga.c
+++ b/hw/display/virtio-gpu-rutabaga.c
@@ -320,9 +320,7 @@ rutabaga_cmd_set_scanout(VirtIOGPU *g, struct
virtio_gpu_ctrl_command *cmd)
scanout = &vb->scanout[ss.scanout_id];
if (ss.resource_id == 0) {
- scanout->resource_id = 0;
- qemu_console_set_surface(scanout->con, NULL);
- qemu_console_gl_scanout_disable(scanout->con);
+ virtio_gpu_disable_scanout(g, ss.scanout_id);
return;
}
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 532132e46031..6cb9365a714f 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -599,8 +599,7 @@ static void virgl_cmd_set_scanout(VirtIOGPU *g,
ss.r.x, ss.r.y, ss.r.width, ss.r.height,
d3d_tex2d);
} else {
- qemu_console_set_surface(g->parent_obj.scanout[ss.scanout_id].con,
NULL);
-
qemu_console_gl_scanout_disable(g->parent_obj.scanout[ss.scanout_id].con);
+ virtio_gpu_disable_scanout(g, ss.scanout_id);
}
g->parent_obj.scanout[ss.scanout_id].resource_id = ss.resource_id;
}
@@ -1406,8 +1405,7 @@ void virtio_gpu_virgl_reset_scanout(VirtIOGPU *g)
int i;
for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
- qemu_console_set_surface(g->parent_obj.scanout[i].con, NULL);
- qemu_console_gl_scanout_disable(g->parent_obj.scanout[i].con);
+ virtio_gpu_disable_scanout(g, i);
}
}
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index c50eb58917e8..a7f549a6a8b9 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -404,8 +404,11 @@ void virtio_gpu_disable_scanout(VirtIOGPU *g, int
scanout_id)
{
struct virtio_gpu_scanout *scanout = &g->parent_obj.scanout[scanout_id];
- virtio_gpu_release_scanout_dmabuf(g, scanout_id);
-
+ if (scanout->dmabuf) {
+ virtio_gpu_release_scanout_dmabuf(g, scanout_id);
+ } else {
+ qemu_console_gl_scanout_disable(scanout->con);
+ }
qemu_console_set_surface(scanout->con, NULL);
scanout->resource_id = 0;
scanout->ds = NULL;