@@ -856,13 +856,27 @@ static void spice_gl_switch(DisplayChangeListener *dcl,
{
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
EGLint stride, fourcc;
+ bool resize = true;
int fd;
+ if (ssd->ds && new_surface &&
+ surface_width(ssd->ds) == surface_width(new_surface) &&
+ surface_height(ssd->ds) == surface_height(new_surface) &&
+ surface_format(ssd->ds) == surface_format(new_surface)) {
+ resize = false;
+ }
+
if (ssd->ds) {
surface_gl_destroy_texture(ssd->gls, ssd->ds);
+ if (resize) {
+ qemu_spice_destroy_host_primary(ssd);
+ }
}
ssd->ds = new_surface;
if (ssd->ds) {
+ if (resize) {
+ qemu_spice_create_host_primary(ssd);
+ }
surface_gl_create_texture(ssd->gls, ssd->ds);
fd = egl_get_fd_for_texture(ssd->ds->texture,
&stride, &fourcc);
Current spice client expects we create a primary surface, even if we do display updates using dma-bufs exclusively. So just do that to get things going. Not fully clear whenever that is intentional or a bug on the spice side, so I keep this as separate patch for now. I think this should either be squashed into the previous patch, or dropped after fixing things on the spice side. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- ui/spice-display.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)