From 69af5ab34fc6c092f90fd3103f5f98818b1de71c Mon Sep 17 00:00:00 2001 From: Peter Seiderer Date: Mon, 10 May 2021 21:53:52 +0200 Subject: [PATCH] package/rpi-userland: add GLint64, GLuint64 and GLsync typedefs to GLES2/gl2ext.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: - https://bugs.busybox.net/show_bug.cgi?id=13796 .../host/arm-linucleus-linux-gnueabihf/sysroot/usr/include/gstreamer-1.0/gst/gl/glprototypes/gstgl_compat.h:40:18: error: conflicting declaration ‘typedef void* GLsync’ 40 | typedef gpointer GLsync; | ^~~~~~ .../host/arm-linucleus-linux-gnueabihf/sysroot/usr/include/qt5/QtGui/qopengles2ext.h:24:26: note: previous declaration as ‘typedef struct __GLsync* GLsync’ 24 | typedef struct __GLsync *GLsync; | ^~~~~~ File gstgl_compat.h: 39 #if !GST_GL_HAVE_GLSYNC 40 typedef gpointer GLsync; 41 #endif File qopengles2ext.h: 1 #ifndef __gles2_gl2ext_h_ 2 #define __gles2_gl2ext_h_ 1 3 4 #if 0 5 #pragma qt_no_master_include 6 #pragma qt_sync_skip_header_check 7 #pragma qt_sync_stop_processing 8 #endif 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 14 #ifndef __gl3_h_ 15 /* These types are defined with reference to 16 * in the Apple extension spec, but here we use the Khronos 17 * portable types in khrplatform.h, and assume those types 18 * are always defined. 19 * If any other extensions using these types are defined, 20 * the typedefs must move out of this block and be shared. 21 */ 22 typedef khronos_int64_t GLint64; 23 typedef khronos_uint64_t GLuint64; 24 typedef struct __GLsync *GLsync; 25 #endif The problem is that rpi-userland doesn't define GLsync, and both GStreamer and Qt have their own definition of GLsync in this case, but they are not the same. We reported this issue to: * rpi-userland, to get the headers updated: https://github.com/raspberrypi/userland/issues/469#issuecomment-1193864294 * gstreamer, to get their bogus definition of GLsync fixed: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/973 In the mean time, fix this by adding the missing definitions to rpi-userland, so that GStreamer and Qt don't try to provide their own. Signed-off-by: Peter Seiderer Signed-off-by: Thomas Petazzoni (cherry picked from commit e008c0bb104eb952cab27b3887912529f9e8e10e) Signed-off-by: Peter Korsgaard --- ...dd-GLint64-GLuint64-and-GLsync-typed.patch | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 package/rpi-userland/0007-GLES2-gl2ext.h-add-GLint64-GLuint64-and-GLsync-typed.patch diff --git a/package/rpi-userland/0007-GLES2-gl2ext.h-add-GLint64-GLuint64-and-GLsync-typed.patch b/package/rpi-userland/0007-GLES2-gl2ext.h-add-GLint64-GLuint64-and-GLsync-typed.patch new file mode 100644 index 0000000000..6dca2e7b8a --- /dev/null +++ b/package/rpi-userland/0007-GLES2-gl2ext.h-add-GLint64-GLuint64-and-GLsync-typed.patch @@ -0,0 +1,99 @@ +From ffb8eafe2d745ddf2f44101ffc4e6599ed096e69 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 10 May 2021 19:15:48 +0200 +Subject: [PATCH] GLES2/gl2ext.h: add GLint64, GLuint64 and GLsync typedefs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes: + +.../host/arm-linucleus-linux-gnueabihf/sysroot/usr/include/gstreamer-1.0/gst/gl/glprototypes/gstgl_compat.h:40:18: error: conflicting declaration ‘typedef void* GLsync’ + 40 | typedef gpointer GLsync; + | ^~~~~~ + +.../host/arm-linucleus-linux-gnueabihf/sysroot/usr/include/qt5/QtGui/qopengles2ext.h:24:26: note: previous declaration as ‘typedef struct __GLsync* GLsync’ + 24 | typedef struct __GLsync *GLsync; + | ^~~~~~ + +File gstgl_compat.h: + + 39 #if !GST_GL_HAVE_GLSYNC + 40 typedef gpointer GLsync; + 41 #endif + +File qopengles2ext.h: + + 1 #ifndef __gles2_gl2ext_h_ + 2 #define __gles2_gl2ext_h_ 1 + 3 + 4 #if 0 + 5 #pragma qt_no_master_include + 6 #pragma qt_sync_skip_header_check + 7 #pragma qt_sync_stop_processing + 8 #endif + 9 + 10 #ifdef __cplusplus + 11 extern "C" { + 12 #endif + 13 + 14 #ifndef __gl3_h_ + 15 /* These types are defined with reference to + 16 * in the Apple extension spec, but here we use the Khronos + 17 * portable types in khrplatform.h, and assume those types + 18 * are always defined. + 19 * If any other extensions using these types are defined, + 20 * the typedefs must move out of this block and be shared. + 21 */ + 22 typedef khronos_int64_t GLint64; + 23 typedef khronos_uint64_t GLuint64; + 24 typedef struct __GLsync *GLsync; + 25 #endif + +The problem is that rpi-userland doesn't define GLsync, and both +GStreamer and Qt have their own definition of GLsync in this case, but +they are not the same. + +We reported this issue to: + + * rpi-userland, to get the headers updated: + https://github.com/raspberrypi/userland/issues/469#issuecomment-1193864294 + + * gstreamer, to get their bogus definition of GLsync fixed: + https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/973 + +In the mean time, fix this by adding the missing definitions to +rpi-userland, so that GStreamer and Qt don't try to provide their own. + +Signed-off-by: Peter Seiderer +--- + interface/khronos/include/GLES2/gl2ext.h | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/interface/khronos/include/GLES2/gl2ext.h b/interface/khronos/include/GLES2/gl2ext.h +index 4eacf7f..96e87ec 100644 +--- a/interface/khronos/include/GLES2/gl2ext.h ++++ b/interface/khronos/include/GLES2/gl2ext.h +@@ -33,6 +33,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + extern "C" { + #endif + ++#ifndef __gl3_h_ ++/* These types are defined with reference to ++ * in the Apple extension spec, but here we use the Khronos ++ * portable types in khrplatform.h, and assume those types ++ * are always defined. ++ * If any other extensions using these types are defined, ++ * the typedefs must move out of this block and be shared. ++ */ ++typedef khronos_int64_t GLint64; ++typedef khronos_uint64_t GLuint64; ++typedef struct __GLsync *GLsync; ++#endif ++ + /* We want this */ + #ifndef GL_GLEXT_PROTOTYPES + #define GL_GLEXT_PROTOTYPES +-- +2.31.1 +