[RFC PATCH-for-6.2] ui/gtk-egl: Fix build failure when libgbm is not available

Philippe Mathieu-Daudé posted 1 patch 2 years, 6 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20211108083129.1262040-1-f4bug@amsat.org
ui/gtk-egl.c | 2 ++
1 file changed, 2 insertions(+)
[RFC PATCH-for-6.2] ui/gtk-egl: Fix build failure when libgbm is not available
Posted by Philippe Mathieu-Daudé 2 years, 6 months ago
Since commit 4872a023a59 ("ui/gtk-egl: guest fb texture needs
to be regenerated when reinitializing egl") we get on Ubuntu
18.04.4 LTS and Debian Buster (oldstable):

  $ ../configure --enable-virglrenderer
  [...]
  ui/gtk-egl.c: In function 'gd_egl_refresh':
  ui/gtk-egl.c:159:13: error: implicit declaration of function 'egl_dmabuf_release_texture' [-Werror=implicit-function-declaration]
    159 |             egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
        |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
  ui/gtk-egl.c:159:13: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes]
  ui/gtk-egl.c:159:13: error: nested extern declaration of 'egl_dmabuf_release_texture' [-Werror=nested-externs]

Fix by restricting the egl_dmabuf_release_texture() call to the
availability of the generic buffer management library (libgbm).

Fixes: 4872a023a593e6519b272a
Cc: Dongwon Kim <dongwon.kim@intel.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Reported-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 ui/gtk-egl.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index f2026e4b5c9..45cb67712df 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -155,10 +155,12 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
             surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
             surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
         }
+#ifdef CONFIG_GBM
         if (vc->gfx.guest_fb.dmabuf) {
             egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
             gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
         }
+#endif
     }
 
     graphic_hw_update(dcl->con);
-- 
2.31.1

Re: [RFC PATCH-for-6.2] ui/gtk-egl: Fix build failure when libgbm is not available
Posted by Laurent Vivier 2 years, 6 months ago
Le 08/11/2021 à 09:31, Philippe Mathieu-Daudé a écrit :
> Since commit 4872a023a59 ("ui/gtk-egl: guest fb texture needs
> to be regenerated when reinitializing egl") we get on Ubuntu
> 18.04.4 LTS and Debian Buster (oldstable):
> 
>    $ ../configure --enable-virglrenderer
>    [...]
>    ui/gtk-egl.c: In function 'gd_egl_refresh':
>    ui/gtk-egl.c:159:13: error: implicit declaration of function 'egl_dmabuf_release_texture' [-Werror=implicit-function-declaration]
>      159 |             egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
>          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
>    ui/gtk-egl.c:159:13: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes]
>    ui/gtk-egl.c:159:13: error: nested extern declaration of 'egl_dmabuf_release_texture' [-Werror=nested-externs]
> 
> Fix by restricting the egl_dmabuf_release_texture() call to the
> availability of the generic buffer management library (libgbm).
> 
> Fixes: 4872a023a593e6519b272a
> Cc: Dongwon Kim <dongwon.kim@intel.com>
> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> Reported-by: Laurent Vivier <laurent@vivier.eu>
> Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>   ui/gtk-egl.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index f2026e4b5c9..45cb67712df 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -155,10 +155,12 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
>               surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
>               surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
>           }
> +#ifdef CONFIG_GBM
>           if (vc->gfx.guest_fb.dmabuf) {
>               egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
>               gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
>           }
> +#endif
>       }
>   
>       graphic_hw_update(dcl->con);
> 

On Fedora 34 too.

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Tested-by: Laurent Vivier <laurent@vivier.eu>

Re: [RFC PATCH-for-6.2] ui/gtk-egl: Fix build failure when libgbm is not available
Posted by Paolo Bonzini 2 years, 6 months ago
On 11/8/21 09:31, Philippe Mathieu-Daudé wrote:
> Since commit 4872a023a59 ("ui/gtk-egl: guest fb texture needs
> to be regenerated when reinitializing egl") we get on Ubuntu
> 18.04.4 LTS and Debian Buster (oldstable):
> 
>    $ ../configure --enable-virglrenderer
>    [...]
>    ui/gtk-egl.c: In function 'gd_egl_refresh':
>    ui/gtk-egl.c:159:13: error: implicit declaration of function 'egl_dmabuf_release_texture' [-Werror=implicit-function-declaration]
>      159 |             egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
>          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
>    ui/gtk-egl.c:159:13: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes]
>    ui/gtk-egl.c:159:13: error: nested extern declaration of 'egl_dmabuf_release_texture' [-Werror=nested-externs]
> 
> Fix by restricting the egl_dmabuf_release_texture() call to the
> availability of the generic buffer management library (libgbm).

Matches other uses of the variable; queued the patch, thanks.

Paolo

> Fixes: 4872a023a593e6519b272a
> Cc: Dongwon Kim <dongwon.kim@intel.com>
> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> Reported-by: Laurent Vivier <laurent@vivier.eu>
> Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>   ui/gtk-egl.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index f2026e4b5c9..45cb67712df 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -155,10 +155,12 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
>               surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
>               surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
>           }
> +#ifdef CONFIG_GBM
>           if (vc->gfx.guest_fb.dmabuf) {
>               egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
>               gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
>           }
> +#endif
>       }
>   
>       graphic_hw_update(dcl->con);
>