diff mbox series

[for,8.2] ui/gtk-egl: move function calls back to regular code path

Message ID 20231111104020.26183-1-vr_qemu@t-online.de
State New
Headers show
Series [for,8.2] ui/gtk-egl: move function calls back to regular code path | expand

Commit Message

Volker Rümelin Nov. 11, 2023, 10:40 a.m. UTC
Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
scanout") introduced a regression when QEMU is running with a
virtio-gpu-gl-device on a host under X11. After the guest has
initialized the virtio-gpu-gl-device, the guest screen only
shows "Display output is not active.".

Commit 6f189a08c1 moved all function calls in
gd_egl_scanout_texture() to a code path which is only called
once after gd_egl_init() succeeds in gd_egl_scanout_texture().
Move all function calls in gd_egl_scanout_texture() back to
the regular code path so they get always called if one of the
gd_egl_init() calls was successful.

Fixes: 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing scanout")
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
 ui/gtk-egl.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Volker Rümelin Nov. 11, 2023, 12:50 p.m. UTC | #1
Cc: Antonio

> Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
> scanout") introduced a regression when QEMU is running with a
> virtio-gpu-gl-device on a host under X11. After the guest has
> initialized the virtio-gpu-gl-device, the guest screen only
> shows "Display output is not active.".
>
> Commit 6f189a08c1 moved all function calls in
> gd_egl_scanout_texture() to a code path which is only called
> once after gd_egl_init() succeeds in gd_egl_scanout_texture().
> Move all function calls in gd_egl_scanout_texture() back to
> the regular code path so they get always called if one of the
> gd_egl_init() calls was successful.
>
> Fixes: 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing scanout")
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
> ---
>  ui/gtk-egl.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index cd2f176502..3af5ac5bcf 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -249,14 +249,14 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl,
>          if (!vc->gfx.esurface) {
>              return;
>          }
> +    }
>  
> -        eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> -                       vc->gfx.esurface, vc->gfx.ectx);
> +    eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> +                   vc->gfx.esurface, vc->gfx.ectx);
>  
> -        gtk_egl_set_scanout_mode(vc, true);
> -        egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> -                             backing_id, false);
> -    }
> +    gtk_egl_set_scanout_mode(vc, true);
> +    egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> +                         backing_id, false);
>  }
>  
>  void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
Marc-André Lureau Nov. 13, 2023, 8:26 a.m. UTC | #2
Hi

On Sat, Nov 11, 2023 at 2:40 PM Volker Rümelin <vr_qemu@t-online.de> wrote:
>
> Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
> scanout") introduced a regression when QEMU is running with a
> virtio-gpu-gl-device on a host under X11. After the guest has
> initialized the virtio-gpu-gl-device, the guest screen only
> shows "Display output is not active.".
>
> Commit 6f189a08c1 moved all function calls in
> gd_egl_scanout_texture() to a code path which is only called
> once after gd_egl_init() succeeds in gd_egl_scanout_texture().
> Move all function calls in gd_egl_scanout_texture() back to
> the regular code path so they get always called if one of the
> gd_egl_init() calls was successful.
>
> Fixes: 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing scanout")
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  ui/gtk-egl.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index cd2f176502..3af5ac5bcf 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -249,14 +249,14 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl,
>          if (!vc->gfx.esurface) {
>              return;
>          }
> +    }
>
> -        eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> -                       vc->gfx.esurface, vc->gfx.ectx);
> +    eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> +                   vc->gfx.esurface, vc->gfx.ectx);
>
> -        gtk_egl_set_scanout_mode(vc, true);
> -        egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> -                             backing_id, false);
> -    }
> +    gtk_egl_set_scanout_mode(vc, true);
> +    egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> +                         backing_id, false);
>  }
>
>  void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
> --
> 2.35.3
>
Antonio Caggiano Nov. 13, 2023, 9:53 a.m. UTC | #3
Hi Volker,

Thank you for finding this!

On 11/11/2023 11:40, Volker Rümelin wrote:
> Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
> scanout") introduced a regression when QEMU is running with a
> virtio-gpu-gl-device on a host under X11. After the guest has
> initialized the virtio-gpu-gl-device, the guest screen only
> shows "Display output is not active.".
> 
> Commit 6f189a08c1 moved all function calls in
> gd_egl_scanout_texture() to a code path which is only called
> once after gd_egl_init() succeeds in gd_egl_scanout_texture().
> Move all function calls in gd_egl_scanout_texture() back to
> the regular code path so they get always called if one of the
> gd_egl_init() calls was successful.
> 
> Fixes: 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing scanout")
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Reviewed by: Antonio Caggiano <quic_acaggian@quicinc.com>
> ---
>   ui/gtk-egl.c | 12 ++++++------
>   1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index cd2f176502..3af5ac5bcf 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -249,14 +249,14 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl,
>           if (!vc->gfx.esurface) {
>               return;
>           }
> +    }
>   
> -        eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> -                       vc->gfx.esurface, vc->gfx.ectx);
> +    eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> +                   vc->gfx.esurface, vc->gfx.ectx);
>   
> -        gtk_egl_set_scanout_mode(vc, true);
> -        egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> -                             backing_id, false);
> -    }
> +    gtk_egl_set_scanout_mode(vc, true);
> +    egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
> +                         backing_id, false);
>   }
>   
>   void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
Michael Tokarev Nov. 24, 2023, 6:26 a.m. UTC | #4
11.11.2023 13:40, Volker Rümelin wrote:
> Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
> scanout") introduced a regression when QEMU is running with a
> virtio-gpu-gl-device on a host under X11. After the guest has
> initialized the virtio-gpu-gl-device, the guest screen only
> shows "Display output is not active.".
> 
> Commit 6f189a08c1 moved all function calls in
> gd_egl_scanout_texture() to a code path which is only called
> once after gd_egl_init() succeeds in gd_egl_scanout_texture().
> Move all function calls in gd_egl_scanout_texture() back to
> the regular code path so they get always called if one of the
> gd_egl_init() calls was successful.
> 
> Fixes:
Volker Rümelin Dec. 3, 2023, 4:37 p.m. UTC | #5
Am 13.11.23 um 09:26 schrieb Marc-André Lureau:
> Hi
>
> On Sat, Nov 11, 2023 at 2:40 PM Volker Rümelin <vr_qemu@t-online.de> wrote:
>> Commit 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing
>> scanout") introduced a regression when QEMU is running with a
>> virtio-gpu-gl-device on a host under X11. After the guest has
>> initialized the virtio-gpu-gl-device, the guest screen only
>> shows "Display output is not active.".
>>
>> Commit 6f189a08c1 moved all function calls in
>> gd_egl_scanout_texture() to a code path which is only called
>> once after gd_egl_init() succeeds in gd_egl_scanout_texture().
>> Move all function calls in gd_egl_scanout_texture() back to
>> the regular code path so they get always called if one of the
>> gd_egl_init() calls was successful.
>>
>> Fixes: 6f189a08c1 ("ui/gtk-egl: Check EGLSurface before doing scanout")
>> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Hi Marc-André,

as the de facto maintainer of the ui directory, could you please send a
pull request for this patch for 8.2-rc3?

With best regards,
Volker

>> ---
>>  ui/gtk-egl.c | 12 ++++++------
>>  1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
>> index cd2f176502..3af5ac5bcf 100644
>> --- a/ui/gtk-egl.c
>> +++ b/ui/gtk-egl.c
>> @@ -249,14 +249,14 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl,
>>          if (!vc->gfx.esurface) {
>>              return;
>>          }
>> +    }
>>
>> -        eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
>> -                       vc->gfx.esurface, vc->gfx.ectx);
>> +    eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
>> +                   vc->gfx.esurface, vc->gfx.ectx);
>>
>> -        gtk_egl_set_scanout_mode(vc, true);
>> -        egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
>> -                             backing_id, false);
>> -    }
>> +    gtk_egl_set_scanout_mode(vc, true);
>> +    egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
>> +                         backing_id, false);
>>  }
>>
>>  void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
>> --
>> 2.35.3
>>
diff mbox series

Patch

diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index cd2f176502..3af5ac5bcf 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -249,14 +249,14 @@  void gd_egl_scanout_texture(DisplayChangeListener *dcl,
         if (!vc->gfx.esurface) {
             return;
         }
+    }
 
-        eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
-                       vc->gfx.esurface, vc->gfx.ectx);
+    eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
+                   vc->gfx.esurface, vc->gfx.ectx);
 
-        gtk_egl_set_scanout_mode(vc, true);
-        egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
-                             backing_id, false);
-    }
+    gtk_egl_set_scanout_mode(vc, true);
+    egl_fb_setup_for_tex(&vc->gfx.guest_fb, backing_width, backing_height,
+                         backing_id, false);
 }
 
 void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,