[Mesa-dev] [PATCH] mesa_glinterop: allow building without X and related headers

Chih-Wei Huang cwhuang at android-x86.org
Wed Oct 12 18:15:55 UTC 2016


2016-10-13 1:49 GMT+08:00 Emil Velikov <emil.l.velikov at gmail.com>:
> This commit effectively reverts c10dcb2ce837922c6ee4e191e6d6202098a5ee10
> and fixes the typedef redefinition which inspired it.
>
> In order to prevent requiring X packages at build time earlier commit
> forward declared the required X/GLX typedefs. Since that approach
> introduced typedef redefinition (a C11 feature) it was reverted.
>
> To avoid the redefinition while _not_ mandating X and related headers
> forward declare the structs and use those through the header.
>
> As anyone uses the mesa interop header they ensure that the X (or others
> in terms of EGL) headers are included, which ensures that everything is
> resolved within the compilation unit.
>
> Cc: Vinson Lee <vlee at freedesktop.org>
> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
> Cc: Tapani Pälli <tapani.palli at intel.com>
> Cc: Chih-Wei Huang <cwhuang at android-x86.org>
> Fixes: c10dcb2ce837 ("Revert "mesa_glinterop: remove inclusion of GLX
> header"")
> Fixes: 8472045b16b3 ("mesa_glinterop: remove inclusion of GLX header")
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96770
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> ---
> TL;DR; Yay typedefs, because they make things so much better ;-)
>
> Tapani/Chih-Wei, this should fix the breakage that you are seing. Please
> let me know if it sorts things on your end.
>
> Vison, this should resolve things on your end as well. A confirmation
> would be great.
> ---
>  include/GL/mesa_glinterop.h | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/include/GL/mesa_glinterop.h b/include/GL/mesa_glinterop.h
> index c6a967e..173476a 100644
> --- a/include/GL/mesa_glinterop.h
> +++ b/include/GL/mesa_glinterop.h
> @@ -52,12 +52,15 @@
>
>  #include <stddef.h>
>  #include <stdint.h>
> -#include <GL/glx.h>
>
>  #ifdef __cplusplus
>  extern "C" {
>  #endif
>
> +/* Forward declarations to avoid inclusion of GL/glx.h */
> +struct _XDisplay;
> +struct __GLXcontextRec;
> +
>  /* Forward declarations to avoid inclusion of EGL/egl.h */
>  typedef void *EGLDisplay;
>  typedef void *EGLContext;
> @@ -243,7 +246,7 @@ struct mesa_glinterop_export_out {
>   * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
>   */
>  int
> -MesaGLInteropGLXQueryDeviceInfo(Display *dpy, GLXContext context,
> +MesaGLInteropGLXQueryDeviceInfo(struct _XDisplay *dpy, struct __GLXcontextRec *context,
>                                  struct mesa_glinterop_device_info *out);
>
>
> @@ -268,7 +271,7 @@ MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context,
>   * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
>   */
>  int
> -MesaGLInteropGLXExportObject(Display *dpy, GLXContext context,
> +MesaGLInteropGLXExportObject(struct _XDisplay *dpy, struct __GLXcontextRec *context,
>                               struct mesa_glinterop_export_in *in,
>                               struct mesa_glinterop_export_out *out);
>
> @@ -283,11 +286,11 @@ MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context,
>                               struct mesa_glinterop_export_out *out);
>
>
> -typedef int (PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(Display *dpy, GLXContext context,
> +typedef int (PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
>                                                       struct mesa_glinterop_device_info *out);
>  typedef int (PFNMESAGLINTEROPEGLQUERYDEVICEINFOPROC)(EGLDisplay dpy, EGLContext context,
>                                                       struct mesa_glinterop_device_info *out);
> -typedef int (PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(Display *dpy, GLXContext context,
> +typedef int (PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
>                                                    struct mesa_glinterop_export_in *in,
>                                                    struct mesa_glinterop_export_out *out);
>  typedef int (PFNMESAGLINTEROPEGLEXPORTOBJECTPROC)(EGLDisplay dpy, EGLContext context,
> --
> 2.10.0
>

Build OK on Android 7.0. Thanks!

BTW, the typedef EGLDisplay and EGLContext
has similar redefinition issues.
Should we fix them in the same way?

[ 95% 667/699] target  C: libGLES_mesa <=
external/mesa/src/egl/drivers/dri2/egl_dri2.c
In file included from external/mesa/src/egl/drivers/dri2/egl_dri2.c:58:
In file included from external/mesa/src/egl/drivers/dri2/egl_dri2.h:73:
In file included from external/mesa/src/egl/main/eglconfig.h:39:
In file included from external/mesa/src/egl/main/egltypedefs.h:34:
external/mesa/include/EGL/egl.h:55:15: warning: redefinition of
typedef 'EGLDisplay' is a C11 feature [-Wtypedef-redefinition]
typedef void *EGLDisplay;
              ^
external/mesa/include/GL/mesa_glinterop.h:65:15: note: previous
definition is here
typedef void *EGLDisplay;
              ^
In file included from external/mesa/src/egl/drivers/dri2/egl_dri2.c:58:
In file included from external/mesa/src/egl/drivers/dri2/egl_dri2.h:73:
In file included from external/mesa/src/egl/main/eglconfig.h:39:
In file included from external/mesa/src/egl/main/egltypedefs.h:34:
external/mesa/include/EGL/egl.h:60:15: warning: redefinition of
typedef 'EGLContext' is a C11 feature [-Wtypedef-redefinition]
typedef void *EGLContext;
              ^
external/mesa/include/GL/mesa_glinterop.h:66:15: note: previous
definition is here
typedef void *EGLContext;
              ^
2 warnings generated.


-- 
Chih-Wei
Android-x86 project
http://www.android-x86.org


More information about the mesa-dev mailing list