Message ID | 20210225013609.73388-3-akihiko.odaki@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,1/3] ui/console: Add placeholder flag to message surface | expand |
> - if (m->scanout_id == 0 && m->width == 0) { > + if (m->width == 0) { > s->ds = qemu_create_placeholder_surface(640, 480, > "Guest disabled display."); > dpy_gfx_replace_surface(con, s->ds); Just call dpy_gfx_replace_surface(con, NULL) here and let console.c create the placeholder? > for (i = 0; i < g->conf.max_outputs; i++) { > g->scanout[i].con = > graphic_console_init(DEVICE(g), i, &virtio_gpu_ops, g); > - if (i > 0) { > - dpy_gfx_replace_surface(g->scanout[i].con, NULL); > - } I think we should call dpy_gfx_replace_surface(..., NULL) unconditionally here instead of removing the call. > + /* primary head */ Comment can go away as we remove the special case for scanout == 0, > + ds = qemu_create_placeholder_surface(scanout->width ?: 640, > + scanout->height ?: 480, > + "Guest disabled display."); > dpy_gfx_replace_surface(scanout->con, ds); likewise "dpy_gfx_replace_surface(..., NULL);" take care, Gerd
2021年2月25日(木) 18:11 Gerd Hoffmann <kraxel@redhat.com>: > > > - if (m->scanout_id == 0 && m->width == 0) { > > + if (m->width == 0) { > > s->ds = qemu_create_placeholder_surface(640, 480, > > "Guest disabled display."); > > dpy_gfx_replace_surface(con, s->ds); > > Just call dpy_gfx_replace_surface(con, NULL) here and let console.c > create the placeholder? I'll change according to this and the comments in the other replies and submit a new version. > > > for (i = 0; i < g->conf.max_outputs; i++) { > > g->scanout[i].con = > > graphic_console_init(DEVICE(g), i, &virtio_gpu_ops, g); > > - if (i > 0) { > > - dpy_gfx_replace_surface(g->scanout[i].con, NULL); > > - } > > I think we should call dpy_gfx_replace_surface(..., NULL) > unconditionally here instead of removing the call. graphic_console_init will set a placeholder anyway so it does not need an additional call. > > > + /* primary head */ > > Comment can go away as we remove the special case for scanout == 0, > > > + ds = qemu_create_placeholder_surface(scanout->width ?: 640, > > + scanout->height ?: 480, > > + "Guest disabled display."); > > dpy_gfx_replace_surface(scanout->con, ds); > > likewise "dpy_gfx_replace_surface(..., NULL);" > > take care, > Gerd >
Hi, > > I think we should call dpy_gfx_replace_surface(..., NULL) > > unconditionally here instead of removing the call. > > graphic_console_init will set a placeholder anyway so it does not need > an additional call. Ah, right, with the initial surface being tagged as placeholder too this should indeed work fine. take care, Gerd
diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 3e911da795e..cb729ed5bc4 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -193,7 +193,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUserGpuMsg *msg) s = &g->parent_obj.scanout[m->scanout_id]; con = s->con; - if (m->scanout_id == 0 && m->width == 0) { + if (m->width == 0) { s->ds = qemu_create_placeholder_surface(640, 480, "Guest disabled display."); dpy_gfx_replace_surface(con, s->ds); diff --git a/hw/display/virtio-gpu-3d.c b/hw/display/virtio-gpu-3d.c index 0b0c11474dd..9eb489077b1 100644 --- a/hw/display/virtio-gpu-3d.c +++ b/hw/display/virtio-gpu-3d.c @@ -179,10 +179,8 @@ static void virgl_cmd_set_scanout(VirtIOGPU *g, info.width, info.height, ss.r.x, ss.r.y, ss.r.width, ss.r.height); } else { - if (ss.scanout_id != 0) { - dpy_gfx_replace_surface( - g->parent_obj.scanout[ss.scanout_id].con, NULL); - } + dpy_gfx_replace_surface( + g->parent_obj.scanout[ss.scanout_id].con, NULL); dpy_gl_scanout_disable(g->parent_obj.scanout[ss.scanout_id].con); } g->parent_obj.scanout[ss.scanout_id].resource_id = ss.resource_id; @@ -595,9 +593,7 @@ void virtio_gpu_virgl_reset(VirtIOGPU *g) virgl_renderer_reset(); for (i = 0; i < g->parent_obj.conf.max_outputs; i++) { - if (i != 0) { - dpy_gfx_replace_surface(g->parent_obj.scanout[i].con, NULL); - } + dpy_gfx_replace_surface(g->parent_obj.scanout[i].con, NULL); dpy_gl_scanout_disable(g->parent_obj.scanout[i].con); } } diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 4a57350917c..25f8920fdb6 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -193,9 +193,6 @@ virtio_gpu_base_device_realize(DeviceState *qdev, for (i = 0; i < g->conf.max_outputs; i++) { g->scanout[i].con = graphic_console_init(DEVICE(g), i, &virtio_gpu_ops, g); - if (i > 0) { - dpy_gfx_replace_surface(g->scanout[i].con, NULL); - } } return true; diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index c1f17bec17e..f6c86cb75c6 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -325,7 +325,7 @@ static void virtio_gpu_disable_scanout(VirtIOGPU *g, int scanout_id) { struct virtio_gpu_scanout *scanout = &g->parent_obj.scanout[scanout_id]; struct virtio_gpu_simple_resource *res; - DisplaySurface *ds = NULL; + DisplaySurface *ds; if (scanout->resource_id == 0) { return; @@ -336,12 +336,10 @@ static void virtio_gpu_disable_scanout(VirtIOGPU *g, int scanout_id) res->scanout_bitmask &= ~(1 << scanout_id); } - if (scanout_id == 0) { - /* primary head */ - ds = qemu_create_placeholder_surface(scanout->width ?: 640, - scanout->height ?: 480, - "Guest disabled display."); - } + /* primary head */ + ds = qemu_create_placeholder_surface(scanout->width ?: 640, + scanout->height ?: 480, + "Guest disabled display."); dpy_gfx_replace_surface(scanout->con, ds); scanout->resource_id = 0; scanout->ds = NULL;
In the past, virtio-gpu set NULL as the surface for the secondary consoles to hide its window. The distinction is now handled in ui/console and the display backends and virtio-gpu does no longer have to do that. Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com> --- hw/display/vhost-user-gpu.c | 2 +- hw/display/virtio-gpu-3d.c | 10 +++------- hw/display/virtio-gpu-base.c | 3 --- hw/display/virtio-gpu.c | 12 +++++------- 4 files changed, 9 insertions(+), 18 deletions(-)