On 12 October 2016 at 19:15, Chih-Wei Huang <cwhu...@android-x86.org> wrote:
> 2016-10-13 1:49 GMT+08:00 Emil Velikov <emil.l.veli...@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 <v...@freedesktop.org>
>> Cc: "12.0" <mesa-sta...@lists.freedesktop.org>
>> Cc: Tapani Pälli <tapani.pa...@intel.com>
>> Cc: Chih-Wei Huang <cwhu...@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.veli...@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?
>
Yes and no... for EGL the actual typedefs vary based on some very
"interesting" and fragile heuristics. So one would either need to a)
import the here (very bad idea), b) see how my earlier series to
untangle it goes [1] and use the 'generic' typedef or c) see if is an
actual issue somewhere and worry about it then.

I'm leaning towards the last one ;-)
Emil

[1] https://patchwork.freedesktop.org/series/12778/
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to