diff options
10 files changed, 4188 insertions, 246 deletions
diff --git a/abs/core/mesa/0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch b/abs/core/mesa/0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch new file mode 100644 index 0000000..913a9dd --- /dev/null +++ b/abs/core/mesa/0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch @@ -0,0 +1,3952 @@ +From 97b447ee480a09a744094562da36b019a3eeb10f Mon Sep 17 00:00:00 2001 +From: Kyle Brenneman <kbrenneman@nvidia.com> +Date: Wed, 4 Jan 2017 11:31:58 -0700 +Subject: [PATCH 1/2] EGL: Implement the libglvnd interface for EGL (v2) + +Added separate --enable-libglvnd-glx and --enable-libglvnd-egl configure +options to enable libglvnd for GLX and EGL. The existing --enable-libglvnd +option will now enable both EGL and GLX. + +The new interface mostly just sits on top of the existing library. The only +change to the existing EGL code is to split the client extension string into +platform extensions and everything else. On non-glvnd builds, eglQueryString +will just concatenate the two strings. + +The EGL dispatch stubs are all generated. The script is based on the one used +to generate entrypoints in libglvnd itself. + +v2: + +Rebased against master. + +Reworked the EGL makefile to use separate libtool targets instead of an +automake substitution "lib@EGL_LIB@_la_*" in the variable names. Using the +substitution broke automake's dependency tracking for "make dist". + +Made the EGL code generation scripts work with Python 2 or 3. + +Change gen_egl_dispatch.py to use argparse for the command line arguments. + +Assorted formatting and style cleanup in the Python scripts. +--- + configure.ac | 154 ++- + src/egl/Makefile.am | 97 +- + src/egl/generate/egl.xml | 2412 ++++++++++++++++++++++++++++++++++ + src/egl/generate/eglFunctionList.py | 197 +++ + src/egl/generate/egl_other.xml | 47 + + src/egl/generate/genCommon.py | 223 ++++ + src/egl/generate/gen_egl_dispatch.py | 250 ++++ + src/egl/main/50_mesa.json | 6 + + src/egl/main/eglapi.c | 6 +- + src/egl/main/egldispatchstubs.c | 110 ++ + src/egl/main/egldispatchstubs.h | 26 + + src/egl/main/eglglobals.c | 47 +- + src/egl/main/eglglobals.h | 13 +- + src/egl/main/eglglvnd.c | 82 ++ + 14 files changed, 3576 insertions(+), 94 deletions(-) + create mode 100755 src/egl/generate/egl.xml + create mode 100644 src/egl/generate/eglFunctionList.py + create mode 100644 src/egl/generate/egl_other.xml + create mode 100644 src/egl/generate/genCommon.py + create mode 100755 src/egl/generate/gen_egl_dispatch.py + create mode 100644 src/egl/main/50_mesa.json + create mode 100644 src/egl/main/egldispatchstubs.c + create mode 100644 src/egl/main/egldispatchstubs.h + create mode 100644 src/egl/main/eglglvnd.c + +diff --git a/configure.ac b/configure.ac +index de8af874ec..839b25c057 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -528,8 +528,6 @@ else + DEFINES="$DEFINES -DNDEBUG" + fi + +-DEFAULT_GL_LIB_NAME=GL +- + dnl + dnl Check if linker supports -Bsymbolic + dnl +@@ -627,23 +625,6 @@ esac + + AM_CONDITIONAL(HAVE_COMPAT_SYMLINKS, test "x$HAVE_COMPAT_SYMLINKS" = xyes) + +-DEFAULT_GL_LIB_NAME=GL +- +-dnl +-dnl Libglvnd configuration +-dnl +-AC_ARG_ENABLE([libglvnd], +- [AS_HELP_STRING([--enable-libglvnd], +- [Build for libglvnd @<:@default=disabled@:>@])], +- [enable_libglvnd="$enableval"], +- [enable_libglvnd=no]) +-AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes) +-#AM_COND_IF([USE_LIBGLVND_GLX], [DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1"]) +-if test "x$enable_libglvnd" = xyes ; then +- DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" +- DEFAULT_GL_LIB_NAME=GLX_mesa +-fi +- + dnl + dnl library names + dnl +@@ -677,36 +658,6 @@ esac + + AC_SUBST([LIB_EXT]) + +-AC_ARG_WITH([gl-lib-name], +- [AS_HELP_STRING([--with-gl-lib-name@<:@=NAME@:>@], +- [specify GL library name @<:@default=GL@:>@])], +- [GL_LIB=$withval], +- [GL_LIB="$DEFAULT_GL_LIB_NAME"]) +-AC_ARG_WITH([osmesa-lib-name], +- [AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@], +- [specify OSMesa library name @<:@default=OSMesa@:>@])], +- [OSMESA_LIB=$withval], +- [OSMESA_LIB=OSMesa]) +-AS_IF([test "x$GL_LIB" = xyes], [GL_LIB="$DEFAULT_GL_LIB_NAME"]) +-AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa]) +- +-dnl +-dnl Mangled Mesa support +-dnl +-AC_ARG_ENABLE([mangling], +- [AS_HELP_STRING([--enable-mangling], +- [enable mangled symbols and library name @<:@default=disabled@:>@])], +- [enable_mangling="${enableval}"], +- [enable_mangling=no] +-) +-if test "x${enable_mangling}" = "xyes" ; then +- DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE" +- GL_LIB="Mangled${GL_LIB}" +- OSMESA_LIB="Mangled${OSMESA_LIB}" +-fi +-AC_SUBST([GL_LIB]) +-AC_SUBST([OSMESA_LIB]) +- + dnl + dnl potentially-infringing-but-nobody-knows-for-sure stuff + dnl +@@ -1335,31 +1286,94 @@ AM_CONDITIONAL(HAVE_GALLIUM_XLIB_GLX, test "x$enable_glx" = xgallium-xlib) + dnl + dnl Libglvnd configuration + dnl ++ ++DEFAULT_GL_LIB_NAME=GL ++ + AC_ARG_ENABLE([libglvnd], + [AS_HELP_STRING([--enable-libglvnd], +- [Build for libglvnd @<:@default=disabled@:>@])], ++ [Build GLX and EGL for libglvnd @<:@default=disabled@:>@])], + [enable_libglvnd="$enableval"], + [enable_libglvnd=no]) +-AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes) +-if test "x$enable_libglvnd" = xyes ; then +- dnl XXX: update once we can handle more than libGL/glx. +- dnl Namely: we should error out if neither of the glvnd enabled libraries +- dnl are built +- case "x$enable_glx" in +- xno) +- AC_MSG_ERROR([cannot build libglvnd without GLX]) +- ;; +- xxlib | xgallium-xlib ) +- AC_MSG_ERROR([cannot build libgvnd when Xlib-GLX or Gallium-Xlib-GLX is enabled]) +- ;; +- xdri) +- ;; +- esac ++AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd_glx" = xyes) ++ ++AC_ARG_ENABLE([libglvnd-glx], ++ [AS_HELP_STRING([--enable-libglvnd-glx], ++ [Build GLX for libglvnd @<:@default=disabled@:>@])], ++ [enable_libglvnd_glx="$enableval"], ++ [enable_libglvnd_glx="$enable_libglvnd"]) ++AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd_glx" = xyes) ++ ++AC_ARG_ENABLE([libglvnd-egl], ++ [AS_HELP_STRING([--enable-libglvnd-egl], ++ [Build EGL for libglvnd @<:@default=disabled@:>@])], ++ [enable_libglvnd_egl="$enableval"], ++ [enable_libglvnd_egl="$enable_libglvnd"]) ++AM_CONDITIONAL(USE_LIBGLVND_EGL, test "x$enable_libglvnd_egl" = xyes) ++ ++if test "x$enable_libglvnd_glx" = xyes -o "x$enable_libglvnd_egl" = xyes ; then ++ PKG_CHECK_VAR(LIBGLVND_DATADIR, libglvnd, datadir) ++ AC_SUBST([LIBGLVND_DATADIR]) ++ ++ if test "x$enable_libglvnd_egl" = xyes ; then ++ PKG_CHECK_MODULES([GLVND], libglvnd >= 0.2.0) ++ ++ if test "x$enable_egl" != xyes ; then ++ AC_MSG_ERROR([cannot build libglvnd without EGL]) ++ fi ++ DEFINES="${DEFINES} -DUSE_LIBGLVND_EGL=1" ++ else ++ PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0) ++ fi ++ ++ if test "x$enable_libglvnd_glx" = xyes ; then ++ dnl XXX: update once we can handle more than libGL/glx. ++ dnl Namely: we should error out if neither of the glvnd enabled libraries ++ dnl are built ++ case "x$enable_glx" in ++ xno) ++ AC_MSG_ERROR([cannot build libglvnd without GLX]) ++ ;; ++ xxlib | xgallium-xlib ) ++ AC_MSG_ERROR([cannot build libgvnd when Xlib-GLX or Gallium-Xlib-GLX is enabled]) ++ ;; ++ xdri) ++ ;; ++ esac ++ ++ DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" ++ DEFAULT_GL_LIB_NAME=GLX_mesa ++ fi ++fi ++ ++AC_ARG_WITH([gl-lib-name], ++ [AS_HELP_STRING([--with-gl-lib-name@<:@=NAME@:>@], ++ [specify GL library name @<:@default=GL@:>@])], ++ [GL_LIB=$withval], ++ [GL_LIB="$DEFAULT_GL_LIB_NAME"]) ++AC_ARG_WITH([osmesa-lib-name], ++ [AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@], ++ [specify OSMesa library name @<:@default=OSMesa@:>@])], ++ [OSMESA_LIB=$withval], ++ [OSMESA_LIB=OSMesa]) ++AS_IF([test "x$GL_LIB" = xyes], [GL_LIB="$DEFAULT_GL_LIB_NAME"]) ++AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa]) + +- PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0) +- DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" +- DEFAULT_GL_LIB_NAME=GLX_mesa ++dnl ++dnl Mangled Mesa support ++dnl ++AC_ARG_ENABLE([mangling], ++ [AS_HELP_STRING([--enable-mangling], ++ [enable mangled symbols and library name @<:@default=disabled@:>@])], ++ [enable_mangling="${enableval}"], ++ [enable_mangling=no] ++) ++if test "x${enable_mangling}" = "xyes" ; then ++ DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE" ++ GL_LIB="Mangled${GL_LIB}" ++ OSMESA_LIB="Mangled${OSMESA_LIB}" + fi ++AC_SUBST([GL_LIB]) ++AC_SUBST([OSMESA_LIB]) + + # Check for libdrm + PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED], +@@ -2759,11 +2773,15 @@ xgallium-xlib) + echo " GLX: $enable_glx" + ;; + esac ++if test "x$enable_glx" != xno; then ++ echo " GLX libglvnd: $enable_libglvnd_glx" ++fi + + dnl EGL + echo "" + echo " EGL: $enable_egl" + if test "$enable_egl" = yes; then ++ echo " EGL libglvnd: $enable_libglvnd_egl" + echo " EGL platforms: $egl_platforms" + + egl_drivers="" +diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am +index 78cf525951..3bc62d550f 100644 +--- a/src/egl/Makefile.am ++++ b/src/egl/Makefile.am +@@ -32,19 +32,16 @@ AM_CFLAGS = \ + $(EGL_CFLAGS) \ + -D_EGL_NATIVE_PLATFORM=$(EGL_NATIVE_PLATFORM) + +-lib_LTLIBRARIES = libEGL.la +- +-libEGL_la_SOURCES = \ ++# Depending on whether libglvnd is enabled, we'll build the EGL library as ++# either libEGL.so.1 or libEGL_mesa.so.0. Using an automake substitution ++# in the variable names breaks "make dist" target, so use a conenience library ++# instead. ++noinst_LTLIBRARIES = libEGL_common.la ++libEGL_common_la_SOURCES = \ + $(LIBEGL_C_FILES) + +-libEGL_la_LIBADD = \ ++libEGL_common_la_LIBADD = \ + $(EGL_LIB_DEPS) +-libEGL_la_LDFLAGS = \ +- -no-undefined \ +- -version-number 1:0 \ +- $(BSYMBOLIC) \ +- $(GC_SECTIONS) \ +- $(LD_NO_UNDEFINED) + + dri2_backend_FILES = + dri3_backend_FILES = +@@ -52,7 +49,7 @@ dri3_backend_FILES = + if HAVE_PLATFORM_X11 + AM_CFLAGS += -DHAVE_X11_PLATFORM + AM_CFLAGS += $(XCB_DRI2_CFLAGS) +-libEGL_la_LIBADD += $(XCB_DRI2_LIBS) ++libEGL_common_la_LIBADD += $(XCB_DRI2_LIBS) + dri2_backend_FILES += drivers/dri2/platform_x11.c + + if HAVE_DRI3 +@@ -60,22 +57,22 @@ dri3_backend_FILES += \ + drivers/dri2/platform_x11_dri3.c \ + drivers/dri2/platform_x11_dri3.h + +-libEGL_la_LIBADD += $(top_builddir)/src/loader/libloader_dri3_helper.la ++libEGL_common_la_LIBADD += $(top_builddir)/src/loader/libloader_dri3_helper.la + endif + endif + + if HAVE_PLATFORM_WAYLAND + AM_CFLAGS += -DHAVE_WAYLAND_PLATFORM + AM_CFLAGS += $(WAYLAND_CFLAGS) +-libEGL_la_LIBADD += $(WAYLAND_LIBS) +-libEGL_la_LIBADD += $(LIBDRM_LIBS) +-libEGL_la_LIBADD += $(top_builddir)/src/egl/wayland/wayland-drm/libwayland-drm.la ++libEGL_common_la_LIBADD += $(WAYLAND_LIBS) ++libEGL_common_la_LIBADD += $(LIBDRM_LIBS) ++libEGL_common_la_LIBADD += $(top_builddir)/src/egl/wayland/wayland-drm/libwayland-drm.la + dri2_backend_FILES += drivers/dri2/platform_wayland.c + endif + + if HAVE_EGL_PLATFORM_DRM + AM_CFLAGS += -DHAVE_DRM_PLATFORM +-libEGL_la_LIBADD += $(top_builddir)/src/gbm/libgbm.la ++libEGL_common_la_LIBADD += $(top_builddir)/src/gbm/libgbm.la + dri2_backend_FILES += drivers/dri2/platform_drm.c + endif + +@@ -87,7 +84,7 @@ endif + if HAVE_EGL_PLATFORM_ANDROID + AM_CFLAGS += -DHAVE_ANDROID_PLATFORM + AM_CFLAGS += $(ANDROID_CFLAGS) +-libEGL_la_LIBADD += $(ANDROID_LIBS) ++libEGL_common_la_LIBADD += $(ANDROID_LIBS) + dri2_backend_FILES += drivers/dri2/platform_android.c + endif + +@@ -101,13 +98,68 @@ AM_CFLAGS += \ + -DDEFAULT_DRIVER_DIR=\"$(DRI_DRIVER_SEARCH_DIR)\" \ + -D_EGL_BUILT_IN_DRIVER_DRI2 + +-libEGL_la_SOURCES += \ ++libEGL_common_la_SOURCES += \ + $(dri2_backend_core_FILES) \ + $(dri2_backend_FILES) \ + $(dri3_backend_FILES) + +-libEGL_la_LIBADD += $(top_builddir)/src/loader/libloader.la +-libEGL_la_LIBADD += $(DLOPEN_LIBS) $(LIBDRM_LIBS) $(CLOCK_LIB) ++libEGL_common_la_LIBADD += $(top_builddir)/src/loader/libloader.la ++libEGL_common_la_LIBADD += $(DLOPEN_LIBS) $(LIBDRM_LIBS) $(CLOCK_LIB) ++ ++GLVND_GEN_DEPS = generate/gen_egl_dispatch.py \ ++ generate/egl.xml generate/eglFunctionList.py generate/genCommon.py \ ++ generate/egl_other.xml ++ ++PYTHON_GEN = $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) ++g_egldispatchstubs.c: $(GLVND_GEN_DEPS) ++ $(PYTHON_GEN) $(top_srcdir)/src/egl/generate/gen_egl_dispatch.py source \ ++ $(top_srcdir)/src/egl/generate/eglFunctionList.py \ ++ $(top_srcdir)/src/egl/generate/egl.xml \ ++ $(top_srcdir)/src/egl/generate/egl_other.xml > $@ ++ ++g_egldispatchstubs.h: $(GLVND_GEN_DEPS) ++ $(PYTHON_GEN) $(top_srcdir)/src/egl/generate/gen_egl_dispatch.py header \ ++ $(top_srcdir)/src/egl/generate/eglFunctionList.py \ ++ $(top_srcdir)/src/egl/generate/egl.xml \ ++ $(top_srcdir)/src/egl/generate/egl_other.xml > $@ ++ ++BUILT_SOURCES = g_egldispatchstubs.c g_egldispatchstubs.h ++CLEANFILES = $(BUILT_SOURCES) ++ ++if USE_LIBGLVND_EGL ++AM_CFLAGS += \ ++ $(GLVND_CFLAGS) ++ ++vendorjsondir = @LIBGLVND_DATADIR@/glvnd/egl_vendor.d ++vendorjson_DATA = main/50_mesa.json ++ ++lib_LTLIBRARIES = libEGL_mesa.la ++libEGL_mesa_la_SOURCES = \ ++ main/eglglvnd.c \ ++ main/egldispatchstubs.h \ ++ main/egldispatchstubs.c \ ++ g_egldispatchstubs.c ++libEGL_mesa_la_LIBADD = libEGL_common.la ++libEGL_mesa_la_LDFLAGS = \ ++ -no-undefined \ ++ -version-number 0 \ ++ $(BSYMBOLIC) \ ++ $(GC_SECTIONS) \ ++ $(LD_NO_UNDEFINED) ++ ++else # USE_LIBGLVND_EGL ++ ++lib_LTLIBRARIES = libEGL.la ++libEGL_la_SOURCES = ++libEGL_la_LIBADD = libEGL_common.la ++libEGL_la_LDFLAGS = \ ++ -no-undefined \ ++ -version-number 1:0 \ ++ $(BSYMBOLIC) \ ++ $(GC_SECTIONS) \ ++ $(LD_NO_UNDEFINED) ++ ++endif # USE_LIBGLVND_EGL + + include $(top_srcdir)/install-lib-links.mk + +@@ -133,4 +185,7 @@ EXTRA_DIST = \ + SConscript \ + drivers/haiku \ + main/egl.def \ +- main/README.txt ++ main/README.txt \ ++ $(GLVND_GEN_DEPS) \ ++ main/50_mesa.json ++ +diff --git a/src/egl/generate/egl.xml b/src/egl/generate/egl.xml +new file mode 100755 +index 0000000000..f6dbbc0f26 +--- /dev/null ++++ b/src/egl/generate/egl.xml +@@ -0,0 +1,2412 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<registry> ++ <!-- ++ Copyright (c) 2013-2014 The Khronos Group Inc. ++ ++ Permission is hereby granted, free of charge, to any person obtaining a ++ copy of this software and/or associated documentation files (the ++ "Materials"), to deal in the Materials without restriction, including ++ without limitation the rights to use, copy, modify, merge, publish, ++ distribute, sublicense, and/or sell copies of the Materials, and to ++ permit persons to whom the Materials are furnished to do so, subject to ++ the following conditions: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Materials. ++ ++ THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. ++ --> ++ <!-- ++ This file, egl.xml, is the EGL API Registry. The older ".spec" file ++ format has been retired and will no longer be updated with new ++ extensions and API versions. The canonical version of the registry, ++ together with documentation, schema, and Python generator scripts used ++ to generate C header files for EGL, can be found in the Khronos Registry ++ at ++ http://www.opengl.org/registry/ ++ --> ++ ++ <!-- SECTION: EGL type definitions. Does not include GL types. --> ++ <types> ++ <!-- These are dependencies EGL types require to be declared legally --> ++ <type name="khrplatform">#include <KHR/khrplatform.h></type> ++ <type name="eglplatform" requires="khrplatform">#include <EGL/eglplatform.h></type> ++ <type name="khronos_utime_nanoseconds_t" requires="khrplatform"/> ++ <type name="khronos_uint64_t" requires="khrplatform"/> ++ <type name="khronos_ssize_t" requires="khrplatform"/> ++ <type name="EGLNativeDisplayType" requires="eglplatform"/> ++ <type name="EGLNativePixmapType" requires="eglplatform"/> ++ <type name="EGLNativeWindowType" requires="eglplatform"/> ++ <type name="EGLint" requires="eglplatform"/> ++ <type name="NativeDisplayType" requires="eglplatform"/> ++ <type name="NativePixmapType" requires="eglplatform"/> ++ <type name="NativeWindowType" requires="eglplatform"/> ++ <!-- Dummy placeholders for non-EGL types --> ++ <type name="Bool"/> ++ <!-- These are actual EGL types. --> ++ <type>typedef unsigned int <name>EGLBoolean</name>;</type> ++ <type>typedef unsigned int <name>EGLenum</name>;</type> ++ <type requires="khrplatform">typedef intptr_t <name>EGLAttribKHR</name>;</type> ++ <type requires="khrplatform">typedef intptr_t <name>EGLAttrib</name>;</type> ++ <type>typedef void *<name>EGLClientBuffer</name>;</type> ++ <type>typedef void *<name>EGLConfig</name>;</type> ++ <type>typedef void *<name>EGLContext</name>;</type> ++ <type>typedef void *<name>EGLDeviceEXT</name>;</type> ++ <type>typedef void *<name>EGLDisplay</name>;</type> ++ <type>typedef void *<name>EGLImage</name>;</type> ++ <type>typedef void *<name>EGLImageKHR</name>;</type> ++ <type>typedef void *<name>EGLLabelKHR</name>;</type> ++ <type>typedef void *<name>EGLObjectKHR</name>;</type> ++ <type>typedef void *<name>EGLOutputLayerEXT</name>;</type> ++ <type>typedef void *<name>EGLOutputPortEXT</name>;</type> ++ <type>typedef void *<name>EGLStreamKHR</name>;</type> ++ <type>typedef void *<name>EGLSurface</name>;</type> ++ <type>typedef void *<name>EGLSync</name>;</type> ++ <type>typedef void *<name>EGLSyncKHR</name>;</type> ++ <type>typedef void *<name>EGLSyncNV</name>;</type> ++ <type>typedef void (*<name>__eglMustCastToProperFunctionPointerType</name>)(void);</type> ++ <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLTimeKHR</name>;</type> ++ <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLTime</name>;</type> ++ <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLTimeNV</name>;</type> ++ <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLuint64NV</name>;</type> ++ <type requires="khrplatform">typedef khronos_uint64_t <name>EGLuint64KHR</name>;</type> ++ <type>typedef int <name>EGLNativeFileDescriptorKHR</name>;</type> ++ <type requires="khrplatform">typedef khronos_ssize_t <name>EGLsizeiANDROID</name>;</type> ++ <type requires="EGLsizeiANDROID">typedef void (*<name>EGLSetBlobFuncANDROID</name>) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);</type> ++ <type requires="EGLsizeiANDROID">typedef EGLsizeiANDROID (*<name>EGLGetBlobFuncANDROID</name>) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);</type> ++ <type>struct <name>EGLClientPixmapHI</name> { ++ void *pData; ++ EGLint iWidth; ++ EGLint iHeight; ++ EGLint iStride; ++};</type> ++ <type>typedef void (<apientry/> *<name>EGLDEBUGPROCKHR</name>)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message);</type> ++ </types> ++ ++ <!-- SECTION: EGL enumerant (token) definitions. --> ++ ++ <!-- Bitmasks each have their own namespace, as do a few other ++ categories of enumeration --> ++ ++ <enums namespace="EGLSurfaceTypeMask" type="bitmask" comment="EGL_SURFACE_TYPE bits"> ++ <enum value="0x0001" name="EGL_PBUFFER_BIT"/> ++ <enum value="0x0002" name="EGL_PIXMAP_BIT"/> ++ <enum value="0x0004" name="EGL_WINDOW_BIT"/> ++ <enum value="0x0008" name="EGL_PBUFFER_IMAGE_BIT_TAO" comment="Unreleased TAO extension"/> ++ <enum value="0x0010" name="EGL_PBUFFER_PALETTE_IMAGE_BIT_TAO" comment="Unreleased TAO extension"/> ++ <enum value="0x0020" name="EGL_VG_COLORSPACE_LINEAR_BIT"/> ++ <enum value="0x0020" name="EGL_VG_COLORSPACE_LINEAR_BIT_KHR"/> ++ <enum value="0x0040" name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/> ++ <enum value="0x0040" name="EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR"/> ++ <enum value="0x0080" name="EGL_LOCK_SURFACE_BIT_KHR"/> ++ <enum value="0x0100" name="EGL_OPTIMAL_FORMAT_BIT_KHR"/> ++ <enum value="0x0200" name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/> ++ <enum value="0x0400" name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/> ++ <enum value="0x0800" name="EGL_STREAM_BIT_KHR"/> ++ <!-- ++ <enum value="0x0800" name="EGL_STREAM_BIT_NV" comment="Draft EGL_NV_stream_producer_eglsurface extension (bug 8064)"/> ++ --> ++ </enums> ++ ++ <enums namespace="EGLRenderableTypeMask" type="bitmask" comment="EGL_RENDERABLE_TYPE bits"> ++ <enum value="0x0001" name="EGL_OPENGL_ES_BIT"/> ++ <enum value="0x0002" name="EGL_OPENVG_BIT"/> ++ <enum value="0x0004" name="EGL_OPENGL_ES2_BIT"/> ++ <enum value="0x0008" name="EGL_OPENGL_BIT"/> ++ <enum value="0x0010" name="EGL_INTEROP_BIT_KHR" comment="EGL_KHR_interop"/> ++ <enum value="0x0020" name="EGL_OPENMAX_IL_BIT_KHR" comment="EGL_KHR_interop"/> ++ <enum value="0x00000040" name="EGL_OPENGL_ES3_BIT"/> ++ <enum value="0x00000040" name="EGL_OPENGL_ES3_BIT_KHR" alias="EGL_OPENGL_ES3_BIT"/> ++ </enums> ++ ++ <enums namespace="EGLLockUsageHintKHRMask" type="bitmask" comment="EGL_LOCK_USAGE_HINT_KHR bits"> ++ <enum value="0x0001" name="EGL_READ_SURFACE_BIT_KHR"/> ++ <enum value="0x0002" name="EGL_WRITE_SURFACE_BIT_KHR"/> ++ </enums> ++ ++ <enums namespace="EGLSyncFlagsKHR" type="bitmask" comment="Fence/reusable sync wait bits"> ++ <enum value="0x0001" name="EGL_SYNC_FLUSH_COMMANDS_BIT"/> ++ <enum value="0x0001" name="EGL_SYNC_FLUSH_COMMANDS_BIT_KHR" alias="EGL_SYNC_FLUSH_COMMANDS_BIT"/> ++ <enum value="0x0001" name="EGL_SYNC_FLUSH_COMMANDS_BIT_NV" alias="EGL_SYNC_FLUSH_COMMANDS_BIT"/> ++ </enums> ++ ++ <enums namespace="EGLDRMBufferUseMESAMask" type="bitmask" comment="EGL_DRM_BUFFER_USE_MESA bits"> ++ <enum value="0x00000001" name="EGL_DRM_BUFFER_USE_SCANOUT_MESA"/> ++ <enum value="0x00000002" name="EGL_DRM_BUFFER_USE_SHARE_MESA"/> ++ </enums> ++ ++ <!-- Should be shared with GL, but aren't aren't since the ++ FORWARD_COMPATIBLE and DEBUG_BIT values are swapped in the ++ corresponding GL enums. Oops :-( --> ++ <enums namespace="EGLContextFlagMask" type="bitmask" comment="EGL_CONTEXT_FLAGS_KHR bits"> ++ <enum value="0x00000001" name="EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"/> ++ <enum value="0x00000002" name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"/> ++ <enum value="0x00000004" name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"/> ++ </enums> ++ ++ <enums namespace="EGLContextProfileMask" type="bitmask" comment="Shared with GL"> ++ <enum value="0x00000001" name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT"/> ++ <enum value="0x00000001" name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR" alias="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT"/> ++ <enum value="0x00000002" name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT"/> ++ <enum value="0x00000002" name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR" alias="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT"/> ++ </enums> ++ ++ <!-- The default ("API") enum namespace starts here. While some ++ assigned values may overlap, and different parts of the ++ namespace are reserved for different purposes, it is a single ++ namespace. The "class" attribute indicates some of the reserved ++ purposes but is by no means complete (and cannot be, since many ++ tokens are reused for different purposes in different ++ extensions and API versions). --> ++ ++ <enums namespace="EGL" start="0x0000" end="0x2FFF" vendor="ARB"/> ++ ++ <enums namespace="EGL" group="Boolean" vendor="ARB"> ++ <enum value="0" name="EGL_FALSE"/> ++ <enum value="1" name="EGL_TRUE"/> ++ </enums> ++ ++ <enums namespace="EGL" group="SpecialNumbers" vendor="ARB" comment="Tokens whose numeric value is intrinsically meaningful"> ++ <enum value="((EGLint)-1)" name="EGL_DONT_CARE"/> ++ <enum value="((EGLint)-1)" name="EGL_UNKNOWN"/> ++ <enum value="-1" name="EGL_NO_NATIVE_FENCE_FD_ANDROID"/> ++ <enum value="0" name="EGL_DEPTH_ENCODING_NONE_NV"/> ++ <enum value="((EGLContext)0)" name="EGL_NO_CONTEXT"/> ++ <enum value="((EGLDeviceEXT)(0))" name="EGL_NO_DEVICE_EXT"/> ++ <enum value="((EGLDisplay)0)" name="EGL_NO_DISPLAY"/> ++ <enum value="((EGLImage)0)" name="EGL_NO_IMAGE"/> ++ <enum value="((EGLImageKHR)0)" name="EGL_NO_IMAGE_KHR"/> ++ <enum value="((EGLNativeDisplayType)0)" name="EGL_DEFAULT_DISPLAY"/> ++ <enum value="((EGLNativeFileDescriptorKHR)(-1))" name="EGL_NO_FILE_DESCRIPTOR_KHR"/> ++ <enum value="((EGLOutputLayerEXT)0)" name="EGL_NO_OUTPUT_LAYER_EXT"/> ++ <enum value="((EGLOutputPortEXT)0)" name="EGL_NO_OUTPUT_PORT_EXT"/> ++ <enum value="((EGLStreamKHR)0)" name="EGL_NO_STREAM_KHR"/> ++ <enum value="((EGLSurface)0)" name="EGL_NO_SURFACE"/> ++ <enum value="((EGLSync)0)" name="EGL_NO_SYNC"/> ++ <enum value="((EGLSyncKHR)0)" name="EGL_NO_SYNC_KHR" alias="EGL_NO_SYNC"/> ++ <enum value="((EGLSyncNV)0)" name="EGL_NO_SYNC_NV" alias="EGL_NO_SYNC"/> ++ <enum value="10000" name="EGL_DISPLAY_SCALING"/> ++ <enum value="0xFFFFFFFFFFFFFFFF" name="EGL_FOREVER" type="ull"/> ++ <enum value="0xFFFFFFFFFFFFFFFF" name="EGL_FOREVER_KHR" type="ull" alias="EGL_FOREVER"/> ++ <enum value="0xFFFFFFFFFFFFFFFF" name="EGL_FOREVER_NV" type="ull" alias="EGL_FOREVER"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3000" end="0x305F" vendor="KHR"> ++ <enum value="0x3000" name="EGL_SUCCESS"/> ++ <enum value="0x3001" name="EGL_NOT_INITIALIZED"/> ++ <enum value="0x3002" name="EGL_BAD_ACCESS"/> ++ <enum value="0x3003" name="EGL_BAD_ALLOC"/> ++ <enum value="0x3004" name="EGL_BAD_ATTRIBUTE"/> ++ <enum value="0x3005" name="EGL_BAD_CONFIG"/> ++ <enum value="0x3006" name="EGL_BAD_CONTEXT"/> ++ <enum value="0x3007" name="EGL_BAD_CURRENT_SURFACE"/> ++ <enum value="0x3008" name="EGL_BAD_DISPLAY"/> ++ <enum value="0x3009" name="EGL_BAD_MATCH"/> ++ <enum value="0x300A" name="EGL_BAD_NATIVE_PIXMAP"/> ++ <enum value="0x300B" name="EGL_BAD_NATIVE_WINDOW"/> ++ <enum value="0x300C" name="EGL_BAD_PARAMETER"/> ++ <enum value="0x300D" name="EGL_BAD_SURFACE"/> ++ <enum value="0x300E" name="EGL_CONTEXT_LOST"/> ++ <unused start="0x300F" end="0x301F" comment="for additional errors"/> ++ <enum value="0x3020" name="EGL_BUFFER_SIZE"/> ++ <enum value="0x3021" name="EGL_ALPHA_SIZE"/> ++ <enum value="0x3022" name="EGL_BLUE_SIZE"/> ++ <enum value="0x3023" name="EGL_GREEN_SIZE"/> ++ <enum value="0x3024" name="EGL_RED_SIZE"/> ++ <enum value="0x3025" name="EGL_DEPTH_SIZE"/> ++ <enum value="0x3026" name="EGL_STENCIL_SIZE"/> ++ <enum value="0x3027" name="EGL_CONFIG_CAVEAT"/> ++ <enum value="0x3028" name="EGL_CONFIG_ID"/> ++ <enum value="0x3029" name="EGL_LEVEL"/> ++ <enum value="0x302A" name="EGL_MAX_PBUFFER_HEIGHT"/> ++ <enum value="0x302B" name="EGL_MAX_PBUFFER_PIXELS"/> ++ <enum value="0x302C" name="EGL_MAX_PBUFFER_WIDTH"/> ++ <enum value="0x302D" name="EGL_NATIVE_RENDERABLE"/> ++ <enum value="0x302E" name="EGL_NATIVE_VISUAL_ID"/> ++ <enum value="0x302F" name="EGL_NATIVE_VISUAL_TYPE"/> ++ <enum value="0x3031" name="EGL_SAMPLES"/> ++ <enum value="0x3032" name="EGL_SAMPLE_BUFFERS"/> ++ <enum value="0x3033" name="EGL_SURFACE_TYPE"/> ++ <enum value="0x3034" name="EGL_TRANSPARENT_TYPE"/> ++ <enum value="0x3035" name="EGL_TRANSPARENT_BLUE_VALUE"/> ++ <enum value="0x3036" name="EGL_TRANSPARENT_GREEN_VALUE"/> ++ <enum value="0x3037" name="EGL_TRANSPARENT_RED_VALUE"/> ++ <enum value="0x3038" name="EGL_NONE" comment="Attribute list terminator"/> ++ <enum value="0x3039" name="EGL_BIND_TO_TEXTURE_RGB"/> ++ <enum value="0x303A" name="EGL_BIND_TO_TEXTURE_RGBA"/> ++ <enum value="0x303B" name="EGL_MIN_SWAP_INTERVAL"/> ++ <enum value="0x303C" name="EGL_MAX_SWAP_INTERVAL"/> ++ <enum value="0x303D" name="EGL_LUMINANCE_SIZE"/> ++ <enum value="0x303E" name="EGL_ALPHA_MASK_SIZE"/> ++ <enum value="0x303F" name="EGL_COLOR_BUFFER_TYPE"/> ++ <enum value="0x3040" name="EGL_RENDERABLE_TYPE"/> ++ <enum value="0x3041" name="EGL_MATCH_NATIVE_PIXMAP"/> ++ <enum value="0x3042" name="EGL_CONFORMANT"/> ++ <enum value="0x3042" name="EGL_CONFORMANT_KHR"/> ++ <enum value="0x3043" name="EGL_MATCH_FORMAT_KHR"/> ++ <unused start="0x3044" end="0x304F" comment="for additional config attributes"/> ++ <enum value="0x3050" name="EGL_SLOW_CONFIG"/> ++ <enum value="0x3051" name="EGL_NON_CONFORMANT_CONFIG"/> ++ <enum value="0x3052" name="EGL_TRANSPARENT_RGB"/> ++ <enum value="0x3053" name="EGL_VENDOR"/> ++ <enum value="0x3054" name="EGL_VERSION"/> ++ <enum value="0x3055" name="EGL_EXTENSIONS"/> ++ <enum value="0x3056" name="EGL_HEIGHT"/> ++ <enum value="0x3057" name="EGL_WIDTH"/> ++ <enum value="0x3058" name="EGL_LARGEST_PBUFFER"/> ++ <enum value="0x3059" name="EGL_DRAW"/> ++ <enum value="0x305A" name="EGL_READ"/> ++ <enum value="0x305B" name="EGL_CORE_NATIVE_ENGINE"/> ++ <enum value="0x305C" name="EGL_NO_TEXTURE"/> ++ <enum value="0x305D" name="EGL_TEXTURE_RGB"/> ++ <enum value="0x305E" name="EGL_TEXTURE_RGBA"/> ++ <enum value="0x305F" name="EGL_TEXTURE_2D"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3060-0x306F" vendor="TAO" comment="Reserved for Phil Huxley"> ++ <unused start="0x3060" end="0x306F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3070-0x307F" vendor="NOK" comment="Reserved for Jani Vaarala"> ++ <unused start="0x3070" end="0x307E"/> ++ <enum value="0x307F" name="EGL_Y_INVERTED_NOK"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3080-0x30AF" vendor="KHR"> ++ <enum value="0x3080" name="EGL_TEXTURE_FORMAT"/> ++ <enum value="0x3081" name="EGL_TEXTURE_TARGET"/> ++ <enum value="0x3082" name="EGL_MIPMAP_TEXTURE"/> ++ <enum value="0x3083" name="EGL_MIPMAP_LEVEL"/> ++ <enum value="0x3084" name="EGL_BACK_BUFFER"/> ++ <enum value="0x3085" name="EGL_SINGLE_BUFFER"/> ++ <enum value="0x3086" name="EGL_RENDER_BUFFER"/> ++ <enum value="0x3087" name="EGL_COLORSPACE" alias="EGL_VG_COLORSPACE"/> ++ <enum value="0x3087" name="EGL_VG_COLORSPACE"/> ++ <enum value="0x3088" name="EGL_ALPHA_FORMAT" alias="EGL_VG_ALPHA_FORMAT"/> ++ <enum value="0x3088" name="EGL_VG_ALPHA_FORMAT"/> ++ <enum value="0x3089" name="EGL_COLORSPACE_sRGB"/> ++ <enum value="0x3089" name="EGL_GL_COLORSPACE_SRGB" alias="EGL_COLORSPACE_sRGB"/> ++ <enum value="0x3089" name="EGL_GL_COLORSPACE_SRGB_KHR" alias="EGL_COLORSPACE_sRGB"/> ++ <enum value="0x3089" name="EGL_VG_COLORSPACE_sRGB" alias="EGL_COLORSPACE_sRGB"/> ++ <enum value="0x308A" name="EGL_COLORSPACE_LINEAR"/> ++ <enum value="0x308A" name="EGL_GL_COLORSPACE_LINEAR" alias="EGL_COLORSPACE_LINEAR"/> ++ <enum value="0x308A" name="EGL_GL_COLORSPACE_LINEAR_KHR" alias="EGL_COLORSPACE_LINEAR"/> ++ <enum value="0x308A" name="EGL_VG_COLORSPACE_LINEAR" alias="EGL_COLORSPACE_LINEAR"/> ++ <enum value="0x308B" name="EGL_ALPHA_FORMAT_NONPRE" alias="EGL_VG_ALPHA_FORMAT_NONPRE"/> ++ <enum value="0x308B" name="EGL_VG_ALPHA_FORMAT_NONPRE"/> ++ <enum value="0x308C" name="EGL_ALPHA_FORMAT_PRE" alias="EGL_VG_ALPHA_FORMAT_PRE"/> ++ <enum value="0x308C" name="EGL_VG_ALPHA_FORMAT_PRE"/> ++ <enum value="0x308D" name="EGL_CLIENT_APIS"/> ++ <enum value="0x308E" name="EGL_RGB_BUFFER"/> ++ <enum value="0x308F" name="EGL_LUMINANCE_BUFFER"/> ++ <enum value="0x3090" name="EGL_HORIZONTAL_RESOLUTION"/> ++ <enum value="0x3091" name="EGL_VERTICAL_RESOLUTION"/> ++ <enum value="0x3092" name="EGL_PIXEL_ASPECT_RATIO"/> ++ <enum value="0x3093" name="EGL_SWAP_BEHAVIOR"/> ++ <enum value="0x3094" name="EGL_BUFFER_PRESERVED"/> ++ <enum value="0x3095" name="EGL_BUFFER_DESTROYED"/> ++ <enum value="0x3096" name="EGL_OPENVG_IMAGE"/> ++ <enum value="0x3097" name="EGL_CONTEXT_CLIENT_TYPE"/> ++ <enum value="0x3098" name="EGL_CONTEXT_CLIENT_VERSION"/> ++ <enum value="0x3098" name="EGL_CONTEXT_MAJOR_VERSION" alias="EGL_CONTEXT_CLIENT_VERSION"/> ++ <enum value="0x3098" name="EGL_CONTEXT_MAJOR_VERSION_KHR" alias="EGL_CONTEXT_CLIENT_VERSION"/> ++ <enum value="0x3099" name="EGL_MULTISAMPLE_RESOLVE"/> ++ <enum value="0x309A" name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/> ++ <enum value="0x309B" name="EGL_MULTISAMPLE_RESOLVE_BOX"/> ++ <enum value="0x309C" name="EGL_CL_EVENT_HANDLE"/> ++ <enum value="0x309C" name="EGL_CL_EVENT_HANDLE_KHR" alias="EGL_CL_EVENT_HANDLE"/> ++ <enum value="0x309D" name="EGL_GL_COLORSPACE"/> ++ <enum value="0x309D" name="EGL_GL_COLORSPACE_KHR" alias="EGL_GL_COLORSPACE"/> ++ <unused start="0x309E" end="0x309F"/> ++ <enum value="0x30A0" name="EGL_OPENGL_ES_API"/> ++ <enum value="0x30A1" name="EGL_OPENVG_API"/> ++ <enum value="0x30A2" name="EGL_OPENGL_API"/> ++ <unused start="0x30A3" end="0x30AF" comment="for additional client API names"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x30B0-0x30BF" vendor="NV" comment="Reserved for Ignacio Llamas"> ++ <enum value="0x30B0" name="EGL_NATIVE_PIXMAP_KHR"/> ++ <enum value="0x30B1" name="EGL_GL_TEXTURE_2D"/> ++ <enum value="0x30B1" name="EGL_GL_TEXTURE_2D_KHR" alias="EGL_GL_TEXTURE_2D"/> ++ <enum value="0x30B2" name="EGL_GL_TEXTURE_3D"/> ++ <enum value="0x30B2" name="EGL_GL_TEXTURE_3D_KHR" alias="EGL_GL_TEXTURE_3D"/> ++ <enum value="0x30B3" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X"/> ++ <enum value="0x30B3" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X"/> ++ <enum value="0x30B4" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/> ++ <enum value="0x30B4" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/> ++ <enum value="0x30B5" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/> ++ <enum value="0x30B5" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/> ++ <enum value="0x30B6" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/> ++ <enum value="0x30B6" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/> ++ <enum value="0x30B7" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/> ++ <enum value="0x30B7" name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/> ++ <enum value="0x30B8" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/> ++ <enum value="0x30B8" name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR" alias="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/> ++ <enum value="0x30B9" name="EGL_GL_RENDERBUFFER"/> ++ <enum value="0x30B9" name="EGL_GL_RENDERBUFFER_KHR" alias="EGL_GL_RENDERBUFFER"/> ++ <enum value="0x30BA" name="EGL_VG_PARENT_IMAGE_KHR"/> ++ <enum value="0x30BC" name="EGL_GL_TEXTURE_LEVEL"/> ++ <enum value="0x30BC" name="EGL_GL_TEXTURE_LEVEL_KHR" alias="EGL_GL_TEXTURE_LEVEL"/> ++ <enum value="0x30BD" name="EGL_GL_TEXTURE_ZOFFSET"/> ++ <enum value="0x30BD" name="EGL_GL_TEXTURE_ZOFFSET_KHR" alias="EGL_GL_TEXTURE_ZOFFSET"/> ++ <enum value="0x30BE" name="EGL_POST_SUB_BUFFER_SUPPORTED_NV"/> ++ <enum value="0x30BF" name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT" alias="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x30C0-0x30CF" vendor="KHR"> ++ <enum value="0x30C0" name="EGL_FORMAT_RGB_565_EXACT_KHR"/> ++ <enum value="0x30C1" name="EGL_FORMAT_RGB_565_KHR"/> ++ <enum value="0x30C2" name="EGL_FORMAT_RGBA_8888_EXACT_KHR"/> ++ <enum value="0x30C3" name="EGL_FORMAT_RGBA_8888_KHR"/> ++ <enum value="0x30C4" name="EGL_MAP_PRESERVE_PIXELS_KHR"/> ++ <enum value="0x30C5" name="EGL_LOCK_USAGE_HINT_KHR"/> ++ <enum value="0x30C6" name="EGL_BITMAP_POINTER_KHR"/> ++ <enum value="0x30C7" name="EGL_BITMAP_PITCH_KHR"/> ++ <enum value="0x30C8" name="EGL_BITMAP_ORIGIN_KHR"/> ++ <enum value="0x30C9" name="EGL_BITMAP_PIXEL_RED_OFFSET_KHR"/> ++ <enum value="0x30CA" name="EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR"/> ++ <enum value="0x30CB" name="EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR"/> ++ <enum value="0x30CC" name="EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR"/> ++ <enum value="0x30CD" name="EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR"/> ++ <enum value="0x30CE" name="EGL_LOWER_LEFT_KHR"/> ++ <enum value="0x30CF" name="EGL_UPPER_LEFT_KHR"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x30D0" end="0x30DF" vendor="Symbian" comment="Reserved for Robert Palmer (bug #2545)"> ++ <unused start="0x30D0" end="0x30D1"/> ++ <enum value="0x30D2" name="EGL_IMAGE_PRESERVED"/> ++ <enum value="0x30D2" name="EGL_IMAGE_PRESERVED_KHR"/> ++ <unused start="0x30D3" end="0x30D9"/> ++ <enum value="0x30DA" name="EGL_SHARED_IMAGE_NOK" comment="Unreleased extension"/> ++ <unused start="0x30DB" end="0x30DF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x30E0" end="0x30EF" vendor="NV" comment="Reserved for Russell Pflughaupt (bug #3314)"> ++ <enum value="0x30E0" name="EGL_COVERAGE_BUFFERS_NV"/> ++ <enum value="0x30E1" name="EGL_COVERAGE_SAMPLES_NV"/> ++ <enum value="0x30E2" name="EGL_DEPTH_ENCODING_NV"/> ++ <enum value="0x30E3" name="EGL_DEPTH_ENCODING_NONLINEAR_NV"/> ++ <unused start="0x30E4" end="0x30E5"/> ++ <enum value="0x30E6" name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV"/> ++ <enum value="0x30E7" name="EGL_SYNC_STATUS_NV"/> ++ <enum value="0x30E8" name="EGL_SIGNALED_NV"/> ++ <enum value="0x30E9" name="EGL_UNSIGNALED_NV"/> ++ <enum value="0x30EA" name="EGL_ALREADY_SIGNALED_NV"/> ++ <enum value="0x30EB" name="EGL_TIMEOUT_EXPIRED_NV"/> ++ <enum value="0x30EC" name="EGL_CONDITION_SATISFIED_NV"/> ++ <enum value="0x30ED" name="EGL_SYNC_TYPE_NV"/> ++ <enum value="0x30EE" name="EGL_SYNC_CONDITION_NV"/> ++ <enum value="0x30EF" name="EGL_SYNC_FENCE_NV"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x30F0" end="0x30FF" vendor="KHR"> ++ <enum value="0x30F0" name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE"/> ++ <enum value="0x30F0" name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR" alias="EGL_SYNC_PRIOR_COMMANDS_COMPLETE"/> ++ <enum value="0x30F1" name="EGL_SYNC_STATUS"/> ++ <enum value="0x30F1" name="EGL_SYNC_STATUS_KHR" alias="EGL_SYNC_STATUS"/> ++ <enum value="0x30F2" name="EGL_SIGNALED"/> ++ <enum value="0x30F2" name="EGL_SIGNALED_KHR" alias="EGL_SIGNALED"/> ++ <enum value="0x30F3" name="EGL_UNSIGNALED"/> ++ <enum value="0x30F3" name="EGL_UNSIGNALED_KHR" alias="EGL_UNSIGNALED"/> ++ <enum value="0x30F5" name="EGL_TIMEOUT_EXPIRED"/> ++ <enum value="0x30F5" name="EGL_TIMEOUT_EXPIRED_KHR" alias="EGL_TIMEOUT_EXPIRED"/> ++ <enum value="0x30F6" name="EGL_CONDITION_SATISFIED"/> ++ <enum value="0x30F6" name="EGL_CONDITION_SATISFIED_KHR" alias="EGL_CONDITION_SATISFIED"/> ++ <enum value="0x30F7" name="EGL_SYNC_TYPE"/> ++ <enum value="0x30F7" name="EGL_SYNC_TYPE_KHR" alias="EGL_SYNC_TYPE"/> ++ <enum value="0x30F8" name="EGL_SYNC_CONDITION"/> ++ <enum value="0x30F8" name="EGL_SYNC_CONDITION_KHR" alias="EGL_SYNC_CONDITION"/> ++ <enum value="0x30F9" name="EGL_SYNC_FENCE"/> ++ <enum value="0x30F9" name="EGL_SYNC_FENCE_KHR" alias="EGL_SYNC_FENCE"/> ++ <enum value="0x30FA" name="EGL_SYNC_REUSABLE_KHR"/> ++ <enum value="0x30FB" name="EGL_CONTEXT_MINOR_VERSION"/> ++ <enum value="0x30FB" name="EGL_CONTEXT_MINOR_VERSION_KHR" alias="EGL_CONTEXT_MINOR_VERSION"/> ++ <enum value="0x30FC" name="EGL_CONTEXT_FLAGS_KHR"/> ++ <enum value="0x30FD" name="EGL_CONTEXT_OPENGL_PROFILE_MASK"/> ++ <enum value="0x30FD" name="EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR" alias="EGL_CONTEXT_OPENGL_PROFILE_MASK"/> ++ <enum value="0x30FE" name="EGL_SYNC_CL_EVENT"/> ++ <enum value="0x30FE" name="EGL_SYNC_CL_EVENT_KHR" alias="EGL_SYNC_CL_EVENT"/> ++ <enum value="0x30FF" name="EGL_SYNC_CL_EVENT_COMPLETE"/> ++ <enum value="0x30FF" name="EGL_SYNC_CL_EVENT_COMPLETE_KHR" alias="EGL_SYNC_CL_EVENT_COMPLETE"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3100" end="0x310F" vendor="IMG" comment="Reserved for Ben Bowman (Khronos bug 4748)"> ++ <enum value="0x3100" name="EGL_CONTEXT_PRIORITY_LEVEL_IMG"/> ++ <enum value="0x3101" name="EGL_CONTEXT_PRIORITY_HIGH_IMG"/> ++ <enum value="0x3102" name="EGL_CONTEXT_PRIORITY_MEDIUM_IMG"/> ++ <enum value="0x3103" name="EGL_CONTEXT_PRIORITY_LOW_IMG"/> ++ <unused start="0x3104" end="0x310F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3110" end="0x311F" vendor="ATX" comment="Reserved for Tim Renouf, Antix (Khronos bug 4949)"> ++ <enum value="0x3110" name="EGL_BITMAP_PIXEL_SIZE_KHR"/> ++ <unused start="0x3111" end="0x311F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3120" end="0x312F" vendor="AMD" comment="Reserved for David Garcia (Khronos bug 5149)"> ++ <unused start="0x3120" end="0x312F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3130" end="0x313F" vendor="NV" comment="Reserved for Greg Prisament (Khronos bug 5166)"> ++ <unused start="0x3130"/> ++ <enum value="0x3131" name="EGL_COVERAGE_SAMPLE_RESOLVE_NV"/> ++ <enum value="0x3132" name="EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV"/> ++ <enum value="0x3133" name="EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV"/> ++ <enum value="0x3134" name="EGL_MULTIVIEW_VIEW_COUNT_EXT"/> ++ <unused start="0x3135"/> ++ <enum value="0x3136" name="EGL_AUTO_STEREO_NV"/> ++ <unused start="0x3137"/> ++ <enum value="0x3138" name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT"/> ++ <unused start="0x3139" end="0x313C"/> ++ <enum value="0x313D" name="EGL_BUFFER_AGE_KHR"/> ++ <enum value="0x313D" name="EGL_BUFFER_AGE_EXT" alias="EGL_BUFFER_AGE_KHR"/> ++ <unused start="0x313E" end="0x313F"/> ++ <enum value="0x313F" name="EGL_PLATFORM_DEVICE_EXT"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3140" end="0x314F" vendor="Google" comment="Reserved for Mathias Agopian (Khronos bug 5199)"> ++ <enum value="0x3140" name="EGL_NATIVE_BUFFER_ANDROID"/> ++ <enum value="0x3141" name="EGL_PLATFORM_ANDROID_KHR"/> ++ <enum value="0x3142" name="EGL_RECORDABLE_ANDROID"/> ++ <unused start="0x3143"/> ++ <enum value="0x3144" name="EGL_SYNC_NATIVE_FENCE_ANDROID"/> ++ <enum value="0x3145" name="EGL_SYNC_NATIVE_FENCE_FD_ANDROID"/> ++ <enum value="0x3146" name="EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID"/> ++ <enum value="0x3147" name="EGL_FRAMEBUFFER_TARGET_ANDROID"/> ++ <unused start="0x3148" end="0x314F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3150" end="0x315F" vendor="NOK" comment="Reserved for Robert Palmer (Khronos bug 5368)"> ++ <unused start="0x3150" end="0x315F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3160" end="0x316F" vendor="Seaweed" comment="Reserved for Sree Sridharan (Khronos public bug 198)"> ++ <unused start="0x3160" end="0x316F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3170" end="0x318F" vendor="QNX" comment="Reserved for Joel Pilon (Khronos bug 5834)"> ++ <unused start="0x3170" end="0x318F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3190" end="0x31AF" vendor="FSL" comment="Reserved for Brian Murray, Freescale (Khronos bug 5939)"> ++ <unused start="0x3190" end="0x31AF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x31B0" end="0x31BF" vendor="KHR" comment="Reserved for Marcus Lorentzon (Khronos bug 6437)"> ++ <enum value="0x31B0" name="EGL_CONTEXT_OPENGL_DEBUG"/> ++ <enum value="0x31B1" name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE"/> ++ <enum value="0x31B2" name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/> ++ <enum value="0x31B3" name="EGL_CONTEXT_OPENGL_NO_ERROR_KHR"/> ++ <unused start="0x31B4" end="0x31BC" comment="0x31B3-0x31BC formerly reserved for EGL_image_stream"/> ++ <enum value="0x31BD" name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR" alias="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/> ++ <enum value="0x31BD" name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/> ++ <enum value="0x31BE" name="EGL_NO_RESET_NOTIFICATION"/> ++ <enum value="0x31BE" name="EGL_NO_RESET_NOTIFICATION_KHR" alias="EGL_NO_RESET_NOTIFICATION"/> ++ <enum value="0x31BE" name="EGL_NO_RESET_NOTIFICATION_EXT" alias="EGL_NO_RESET_NOTIFICATION"/> ++ <enum value="0x31BF" name="EGL_LOSE_CONTEXT_ON_RESET"/> ++ <enum value="0x31BF" name="EGL_LOSE_CONTEXT_ON_RESET_KHR" alias="EGL_LOSE_CONTEXT_ON_RESET"/> ++ <enum value="0x31BF" name="EGL_LOSE_CONTEXT_ON_RESET_EXT" alias="EGL_LOSE_CONTEXT_ON_RESET"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x31C0" end="0x31CF" vendor="QCOM" comment="Reserved for Maurice Ribble (Khronos bug 6644) - EGL_QCOM_create_image spec TBD"> ++ <unused start="0x31C0" end="0x31CF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x31D0" end="0x31DF" vendor="MESA" comment="Reserved for Kristian Høgsberg (Khronos bug 6757)"> ++ <enum value="0x31D0" name="EGL_DRM_BUFFER_FORMAT_MESA"/> ++ <enum value="0x31D1" name="EGL_DRM_BUFFER_USE_MESA"/> ++ <enum value="0x31D2" name="EGL_DRM_BUFFER_FORMAT_ARGB32_MESA"/> ++ <enum value="0x31D3" name="EGL_DRM_BUFFER_MESA"/> ++ <enum value="0x31D4" name="EGL_DRM_BUFFER_STRIDE_MESA"/> ++ <enum value="0x31D5" name="EGL_PLATFORM_X11_KHR"/> ++ <enum value="0x31D5" name="EGL_PLATFORM_X11_EXT" alias="EGL_PLATFORM_X11_KHR"/> ++ <enum value="0x31D6" name="EGL_PLATFORM_X11_SCREEN_KHR"/> ++ <enum value="0x31D6" name="EGL_PLATFORM_X11_SCREEN_EXT" alias="EGL_PLATFORM_X11_SCREEN_KHR"/> ++ <enum value="0x31D7" name="EGL_PLATFORM_GBM_KHR"/> ++ <enum value="0x31D7" name="EGL_PLATFORM_GBM_MESA" alias="EGL_PLATFORM_GBM_KHR"/> ++ <enum value="0x31D8" name="EGL_PLATFORM_WAYLAND_KHR"/> ++ <enum value="0x31D8" name="EGL_PLATFORM_WAYLAND_EXT" alias="EGL_PLATFORM_WAYLAND_KHR"/> ++ <unused start="0x31D9" end="0x31DF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x31E0" end="0x31EF" vendor="HI" comment="Reserved for Mark Callow (Khronos bug 6799)"> ++ <unused start="0x31E0" end="0x31EF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x31F0" end="0x31FF" vendor="KHR"> ++ <unused start="0x31F0" end="0x31FB" comment="Placeholders for draft extensions follow"/> ++ <!-- ++ <enum value="0x31F0" name="EGL_IMAGE_USE_AS_OPENGL_ES1_RENDERBUFFER_KHR" comment="Draft KHR_image_use_gl1_renderbuffer"/> ++ <enum value="0x31F1" name="EGL_IMAGE_USE_AS_OPENGL_ES1_TEXTURE_2D_KHR" comment="Draft KHR_image_use_gl1_texture_2d"/> ++ <enum value="0x31F2" name="EGL_IMAGE_USE_AS_OPENGL_ES1_TEXTURE_EXTERNAL_KHR" comment="Draft KHR_image_use_gl1_texture_external"/> ++ <enum value="0x31F3" name="EGL_IMAGE_USE_AS_OPENGL_ES2_RENDERBUFFER_KHR" comment="Draft KHR_image_use_gl2_renderbuffer"/> ++ <enum value="0x31F4" name="EGL_IMAGE_USE_AS_OPENGL_ES2_TEXTURE_2D_KHR" comment="Draft KHR_image_use_gl2_texture_2d"/> ++ <enum value="0x31F5" name="EGL_IMAGE_USE_AS_OPENGL_ES2_TEXTURE_EXTERNAL_KHR" comment="Draft KHR_image_use_gl2_texture_external"/> ++ <enum value="0x31F6" name="EGL_IMAGE_USE_AS_OPENVG_IMAGE_KHR" comment="Draft KHR_image_use_vg_vgimage"/> ++ <enum value="0x31F7" name="EGL_STREAM_CONSUMER_ATTACHMENT_MESA" comment="Draft EGL_MESA_image_stream_internal"/> ++ <enum value="0x31F8" name="EGL_NO_FORMAT_MESA" comment="Draft EGL_MESA_image_stream_internal"/> ++ <enum value="0x31F9" name="EGL_FORMAT_RGBA8888_MESA" comment="Draft EGL_MESA_image_stream_internal"/> ++ <enum value="0x31FA" name="EGL_FORMAT_RGB888_MESA" comment="Draft EGL_MESA_image_stream_internal"/> ++ <enum value="0x31FB" name="EGL_FORMAT_RGB565_MESA" comment="Draft EGL_MESA_image_stream_internal"/> ++ --> ++ <enum value="0x31FC" name="EGL_STREAM_FIFO_LENGTH_KHR"/> ++ <enum value="0x31FD" name="EGL_STREAM_TIME_NOW_KHR"/> ++ <enum value="0x31FE" name="EGL_STREAM_TIME_CONSUMER_KHR"/> ++ <enum value="0x31FF" name="EGL_STREAM_TIME_PRODUCER_KHR"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3200" end="0x320F" vendor="ANGLE" comment="Reserved for Daniel Koch, ANGLE Project (Khronos bug 7139)"> ++ <enum value="0x3200" name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/> ++ <enum value="0x3201" name="EGL_FIXED_SIZE_ANGLE"/> ++ <unused start="0x3202" end="0x320F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3210" end="0x321F" vendor="KHR"> ++ <enum value="0x3210" name="EGL_CONSUMER_LATENCY_USEC_KHR"/> ++ <unused start="0x3211"/> ++ <enum value="0x3212" name="EGL_PRODUCER_FRAME_KHR"/> ++ <enum value="0x3213" name="EGL_CONSUMER_FRAME_KHR"/> ++ <enum value="0x3214" name="EGL_STREAM_STATE_KHR"/> ++ <enum value="0x3215" name="EGL_STREAM_STATE_CREATED_KHR"/> ++ <enum value="0x3216" name="EGL_STREAM_STATE_CONNECTING_KHR"/> ++ <enum value="0x3217" name="EGL_STREAM_STATE_EMPTY_KHR"/> ++ <enum value="0x3218" name="EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR"/> ++ <enum value="0x3219" name="EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR"/> ++ <enum value="0x321A" name="EGL_STREAM_STATE_DISCONNECTED_KHR"/> ++ <enum value="0x321B" name="EGL_BAD_STREAM_KHR"/> ++ <enum value="0x321C" name="EGL_BAD_STATE_KHR"/> ++ <enum value="0x321D" name="EGL_BUFFER_COUNT_NV" comment="From EGL_NV_stream_producer_eglsurface, which has no known specification and was replaced by a KHR extension"/> ++ <enum value="0x321E" name="EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR"/> ++ <enum value="0x321F" name="EGL_SYNC_NEW_FRAME_NV"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3220" end="0x325F" vendor="NV" comment="Reserved for Greg Roth (Bug 8220)"> ++ <unused start="0x3220" end="0x322A"/> ++ <enum value="0x322B" name="EGL_BAD_DEVICE_EXT"/> ++ <enum value="0x322C" name="EGL_DEVICE_EXT"/> ++ <enum value="0x322D" name="EGL_BAD_OUTPUT_LAYER_EXT"/> ++ <enum value="0x322E" name="EGL_BAD_OUTPUT_PORT_EXT"/> ++ <enum value="0x322F" name="EGL_SWAP_INTERVAL_EXT"/> ++ <unused start="0x3230" end="0x3232"/> ++ <enum value="0x3233" name="EGL_DRM_DEVICE_FILE_EXT"/> ++ <enum value="0x3234" name="EGL_DRM_CRTC_EXT"/> ++ <enum value="0x3235" name="EGL_DRM_PLANE_EXT"/> ++ <enum value="0x3236" name="EGL_DRM_CONNECTOR_EXT"/> ++ <enum value="0x3237" name="EGL_OPENWF_DEVICE_ID_EXT"/> ++ <enum value="0x3238" name="EGL_OPENWF_PIPELINE_ID_EXT"/> ++ <enum value="0x3239" name="EGL_OPENWF_PORT_ID_EXT"/> ++ <enum value="0x323A" name="EGL_CUDA_DEVICE_NV"/> ++ <enum value="0x323B" name="EGL_CUDA_EVENT_HANDLE_NV"/> ++ <enum value="0x323C" name="EGL_SYNC_CUDA_EVENT_NV"/> ++ <enum value="0x323D" name="EGL_SYNC_CUDA_EVENT_COMPLETE_NV"/> ++ <unused start="0x323E" end="0x325F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3260" end="0x326F" vendor="BCOM" comment="Reserved for Gary Sweet, Broadcom (Public bug 620)"> ++ <unused start="0x3260" end="0x326F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3270" end="0x328F" vendor="ARM" comment="Reserved for Tom Cooksey (Bug 9963)"> ++ <enum value="0x3270" name="EGL_LINUX_DMA_BUF_EXT"/> ++ <enum value="0x3271" name="EGL_LINUX_DRM_FOURCC_EXT"/> ++ <enum value="0x3272" name="EGL_DMA_BUF_PLANE0_FD_EXT"/> ++ <enum value="0x3273" name="EGL_DMA_BUF_PLANE0_OFFSET_EXT"/> ++ <enum value="0x3274" name="EGL_DMA_BUF_PLANE0_PITCH_EXT"/> ++ <enum value="0x3275" name="EGL_DMA_BUF_PLANE1_FD_EXT"/> ++ <enum value="0x3276" name="EGL_DMA_BUF_PLANE1_OFFSET_EXT"/> ++ <enum value="0x3277" name="EGL_DMA_BUF_PLANE1_PITCH_EXT"/> ++ <enum value="0x3278" name="EGL_DMA_BUF_PLANE2_FD_EXT"/> ++ <enum value="0x3279" name="EGL_DMA_BUF_PLANE2_OFFSET_EXT"/> ++ <enum value="0x327A" name="EGL_DMA_BUF_PLANE2_PITCH_EXT"/> ++ <enum value="0x327B" name="EGL_YUV_COLOR_SPACE_HINT_EXT"/> ++ <enum value="0x327C" name="EGL_SAMPLE_RANGE_HINT_EXT"/> ++ <enum value="0x327D" name="EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT"/> ++ <enum value="0x327E" name="EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT"/> ++ <enum value="0x327F" name="EGL_ITU_REC601_EXT"/> ++ <enum value="0x3280" name="EGL_ITU_REC709_EXT"/> ++ <enum value="0x3281" name="EGL_ITU_REC2020_EXT"/> ++ <enum value="0x3282" name="EGL_YUV_FULL_RANGE_EXT"/> ++ <enum value="0x3283" name="EGL_YUV_NARROW_RANGE_EXT"/> ++ <enum value="0x3284" name="EGL_YUV_CHROMA_SITING_0_EXT"/> ++ <enum value="0x3285" name="EGL_YUV_CHROMA_SITING_0_5_EXT"/> ++ <enum value="0x3286" name="EGL_DISCARD_SAMPLES_ARM"/> ++ <unused start="0x3287" end="0x328F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3290" end="0x329F" vendor="MESA" comment="Reserved for John Kåre Alsaker (Public bug 757)"> ++ <unused start="0x3290" end="0x329F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x32A0" end="0x32AF" vendor="Samsung" comment="Reserved for Dongyeon Kim (Public bug 880)"> ++ <enum value="0x32A0" name="EGL_NATIVE_BUFFER_TIZEN"/> ++ <enum value="0x32A1" name="EGL_NATIVE_SURFACE_TIZEN"/> ++ <unused start="0x32A2" end="0x32AF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x32B0" end="0x32BF" vendor="QCOM" comment="Reserved for Jeff Vigil (Bug 10663) - EGL_QCOM_lock_image spec TBD"> ++ <unused start="0x32B0" end="0x32BF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x32C0" end="0x32CF" vendor="Vivante" comment="Reserved for Yanjun Zhang (Bug 11498)"> ++ <enum value="0x32C0" name="EGL_PROTECTED_CONTENT_EXT"/> ++ <unused start="0x32C1" end="0x32CF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x32D0" end="0x32EF" vendor="QCOM" comment="Reserved for Jeff Vigil (Bug 11735) - EGL_QCOM_gpu_perf spec TBD + Bug 12286 - EGL_QCOM_content_protection spec TBD"> ++ <unused start="0x32D0" end="0x32EF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x32F0" end="0x32FF" vendor="BCOM" comment="Reserved for Gary Sweet, Broadcom (Bug 12870)"> ++ <unused start="0x32F0" end="0x32FF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3300" end="0x331F" vendor="QCOM" comment="Reserved for Jeff Vigil (Bugs 12973,12849) - EGL_EXT_yuv_surface spec TBD"> ++ <enum value="0x3300" name="EGL_YUV_BUFFER_EXT"/> ++ <enum value="0x3301" name="EGL_YUV_ORDER_EXT"/> ++ <enum value="0x3302" name="EGL_YUV_ORDER_YUV_EXT"/> ++ <enum value="0x3303" name="EGL_YUV_ORDER_YVU_EXT"/> ++ <enum value="0x3304" name="EGL_YUV_ORDER_YUYV_EXT"/> ++ <enum value="0x3305" name="EGL_YUV_ORDER_UYVY_EXT"/> ++ <enum value="0x3306" name="EGL_YUV_ORDER_YVYU_EXT"/> ++ <enum value="0x3307" name="EGL_YUV_ORDER_VYUY_EXT"/> ++ <enum value="0x3308" name="EGL_YUV_ORDER_AYUV_EXT"/> ++ <unused start="0x3309"/> ++ <enum value="0x330A" name="EGL_YUV_CSC_STANDARD_EXT"/> ++ <enum value="0x330B" name="EGL_YUV_CSC_STANDARD_601_EXT"/> ++ <enum value="0x330C" name="EGL_YUV_CSC_STANDARD_709_EXT"/> ++ <enum value="0x330D" name="EGL_YUV_CSC_STANDARD_2020_EXT"/> ++ <unused start="0x330E" end="0x3310"/> ++ <enum value="0x3311" name="EGL_YUV_NUMBER_OF_PLANES_EXT"/> ++ <enum value="0x3312" name="EGL_YUV_SUBSAMPLE_EXT"/> ++ <enum value="0x3313" name="EGL_YUV_SUBSAMPLE_4_2_0_EXT"/> ++ <enum value="0x3314" name="EGL_YUV_SUBSAMPLE_4_2_2_EXT"/> ++ <enum value="0x3315" name="EGL_YUV_SUBSAMPLE_4_4_4_EXT"/> ++ <unused start="0x3316"/> ++ <enum value="0x3317" name="EGL_YUV_DEPTH_RANGE_EXT"/> ++ <enum value="0x3318" name="EGL_YUV_DEPTH_RANGE_LIMITED_EXT"/> ++ <enum value="0x3319" name="EGL_YUV_DEPTH_RANGE_FULL_EXT"/> ++ <enum value="0x331A" name="EGL_YUV_PLANE_BPP_EXT"/> ++ <enum value="0x331B" name="EGL_YUV_PLANE_BPP_0_EXT"/> ++ <enum value="0x331C" name="EGL_YUV_PLANE_BPP_8_EXT"/> ++ <enum value="0x331D" name="EGL_YUV_PLANE_BPP_10_EXT"/> ++ <unused start="0x331E" end="0x331F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x3320" end="0x339F" vendor="NV" comment="Reserved for James Jones (Bug 13209)"> ++ <unused start="0x3320" end="0x339F"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x33A0" end="0x33AF" vendor="ANGLE" comment="Reserved for Shannon Woods (Bug 13175)"> ++ <enum value="0x33A0" name="EGL_D3D9_DEVICE_ANGLE"/> ++ <enum value="0x33A1" name="EGL_D3D11_DEVICE_ANGLE"/> ++ <unused start="0x33A2" end="0x33AF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x33B0" end="0x33BF" vendor="KHR" comment="Reserved for EGL_KHR_debug / Jeff Vigil (Bug 13357)"> ++ <enum value="0x33B0" name="EGL_OBJECT_THREAD_KHR"/> ++ <enum value="0x33B1" name="EGL_OBJECT_DISPLAY_KHR"/> ++ <enum value="0x33B2" name="EGL_OBJECT_CONTEXT_KHR"/> ++ <enum value="0x33B3" name="EGL_OBJECT_SURFACE_KHR"/> ++ <enum value="0x33B4" name="EGL_OBJECT_IMAGE_KHR"/> ++ <enum value="0x33B5" name="EGL_OBJECT_SYNC_KHR"/> ++ <enum value="0x33B6" name="EGL_OBJECT_STREAM_KHR"/> ++ <unused start="0x33B7"/> ++ <enum value="0x33B8" name="EGL_DEBUG_CALLBACK_KHR"/> ++ <enum value="0x33B9" name="EGL_DEBUG_MSG_CRITICAL_KHR"/> ++ <enum value="0x33BA" name="EGL_DEBUG_MSG_ERROR_KHR"/> ++ <enum value="0x33BB" name="EGL_DEBUG_MSG_WARN_KHR"/> ++ <enum value="0x33BC" name="EGL_DEBUG_MSG_INFO_KHR"/> ++ <unused start="0x33BD" end="0x33BF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x33C0" end="0x33DF" vendor="BCOM" comment="Reserved for Gary Sweet (Bug 12203)"> ++ <unused start="0x33C0" end="0x33DF"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x33E0" end="0x342F" vendor="QCOM" comment="Reserved for Jeff Vigil (Bugs 10663,13364)"> ++ <unused start="0x33E0" end="0x342F"/> ++ </enums> ++ ++<!-- Please remember that new enumerant allocations must be obtained by ++ request to the Khronos API registrar (see comments at the top of this ++ file) File requests in the Khronos Bugzilla, EGL project, Registry ++ component. Also note that some EGL enum values are shared with other ++ Khronos APIs, and new ranges should be allocated with such overlaps in ++ mind. --> ++ ++<!-- Reservable for future use. To generate a new range, allocate multiples ++ of 16 starting at the lowest available point in this block. --> ++ <enums namespace="EGL" start="0x3420" end="0x3FFF" vendor="KHR"> ++ <unused start="0x3420" end="0x3FFF" comment="Reserved for future use"/> ++ </enums> ++ ++ <enums namespace="EGL" start="0x8F70" end="0x8F7F" vendor="HI" comment="For Mark Callow, Khronos bug 4055. Shared with GL."> ++ <enum value="0x8F70" name="EGL_COLOR_FORMAT_HI"/> ++ <enum value="0x8F71" name="EGL_COLOR_RGB_HI"/> ++ <enum value="0x8F72" name="EGL_COLOR_RGBA_HI"/> ++ <enum value="0x8F73" name="EGL_COLOR_ARGB_HI"/> ++ <enum value="0x8F74" name="EGL_CLIENT_PIXMAP_POINTER_HI"/> ++ </enums> ++ ++ <!-- SECTION: EGL command definitions. --> ++ <commands namespace="EGL"> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglBindAPI</name></proto> ++ <param><ptype>EGLenum</ptype> <name>api</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglBindTexImage</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>buffer</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglChooseConfig</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ <param><ptype>EGLConfig</ptype> *<name>configs</name></param> ++ <param><ptype>EGLint</ptype> <name>config_size</name></param> ++ <param><ptype>EGLint</ptype> *<name>num_config</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglClientWaitSync</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSync</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>flags</name></param> ++ <param><ptype>EGLTime</ptype> <name>timeout</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglClientWaitSyncKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>flags</name></param> ++ <param><ptype>EGLTimeKHR</ptype> <name>timeout</name></param> ++ <alias name="eglClientWaitSync"/> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglClientWaitSyncNV</name></proto> ++ <param><ptype>EGLSyncNV</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>flags</name></param> ++ <param><ptype>EGLTimeNV</ptype> <name>timeout</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglCopyBuffers</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLNativePixmapType</ptype> <name>target</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLContext</ptype> <name>eglCreateContext</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param><ptype>EGLContext</ptype> <name>share_context</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLImageKHR</ptype> <name>eglCreateDRMImageMESA</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSyncNV</ptype> <name>eglCreateFenceSyncNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLenum</ptype> <name>condition</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLImage</ptype> <name>eglCreateImage</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLContext</ptype> <name>ctx</name></param> ++ <param><ptype>EGLenum</ptype> <name>target</name></param> ++ <param><ptype>EGLClientBuffer</ptype> <name>buffer</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLImageKHR</ptype> <name>eglCreateImageKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLContext</ptype> <name>ctx</name></param> ++ <param><ptype>EGLenum</ptype> <name>target</name></param> ++ <param><ptype>EGLClientBuffer</ptype> <name>buffer</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePbufferFromClientBuffer</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLenum</ptype> <name>buftype</name></param> ++ <param><ptype>EGLClientBuffer</ptype> <name>buffer</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePbufferSurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePixmapSurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param><ptype>EGLNativePixmapType</ptype> <name>pixmap</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePixmapSurfaceHI</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>struct <ptype>EGLClientPixmapHI</ptype> *<name>pixmap</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePlatformPixmapSurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>void *<name>native_pixmap</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePlatformPixmapSurfaceEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>void *<name>native_pixmap</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePlatformWindowSurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>void *<name>native_window</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreatePlatformWindowSurfaceEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param>void *<name>native_window</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLStreamKHR</ptype> <name>eglCreateStreamFromFileDescriptorKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLNativeFileDescriptorKHR</ptype> <name>file_descriptor</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLStreamKHR</ptype> <name>eglCreateStreamKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreateStreamProducerSurfaceKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSyncKHR</ptype> <name>eglCreateStreamSyncNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLenum</ptype> <name>type</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSync</ptype> <name>eglCreateSync</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLenum</ptype> <name>type</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSyncKHR</ptype> <name>eglCreateSyncKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLenum</ptype> <name>type</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLSyncKHR</ptype> <name>eglCreateSync64KHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLenum</ptype> <name>type</name></param> ++ <param>const <ptype>EGLAttribKHR</ptype> *<name>attrib_list</name></param> ++ <alias name="eglCreateSync"/> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglCreateWindowSurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param><ptype>EGLNativeWindowType</ptype> <name>win</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglDebugMessageControlKHR</name></proto> ++ <param><ptype>EGLDEBUGPROCKHR</ptype> <name>callback</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroyContext</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLContext</ptype> <name>ctx</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroyImage</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImage</ptype> <name>image</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroyImageKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImageKHR</ptype> <name>image</name></param> ++ <alias name="eglDestroyImage"/> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroyStreamKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroySurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroySync</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSync</ptype> <name>sync</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroySyncKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ <alias name="eglDestroySync"/> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglDestroySyncNV</name></proto> ++ <param><ptype>EGLSyncNV</ptype> <name>sync</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglDupNativeFenceFDANDROID</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglExportDMABUFImageMESA</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImageKHR</ptype> <name>image</name></param> ++ <param>int *<name>fds</name></param> ++ <param><ptype>EGLint</ptype> *<name>strides</name></param> ++ <param><ptype>EGLint</ptype> *<name>offsets</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglExportDMABUFImageQueryMESA</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImageKHR</ptype> <name>image</name></param> ++ <param>int *<name>fourcc</name></param> ++ <param>int *<name>num_planes</name></param> ++ <param><ptype>EGLuint64KHR</ptype> *<name>modifiers</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglExportDRMImageMESA</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImageKHR</ptype> <name>image</name></param> ++ <param><ptype>EGLint</ptype> *<name>name</name></param> ++ <param><ptype>EGLint</ptype> *<name>handle</name></param> ++ <param><ptype>EGLint</ptype> *<name>stride</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglFenceNV</name></proto> ++ <param><ptype>EGLSyncNV</ptype> <name>sync</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetConfigAttrib</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> <name>config</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetConfigs</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLConfig</ptype> *<name>configs</name></param> ++ <param><ptype>EGLint</ptype> <name>config_size</name></param> ++ <param><ptype>EGLint</ptype> *<name>num_config</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLContext</ptype> <name>eglGetCurrentContext</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLDisplay</ptype> <name>eglGetCurrentDisplay</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLSurface</ptype> <name>eglGetCurrentSurface</name></proto> ++ <param><ptype>EGLint</ptype> <name>readdraw</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLDisplay</ptype> <name>eglGetDisplay</name></proto> ++ <param><ptype>EGLNativeDisplayType</ptype> <name>display_id</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglGetError</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetOutputLayersEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ <param><ptype>EGLOutputLayerEXT</ptype> *<name>layers</name></param> ++ <param><ptype>EGLint</ptype> <name>max_layers</name></param> ++ <param><ptype>EGLint</ptype> *<name>num_layers</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetOutputPortsEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ <param><ptype>EGLOutputPortEXT</ptype> *<name>ports</name></param> ++ <param><ptype>EGLint</ptype> <name>max_ports</name></param> ++ <param><ptype>EGLint</ptype> *<name>num_ports</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLDisplay</ptype> <name>eglGetPlatformDisplay</name></proto> ++ <param><ptype>EGLenum</ptype> <name>platform</name></param> ++ <param>void *<name>native_display</name></param> ++ <param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLDisplay</ptype> <name>eglGetPlatformDisplayEXT</name></proto> ++ <param><ptype>EGLenum</ptype> <name>platform</name></param> ++ <param>void *<name>native_display</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>__eglMustCastToProperFunctionPointerType</ptype> <name>eglGetProcAddress</name></proto> ++ <param>const char *<name>procname</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLNativeFileDescriptorKHR</ptype> <name>eglGetStreamFileDescriptorKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetSyncAttrib</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSync</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetSyncAttribKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglGetSyncAttribNV</name></proto> ++ <param><ptype>EGLSyncNV</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLuint64NV</ptype> <name>eglGetSystemTimeFrequencyNV</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLuint64NV</ptype> <name>eglGetSystemTimeNV</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglInitialize</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLint</ptype> *<name>major</name></param> ++ <param><ptype>EGLint</ptype> *<name>minor</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglLabelObjectKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>display</name></param> ++ <param><ptype>EGLenum</ptype> <name>objectType</name></param> ++ <param><ptype>EGLObjectKHR</ptype> <name>object</name></param> ++ <param><ptype>EGLLabelKHR</ptype> <name>label</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglLockSurfaceKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglMakeCurrent</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>draw</name></param> ++ <param><ptype>EGLSurface</ptype> <name>read</name></param> ++ <param><ptype>EGLContext</ptype> <name>ctx</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglOutputLayerAttribEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputLayerEXT</ptype> <name>layer</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> <name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglOutputPortAttribEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputPortEXT</ptype> <name>port</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> <name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglPostSubBufferNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>x</name></param> ++ <param><ptype>EGLint</ptype> <name>y</name></param> ++ <param><ptype>EGLint</ptype> <name>width</name></param> ++ <param><ptype>EGLint</ptype> <name>height</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLenum</ptype> <name>eglQueryAPI</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryContext</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLContext</ptype> <name>ctx</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryDebugKHR</name></proto> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryDeviceAttribEXT</name></proto> ++ <param><ptype>EGLDeviceEXT</ptype> <name>device</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto>const char *<name>eglQueryDeviceStringEXT</name></proto> ++ <param><ptype>EGLDeviceEXT</ptype> <name>device</name></param> ++ <param><ptype>EGLint</ptype> <name>name</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryDevicesEXT</name></proto> ++ <param><ptype>EGLint</ptype> <name>max_devices</name></param> ++ <param><ptype>EGLDeviceEXT</ptype> *<name>devices</name></param> ++ <param><ptype>EGLint</ptype> *<name>num_devices</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryDisplayAttribEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativeDisplayNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLNativeDisplayType</ptype> *<name>display_id</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativePixmapNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surf</name></param> ++ <param><ptype>EGLNativePixmapType</ptype> *<name>pixmap</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativeWindowNV</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surf</name></param> ++ <param><ptype>EGLNativeWindowType</ptype> *<name>window</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryOutputLayerAttribEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputLayerEXT</ptype> <name>layer</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto>const char *<name>eglQueryOutputLayerStringEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputLayerEXT</ptype> <name>layer</name></param> ++ <param><ptype>EGLint</ptype> <name>name</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryOutputPortAttribEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputPortEXT</ptype> <name>port</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttrib</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto>const char *<name>eglQueryOutputPortStringEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLOutputPortEXT</ptype> <name>port</name></param> ++ <param><ptype>EGLint</ptype> <name>name</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLenum</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamTimeKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLenum</ptype> <name>attribute</name></param> ++ <param><ptype>EGLTimeKHR</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamu64KHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLenum</ptype> <name>attribute</name></param> ++ <param><ptype>EGLuint64KHR</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto>const char *<name>eglQueryString</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLint</ptype> <name>name</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQuerySurface</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQuerySurface64KHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLAttribKHR</ptype> *<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglQuerySurfacePointerANGLE</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param>void **<name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglReleaseTexImage</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>buffer</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglReleaseThread</name></proto> ++ </command> ++ <command> ++ <proto>void <name>eglSetBlobCacheFuncsANDROID</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSetBlobFuncANDROID</ptype> <name>set</name></param> ++ <param><ptype>EGLGetBlobFuncANDROID</ptype> <name>get</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSetDamageRegionKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> *<name>rects</name></param> ++ <param><ptype>EGLint</ptype> <name>n_rects</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSignalSyncKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ <param><ptype>EGLenum</ptype> <name>mode</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSignalSyncNV</name></proto> ++ <param><ptype>EGLSyncNV</ptype> <name>sync</name></param> ++ <param><ptype>EGLenum</ptype> <name>mode</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglStreamAttribKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLenum</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> <name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerAcquireKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerGLTextureExternalKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerOutputEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ <param><ptype>EGLOutputLayerEXT</ptype> <name>layer</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerReleaseKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSurfaceAttrib</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint</ptype> <name>value</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffers</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffersWithDamageEXT</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> *<name>rects</name></param> ++ <param><ptype>EGLint</ptype> <name>n_rects</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffersWithDamageKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> *<name>rects</name></param> ++ <param><ptype>EGLint</ptype> <name>n_rects</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffersRegionNOK</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>numRects</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>rects</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffersRegion2NOK</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLint</ptype> <name>numRects</name></param> ++ <param>const <ptype>EGLint</ptype> *<name>rects</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglSwapInterval</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLint</ptype> <name>interval</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglTerminate</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglUnlockSurfaceKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglWaitClient</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglWaitGL</name></proto> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglWaitNative</name></proto> ++ <param><ptype>EGLint</ptype> <name>engine</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLBoolean</ptype> <name>eglWaitSync</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSync</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>flags</name></param> ++ </command> ++ <command> ++ <proto><ptype>EGLint</ptype> <name>eglWaitSyncKHR</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param> ++ <param><ptype>EGLint</ptype> <name>flags</name></param> ++ </command> ++ </commands> ++ ++ <!-- SECTION: EGL API interface definitions. --> ++ <feature api="egl" name="EGL_VERSION_1_0" number="1.0"> ++ <require> ++ <enum name="EGL_ALPHA_SIZE"/> ++ <enum name="EGL_BAD_ACCESS"/> ++ <enum name="EGL_BAD_ALLOC"/> ++ <enum name="EGL_BAD_ATTRIBUTE"/> ++ <enum name="EGL_BAD_CONFIG"/> ++ <enum name="EGL_BAD_CONTEXT"/> ++ <enum name="EGL_BAD_CURRENT_SURFACE"/> ++ <enum name="EGL_BAD_DISPLAY"/> ++ <enum name="EGL_BAD_MATCH"/> ++ <enum name="EGL_BAD_NATIVE_PIXMAP"/> ++ <enum name="EGL_BAD_NATIVE_WINDOW"/> ++ <enum name="EGL_BAD_PARAMETER"/> ++ <enum name="EGL_BAD_SURFACE"/> ++ <enum name="EGL_BLUE_SIZE"/> ++ <enum name="EGL_BUFFER_SIZE"/> ++ <enum name="EGL_CONFIG_CAVEAT"/> ++ <enum name="EGL_CONFIG_ID"/> ++ <enum name="EGL_CORE_NATIVE_ENGINE"/> ++ <enum name="EGL_DEPTH_SIZE"/> ++ <enum name="EGL_DONT_CARE"/> ++ <enum name="EGL_DRAW"/> ++ <enum name="EGL_EXTENSIONS"/> ++ <enum name="EGL_FALSE"/> ++ <enum name="EGL_GREEN_SIZE"/> ++ <enum name="EGL_HEIGHT"/> ++ <enum name="EGL_LARGEST_PBUFFER"/> ++ <enum name="EGL_LEVEL"/> ++ <enum name="EGL_MAX_PBUFFER_HEIGHT"/> ++ <enum name="EGL_MAX_PBUFFER_PIXELS"/> ++ <enum name="EGL_MAX_PBUFFER_WIDTH"/> ++ <enum name="EGL_NATIVE_RENDERABLE"/> ++ <enum name="EGL_NATIVE_VISUAL_ID"/> ++ <enum name="EGL_NATIVE_VISUAL_TYPE"/> ++ <enum name="EGL_NONE"/> ++ <enum name="EGL_NON_CONFORMANT_CONFIG"/> ++ <enum name="EGL_NOT_INITIALIZED"/> ++ <enum name="EGL_NO_CONTEXT"/> ++ <enum name="EGL_NO_DISPLAY"/> ++ <enum name="EGL_NO_SURFACE"/> ++ <enum name="EGL_PBUFFER_BIT"/> ++ <enum name="EGL_PIXMAP_BIT"/> ++ <enum name="EGL_READ"/> ++ <enum name="EGL_RED_SIZE"/> ++ <enum name="EGL_SAMPLES"/> ++ <enum name="EGL_SAMPLE_BUFFERS"/> ++ <enum name="EGL_SLOW_CONFIG"/> ++ <enum name="EGL_STENCIL_SIZE"/> ++ <enum name="EGL_SUCCESS"/> ++ <enum name="EGL_SURFACE_TYPE"/> ++ <enum name="EGL_TRANSPARENT_BLUE_VALUE"/> ++ <enum name="EGL_TRANSPARENT_GREEN_VALUE"/> ++ <enum name="EGL_TRANSPARENT_RED_VALUE"/> ++ <enum name="EGL_TRANSPARENT_RGB"/> ++ <enum name="EGL_TRANSPARENT_TYPE"/> ++ <enum name="EGL_TRUE"/> ++ <enum name="EGL_VENDOR"/> ++ <enum name="EGL_VERSION"/> ++ <enum name="EGL_WIDTH"/> ++ <enum name="EGL_WINDOW_BIT"/> ++ <command name="eglChooseConfig"/> ++ <command name="eglCopyBuffers"/> ++ <command name="eglCreateContext"/> ++ <command name="eglCreatePbufferSurface"/> ++ <command name="eglCreatePixmapSurface"/> ++ <command name="eglCreateWindowSurface"/> ++ <command name="eglDestroyContext"/> ++ <command name="eglDestroySurface"/> ++ <command name="eglGetConfigAttrib"/> ++ <command name="eglGetConfigs"/> ++ <command name="eglGetCurrentDisplay"/> ++ <command name="eglGetCurrentSurface"/> ++ <command name="eglGetDisplay"/> ++ <command name="eglGetError"/> ++ <command name="eglGetProcAddress"/> ++ <command name="eglInitialize"/> ++ <command name="eglMakeCurrent"/> ++ <command name="eglQueryContext"/> ++ <command name="eglQueryString"/> ++ <command name="eglQuerySurface"/> ++ <command name="eglSwapBuffers"/> ++ <command name="eglTerminate"/> ++ <command name="eglWaitGL"/> ++ <command name="eglWaitNative"/> ++ </require> ++ </feature> ++ <feature api="egl" name="EGL_VERSION_1_1" number="1.1"> ++ <require> ++ <enum name="EGL_BACK_BUFFER"/> ++ <enum name="EGL_BIND_TO_TEXTURE_RGB"/> ++ <enum name="EGL_BIND_TO_TEXTURE_RGBA"/> ++ <enum name="EGL_CONTEXT_LOST"/> ++ <enum name="EGL_MIN_SWAP_INTERVAL"/> ++ <enum name="EGL_MAX_SWAP_INTERVAL"/> ++ <enum name="EGL_MIPMAP_TEXTURE"/> ++ <enum name="EGL_MIPMAP_LEVEL"/> ++ <enum name="EGL_NO_TEXTURE"/> ++ <enum name="EGL_TEXTURE_2D"/> ++ <enum name="EGL_TEXTURE_FORMAT"/> ++ <enum name="EGL_TEXTURE_RGB"/> ++ <enum name="EGL_TEXTURE_RGBA"/> ++ <enum name="EGL_TEXTURE_TARGET"/> ++ <command name="eglBindTexImage"/> ++ <command name="eglReleaseTexImage"/> ++ <command name="eglSurfaceAttrib"/> ++ <command name="eglSwapInterval"/> ++ </require> ++ </feature> ++ <feature api="egl" name="EGL_VERSION_1_2" number="1.2"> ++ <require> ++ <enum name="EGL_ALPHA_FORMAT"/> ++ <enum name="EGL_ALPHA_FORMAT_NONPRE"/> ++ <enum name="EGL_ALPHA_FORMAT_PRE"/> ++ <enum name="EGL_ALPHA_MASK_SIZE"/> ++ <enum name="EGL_BUFFER_PRESERVED"/> ++ <enum name="EGL_BUFFER_DESTROYED"/> ++ <enum name="EGL_CLIENT_APIS"/> ++ <enum name="EGL_COLORSPACE"/> ++ <enum name="EGL_COLORSPACE_sRGB"/> ++ <enum name="EGL_COLORSPACE_LINEAR"/> ++ <enum name="EGL_COLOR_BUFFER_TYPE"/> ++ <enum name="EGL_CONTEXT_CLIENT_TYPE"/> ++ <enum name="EGL_DISPLAY_SCALING"/> ++ <enum name="EGL_HORIZONTAL_RESOLUTION"/> ++ <enum name="EGL_LUMINANCE_BUFFER"/> ++ <enum name="EGL_LUMINANCE_SIZE"/> ++ <enum name="EGL_OPENGL_ES_BIT"/> ++ <enum name="EGL_OPENVG_BIT"/> ++ <enum name="EGL_OPENGL_ES_API"/> ++ <enum name="EGL_OPENVG_API"/> ++ <enum name="EGL_OPENVG_IMAGE"/> ++ <enum name="EGL_PIXEL_ASPECT_RATIO"/> ++ <enum name="EGL_RENDERABLE_TYPE"/> ++ <enum name="EGL_RENDER_BUFFER"/> ++ <enum name="EGL_RGB_BUFFER"/> ++ <enum name="EGL_SINGLE_BUFFER"/> ++ <enum name="EGL_SWAP_BEHAVIOR"/> ++ <enum name="EGL_UNKNOWN"/> ++ <enum name="EGL_VERTICAL_RESOLUTION"/> ++ <command name="eglBindAPI"/> ++ <command name="eglQueryAPI"/> ++ <command name="eglCreatePbufferFromClientBuffer"/> ++ <command name="eglReleaseThread"/> ++ <command name="eglWaitClient"/> ++ </require> ++ </feature> ++ <feature api="egl" name="EGL_VERSION_1_3" number="1.3"> ++ <require> ++ <enum name="EGL_CONFORMANT"/> ++ <enum name="EGL_CONTEXT_CLIENT_VERSION"/> ++ <enum name="EGL_MATCH_NATIVE_PIXMAP"/> ++ <enum name="EGL_OPENGL_ES2_BIT"/> ++ <enum name="EGL_VG_ALPHA_FORMAT"/> ++ <enum name="EGL_VG_ALPHA_FORMAT_NONPRE"/> ++ <enum name="EGL_VG_ALPHA_FORMAT_PRE"/> ++ <enum name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/> ++ <enum name="EGL_VG_COLORSPACE"/> ++ <enum name="EGL_VG_COLORSPACE_sRGB"/> ++ <enum name="EGL_VG_COLORSPACE_LINEAR"/> ++ <enum name="EGL_VG_COLORSPACE_LINEAR_BIT"/> ++ </require> ++ </feature> ++ <feature api="egl" name="EGL_VERSION_1_4" number="1.4"> ++ <require> ++ <enum name="EGL_DEFAULT_DISPLAY"/> ++ <enum name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/> ++ <enum name="EGL_MULTISAMPLE_RESOLVE"/> ++ <enum name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/> ++ <enum name="EGL_MULTISAMPLE_RESOLVE_BOX"/> ++ <enum name="EGL_OPENGL_API"/> ++ <enum name="EGL_OPENGL_BIT"/> ++ <enum name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/> ++ <command name="eglGetCurrentContext"/> ++ </require> ++ </feature> ++ <feature api="egl" name="EGL_VERSION_1_5" number="1.5"> ++ <require comment="EGL_KHR_create_context features"> ++ <enum name="EGL_CONTEXT_MAJOR_VERSION"/> ++ <enum name="EGL_CONTEXT_MINOR_VERSION"/> ++ <enum name="EGL_CONTEXT_OPENGL_PROFILE_MASK"/> ++ <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/> ++ <enum name="EGL_NO_RESET_NOTIFICATION"/> ++ <enum name="EGL_LOSE_CONTEXT_ON_RESET"/> ++ <enum name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT"/> ++ <enum name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT"/> ++ <enum name="EGL_CONTEXT_OPENGL_DEBUG"/> ++ <enum name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE"/> ++ <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/> ++ <enum name="EGL_OPENGL_ES3_BIT"/> ++ </require> ++ <require comment="EGL_EXT_create_context_robustness"> ++ <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/> ++ <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/> ++ </require> ++ <require comment="EGL_EXT_client_extensions"/> ++ <require comment="EGL_KHR_cl_event2"> ++ <enum name="EGL_CL_EVENT_HANDLE"/> ++ <enum name="EGL_SYNC_CL_EVENT"/> ++ <enum name="EGL_SYNC_CL_EVENT_COMPLETE"/> ++ </require> ++ <require comment="EGL_KHR_fence_sync"> ++ <enum name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE"/> ++ <enum name="EGL_SYNC_TYPE"/> ++ <enum name="EGL_SYNC_STATUS"/> ++ <enum name="EGL_SYNC_CONDITION"/> ++ <enum name="EGL_SIGNALED"/> ++ <enum name="EGL_UNSIGNALED"/> ++ <enum name="EGL_SYNC_FLUSH_COMMANDS_BIT"/> ++ <enum name="EGL_FOREVER"/> ++ <enum name="EGL_TIMEOUT_EXPIRED"/> ++ <enum name="EGL_CONDITION_SATISFIED"/> ++ <enum name="EGL_NO_SYNC"/> ++ <enum name="EGL_SYNC_FENCE"/> ++ <command name="eglCreateSync"/> ++ <command name="eglDestroySync"/> ++ <command name="eglClientWaitSync"/> ++ <command name="eglGetSyncAttrib"/> ++ </require> ++ <require comment="EGL_KHR_get_all_proc_addresses"/> ++ <require comment="EGL_KHR_client_get_all_proc_addresses"/> ++ <require comment="EGL_KHR_gl_colorspace"> ++ <enum name="EGL_GL_COLORSPACE"/> ++ <enum name="EGL_GL_COLORSPACE_SRGB"/> ++ <enum name="EGL_GL_COLORSPACE_LINEAR"/> ++ </require> ++ <require comment="EGL_KHR_gl_renderbuffer_image"> ++ <enum name="EGL_GL_RENDERBUFFER"/> ++ </require> ++ <require comment="EGL_KHR_gl_texture_2D_image"> ++ <enum name="EGL_GL_TEXTURE_2D"/> ++ <enum name="EGL_GL_TEXTURE_LEVEL"/> ++ </require> ++ <require comment="EGL_KHR_gl_texture_3D_image"> ++ <enum name="EGL_GL_TEXTURE_3D"/> ++ <enum name="EGL_GL_TEXTURE_ZOFFSET"/> ++ </require> ++ <require comment="EGL_KHR_gl_texture_cubemap_image"> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/> ++ </require> ++ <require comment="EGL_KHR_image_base"> ++ <enum name="EGL_IMAGE_PRESERVED"/> ++ <enum name="EGL_NO_IMAGE"/> ++ <command name="eglCreateImage"/> ++ <command name="eglDestroyImage"/> ++ </require> ++ <require comment="EGL_EXT_platform_base"> ++ <command name="eglGetPlatformDisplay"/> ++ <command name="eglCreatePlatformWindowSurface"/> ++ <command name="eglCreatePlatformPixmapSurface"/> ++ </require> ++ <require comment="EGL_KHR_surfaceless_context - just relaxes an error condition"/> ++ <require comment="EGL_KHR_wait_sync"> ++ <command name="eglWaitSync"/> ++ </require> ++ </feature> ++ ++ <!-- SECTION: EGL extension interface definitions --> ++ <extensions> ++ <extension name="EGL_ANDROID_blob_cache" supported="egl"> ++ <require> ++ <command name="eglSetBlobCacheFuncsANDROID"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANDROID_framebuffer_target" supported="egl"> ++ <require> ++ <enum name="EGL_FRAMEBUFFER_TARGET_ANDROID"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANDROID_image_native_buffer" supported="egl"> ++ <require> ++ <enum name="EGL_NATIVE_BUFFER_ANDROID"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANDROID_native_fence_sync" supported="egl"> ++ <require> ++ <enum name="EGL_SYNC_NATIVE_FENCE_ANDROID"/> ++ <enum name="EGL_SYNC_NATIVE_FENCE_FD_ANDROID"/> ++ <enum name="EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID"/> ++ <enum name="EGL_NO_NATIVE_FENCE_FD_ANDROID"/> ++ <command name="eglDupNativeFenceFDANDROID"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANDROID_recordable" supported="egl"> ++ <require> ++ <enum name="EGL_RECORDABLE_ANDROID"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANGLE_d3d_share_handle_client_buffer" supported="egl"> ++ <require> ++ <enum name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANGLE_device_d3d" supported="egl"> ++ <require> ++ <enum name="EGL_D3D9_DEVICE_ANGLE"/> ++ <enum name="EGL_D3D11_DEVICE_ANGLE"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANGLE_query_surface_pointer" supported="egl"> ++ <require> ++ <command name="eglQuerySurfacePointerANGLE"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANGLE_surface_d3d_texture_2d_share_handle" supported="egl"> ++ <require> ++ <enum name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/> ++ </require> ++ </extension> ++ <extension name="EGL_ANGLE_window_fixed_size" supported="egl"> ++ <require> ++ <enum name="EGL_FIXED_SIZE_ANGLE"/> ++ </require> ++ </extension> ++ <extension name="EGL_ARM_pixmap_multisample_discard" supported="egl"> ++ <require> ++ <enum name="EGL_DISCARD_SAMPLES_ARM"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_buffer_age" supported="egl"> ++ <require> ++ <enum name="EGL_BUFFER_AGE_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_client_extensions" supported="egl"/> ++ <extension name="EGL_EXT_create_context_robustness" supported="egl"> ++ <require> ++ <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT"/> ++ <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT"/> ++ <enum name="EGL_NO_RESET_NOTIFICATION_EXT"/> ++ <enum name="EGL_LOSE_CONTEXT_ON_RESET_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_device_base" supported="egl"> ++ <require> ++ <enum name="EGL_NO_DEVICE_EXT"/> ++ <enum name="EGL_BAD_DEVICE_EXT"/> ++ <enum name="EGL_DEVICE_EXT"/> ++ <command name="eglQueryDeviceAttribEXT"/> ++ <command name="eglQueryDeviceStringEXT"/> ++ <command name="eglQueryDevicesEXT"/> ++ <command name="eglQueryDisplayAttribEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_device_drm" supported="egl"> ++ <require> ++ <enum name="EGL_DRM_DEVICE_FILE_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_device_enumeration" supported="egl"> ++ <require> ++ <command name="eglQueryDevicesEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_device_openwf" supported="egl"> ++ <require> ++ <enum name="EGL_OPENWF_DEVICE_ID_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_device_query" supported="egl"> ++ <require> ++ <enum name="EGL_NO_DEVICE_EXT"/> ++ <enum name="EGL_BAD_DEVICE_EXT"/> ++ <enum name="EGL_DEVICE_EXT"/> ++ <command name="eglQueryDeviceAttribEXT"/> ++ <command name="eglQueryDeviceStringEXT"/> ++ <command name="eglQueryDisplayAttribEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_image_dma_buf_import" supported="egl"> ++ <require> ++ <enum name="EGL_LINUX_DMA_BUF_EXT"/> ++ <enum name="EGL_LINUX_DRM_FOURCC_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE0_FD_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE0_OFFSET_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE0_PITCH_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE1_FD_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE1_OFFSET_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE1_PITCH_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE2_FD_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE2_OFFSET_EXT"/> ++ <enum name="EGL_DMA_BUF_PLANE2_PITCH_EXT"/> ++ <enum name="EGL_YUV_COLOR_SPACE_HINT_EXT"/> ++ <enum name="EGL_SAMPLE_RANGE_HINT_EXT"/> ++ <enum name="EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT"/> ++ <enum name="EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT"/> ++ <enum name="EGL_ITU_REC601_EXT"/> ++ <enum name="EGL_ITU_REC709_EXT"/> ++ <enum name="EGL_ITU_REC2020_EXT"/> ++ <enum name="EGL_YUV_FULL_RANGE_EXT"/> ++ <enum name="EGL_YUV_NARROW_RANGE_EXT"/> ++ <enum name="EGL_YUV_CHROMA_SITING_0_EXT"/> ++ <enum name="EGL_YUV_CHROMA_SITING_0_5_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_multiview_window" supported="egl"> ++ <require> ++ <enum name="EGL_MULTIVIEW_VIEW_COUNT_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_output_base" supported="egl"> ++ <require> ++ <type name="EGLOutputLayerEXT"/> ++ <type name="EGLOutputPortEXT"/> ++ <enum name="EGL_NO_OUTPUT_LAYER_EXT"/> ++ <enum name="EGL_NO_OUTPUT_PORT_EXT"/> ++ <enum name="EGL_BAD_OUTPUT_LAYER_EXT"/> ++ <enum name="EGL_BAD_OUTPUT_PORT_EXT"/> ++ <enum name="EGL_SWAP_INTERVAL_EXT"/> ++ <command name="eglGetOutputLayersEXT"/> ++ <command name="eglGetOutputPortsEXT"/> ++ <command name="eglOutputLayerAttribEXT"/> ++ <command name="eglQueryOutputLayerAttribEXT"/> ++ <command name="eglQueryOutputLayerStringEXT"/> ++ <command name="eglOutputPortAttribEXT"/> ++ <command name="eglQueryOutputPortAttribEXT"/> ++ <command name="eglQueryOutputPortStringEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_output_drm" supported="egl"> ++ <require> ++ <enum name="EGL_DRM_CRTC_EXT"/> ++ <enum name="EGL_DRM_PLANE_EXT"/> ++ <enum name="EGL_DRM_CONNECTOR_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_output_openwf" supported="egl"> ++ <require> ++ <enum name="EGL_OPENWF_PIPELINE_ID_EXT"/> ++ <enum name="EGL_OPENWF_PORT_ID_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_platform_base" supported="egl"> ++ <require> ++ <command name="eglGetPlatformDisplayEXT"/> ++ <command name="eglCreatePlatformWindowSurfaceEXT"/> ++ <command name="eglCreatePlatformPixmapSurfaceEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_platform_device" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_DEVICE_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_platform_wayland" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_WAYLAND_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_platform_x11" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_X11_EXT"/> ++ <enum name="EGL_PLATFORM_X11_SCREEN_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_protected_surface" supported="egl"> ++ <require> ++ <enum name="EGL_PROTECTED_CONTENT_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_stream_consumer_egloutput" supported="egl"> ++ <require> ++ <command name="eglStreamConsumerOutputEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_swap_buffers_with_damage" supported="egl"> ++ <require> ++ <command name="eglSwapBuffersWithDamageEXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_EXT_yuv_surface" supported="egl"> ++ <require> ++ <enum name="EGL_YUV_ORDER_EXT"/> ++ <enum name="EGL_YUV_NUMBER_OF_PLANES_EXT"/> ++ <enum name="EGL_YUV_SUBSAMPLE_EXT"/> ++ <enum name="EGL_YUV_DEPTH_RANGE_EXT"/> ++ <enum name="EGL_YUV_CSC_STANDARD_EXT"/> ++ <enum name="EGL_YUV_PLANE_BPP_EXT"/> ++ <enum name="EGL_YUV_BUFFER_EXT"/> ++ <enum name="EGL_YUV_ORDER_YUV_EXT"/> ++ <enum name="EGL_YUV_ORDER_YVU_EXT"/> ++ <enum name="EGL_YUV_ORDER_YUYV_EXT"/> ++ <enum name="EGL_YUV_ORDER_UYVY_EXT"/> ++ <enum name="EGL_YUV_ORDER_YVYU_EXT"/> ++ <enum name="EGL_YUV_ORDER_VYUY_EXT"/> ++ <enum name="EGL_YUV_ORDER_AYUV_EXT"/> ++ <enum name="EGL_YUV_SUBSAMPLE_4_2_0_EXT"/> ++ <enum name="EGL_YUV_SUBSAMPLE_4_2_2_EXT"/> ++ <enum name="EGL_YUV_SUBSAMPLE_4_4_4_EXT"/> ++ <enum name="EGL_YUV_DEPTH_RANGE_LIMITED_EXT"/> ++ <enum name="EGL_YUV_DEPTH_RANGE_FULL_EXT"/> ++ <enum name="EGL_YUV_CSC_STANDARD_601_EXT"/> ++ <enum name="EGL_YUV_CSC_STANDARD_709_EXT"/> ++ <enum name="EGL_YUV_CSC_STANDARD_2020_EXT"/> ++ <enum name="EGL_YUV_PLANE_BPP_0_EXT"/> ++ <enum name="EGL_YUV_PLANE_BPP_8_EXT"/> ++ <enum name="EGL_YUV_PLANE_BPP_10_EXT"/> ++ </require> ++ </extension> ++ <extension name="EGL_HI_clientpixmap" supported="egl"> ++ <require> ++ <enum name="EGL_CLIENT_PIXMAP_POINTER_HI"/> ++ <command name="eglCreatePixmapSurfaceHI"/> ++ </require> ++ </extension> ++ <extension name="EGL_HI_colorformats" supported="egl"> ++ <require> ++ <enum name="EGL_COLOR_FORMAT_HI"/> ++ <enum name="EGL_COLOR_RGB_HI"/> ++ <enum name="EGL_COLOR_RGBA_HI"/> ++ <enum name="EGL_COLOR_ARGB_HI"/> ++ </require> ++ </extension> ++ <extension name="EGL_IMG_context_priority" supported="egl"> ++ <require> ++ <enum name="EGL_CONTEXT_PRIORITY_LEVEL_IMG"/> ++ <enum name="EGL_CONTEXT_PRIORITY_HIGH_IMG"/> ++ <enum name="EGL_CONTEXT_PRIORITY_MEDIUM_IMG"/> ++ <enum name="EGL_CONTEXT_PRIORITY_LOW_IMG"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_cl_event" supported="egl"> ++ <require> ++ <enum name="EGL_CL_EVENT_HANDLE_KHR"/> ++ <enum name="EGL_SYNC_CL_EVENT_KHR"/> ++ <enum name="EGL_SYNC_CL_EVENT_COMPLETE_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_cl_event2" supported="egl"> ++ <require> ++ <enum name="EGL_CL_EVENT_HANDLE_KHR"/> ++ <enum name="EGL_SYNC_CL_EVENT_KHR"/> ++ <enum name="EGL_SYNC_CL_EVENT_COMPLETE_KHR"/> ++ <command name="eglCreateSync64KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_config_attribs" supported="egl"> ++ <require> ++ <enum name="EGL_CONFORMANT_KHR"/> ++ <enum name="EGL_VG_COLORSPACE_LINEAR_BIT_KHR"/> ++ <enum name="EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_client_get_all_proc_addresses" supported="egl" comment="Alias of EGL_KHR_get_all_proc_addresses"/> ++ <extension name="EGL_KHR_create_context" supported="egl"> ++ <require> ++ <enum name="EGL_CONTEXT_MAJOR_VERSION_KHR"/> ++ <enum name="EGL_CONTEXT_MINOR_VERSION_KHR"/> ++ <enum name="EGL_CONTEXT_FLAGS_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR"/> ++ <enum name="EGL_NO_RESET_NOTIFICATION_KHR"/> ++ <enum name="EGL_LOSE_CONTEXT_ON_RESET_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR"/> ++ <enum name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR"/> ++ <enum name="EGL_OPENGL_ES3_BIT"/> ++ <enum name="EGL_OPENGL_ES3_BIT_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_create_context_no_error" supported="egl"> ++ <require> ++ <enum name="EGL_CONTEXT_OPENGL_NO_ERROR_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_debug" supported="egl"> ++ <require> ++ <!-- Explicit dependencies require to get EGLDEBUGPROCKHR dependencies correct --> ++ <type name="EGLLabelKHR"/> ++ <type name="EGLObjectKHR"/> ++ <enum name="EGL_OBJECT_THREAD_KHR"/> ++ <enum name="EGL_OBJECT_DISPLAY_KHR"/> ++ <enum name="EGL_OBJECT_CONTEXT_KHR"/> ++ <enum name="EGL_OBJECT_SURFACE_KHR"/> ++ <enum name="EGL_OBJECT_IMAGE_KHR"/> ++ <enum name="EGL_OBJECT_SYNC_KHR"/> ++ <enum name="EGL_OBJECT_STREAM_KHR"/> ++ <enum name="EGL_DEBUG_MSG_CRITICAL_KHR"/> ++ <enum name="EGL_DEBUG_MSG_ERROR_KHR"/> ++ <enum name="EGL_DEBUG_MSG_WARN_KHR"/> ++ <enum name="EGL_DEBUG_MSG_INFO_KHR"/> ++ <enum name="EGL_DEBUG_CALLBACK_KHR"/> ++ <command name="eglDebugMessageControlKHR"/> ++ <command name="eglQueryDebugKHR"/> ++ <command name="eglLabelObjectKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_fence_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl"> ++ <require> ++ <!-- Most interfaces also defined by EGL_KHR_reusable sync --> ++ <enum name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR"/> ++ <enum name="EGL_SYNC_CONDITION_KHR"/> ++ <enum name="EGL_SYNC_FENCE_KHR"/> ++ <command name="eglCreateSyncKHR"/> ++ <command name="eglDestroySyncKHR"/> ++ <command name="eglClientWaitSyncKHR"/> ++ <command name="eglGetSyncAttribKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_get_all_proc_addresses" supported="egl"/> ++ <extension name="EGL_KHR_gl_colorspace" supported="egl"> ++ <require> ++ <enum name="EGL_GL_COLORSPACE_KHR"/> ++ <enum name="EGL_GL_COLORSPACE_SRGB_KHR"/> ++ <enum name="EGL_GL_COLORSPACE_LINEAR_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_gl_renderbuffer_image" supported="egl"> ++ <require> ++ <enum name="EGL_GL_RENDERBUFFER_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_gl_texture_2D_image" supported="egl"> ++ <require> ++ <enum name="EGL_GL_TEXTURE_2D_KHR"/> ++ <enum name="EGL_GL_TEXTURE_LEVEL_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_gl_texture_3D_image" supported="egl"> ++ <require> ++ <enum name="EGL_GL_TEXTURE_3D_KHR"/> ++ <enum name="EGL_GL_TEXTURE_ZOFFSET_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_gl_texture_cubemap_image" supported="egl"> ++ <require> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR"/> ++ <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_image" supported="egl"> ++ <require> ++ <enum name="EGL_NATIVE_PIXMAP_KHR"/> ++ <enum name="EGL_NO_IMAGE_KHR"/> ++ <command name="eglCreateImageKHR"/> ++ <command name="eglDestroyImageKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_image_base" supported="egl"> ++ <require> ++ <enum name="EGL_IMAGE_PRESERVED_KHR"/> ++ <enum name="EGL_NO_IMAGE_KHR"/> ++ <command name="eglCreateImageKHR"/> ++ <command name="eglDestroyImageKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_image_pixmap" supported="egl"> ++ <require> ++ <enum name="EGL_NATIVE_PIXMAP_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_lock_surface" supported="egl"> ++ <require> ++ <enum name="EGL_READ_SURFACE_BIT_KHR"/> ++ <enum name="EGL_WRITE_SURFACE_BIT_KHR"/> ++ <enum name="EGL_LOCK_SURFACE_BIT_KHR"/> ++ <enum name="EGL_OPTIMAL_FORMAT_BIT_KHR"/> ++ <enum name="EGL_MATCH_FORMAT_KHR"/> ++ <enum name="EGL_FORMAT_RGB_565_EXACT_KHR"/> ++ <enum name="EGL_FORMAT_RGB_565_KHR"/> ++ <enum name="EGL_FORMAT_RGBA_8888_EXACT_KHR"/> ++ <enum name="EGL_FORMAT_RGBA_8888_KHR"/> ++ <enum name="EGL_MAP_PRESERVE_PIXELS_KHR"/> ++ <enum name="EGL_LOCK_USAGE_HINT_KHR"/> ++ <enum name="EGL_BITMAP_POINTER_KHR"/> ++ <enum name="EGL_BITMAP_PITCH_KHR"/> ++ <enum name="EGL_BITMAP_ORIGIN_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_RED_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR"/> ++ <enum name="EGL_LOWER_LEFT_KHR"/> ++ <enum name="EGL_UPPER_LEFT_KHR"/> ++ <command name="eglLockSurfaceKHR"/> ++ <command name="eglUnlockSurfaceKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_lock_surface2" supported="egl"> ++ <require> ++ <enum name="EGL_BITMAP_PIXEL_SIZE_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_lock_surface3" supported="egl"> ++ <require> ++ <enum name="EGL_READ_SURFACE_BIT_KHR"/> ++ <enum name="EGL_WRITE_SURFACE_BIT_KHR"/> ++ <enum name="EGL_LOCK_SURFACE_BIT_KHR"/> ++ <enum name="EGL_OPTIMAL_FORMAT_BIT_KHR"/> ++ <enum name="EGL_MATCH_FORMAT_KHR"/> ++ <enum name="EGL_FORMAT_RGB_565_EXACT_KHR"/> ++ <enum name="EGL_FORMAT_RGB_565_KHR"/> ++ <enum name="EGL_FORMAT_RGBA_8888_EXACT_KHR"/> ++ <enum name="EGL_FORMAT_RGBA_8888_KHR"/> ++ <enum name="EGL_MAP_PRESERVE_PIXELS_KHR"/> ++ <enum name="EGL_LOCK_USAGE_HINT_KHR"/> ++ <enum name="EGL_BITMAP_PITCH_KHR"/> ++ <enum name="EGL_BITMAP_ORIGIN_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_RED_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR"/> ++ <enum name="EGL_BITMAP_PIXEL_SIZE_KHR"/> ++ <enum name="EGL_BITMAP_POINTER_KHR"/> ++ <enum name="EGL_LOWER_LEFT_KHR"/> ++ <enum name="EGL_UPPER_LEFT_KHR"/> ++ <command name="eglLockSurfaceKHR"/> ++ <command name="eglUnlockSurfaceKHR"/> ++ <command name="eglQuerySurface64KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_partial_update" supported="egl"> ++ <require> ++ <enum name="EGL_BUFFER_AGE_KHR"/> ++ <command name="eglSetDamageRegionKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_platform_android" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_ANDROID_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_platform_gbm" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_GBM_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_platform_wayland" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_WAYLAND_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_platform_x11" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_X11_KHR"/> ++ <enum name="EGL_PLATFORM_X11_SCREEN_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_reusable_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl"> ++ <require> ++ <enum name="EGL_SYNC_STATUS_KHR"/> ++ <enum name="EGL_SIGNALED_KHR"/> ++ <enum name="EGL_UNSIGNALED_KHR"/> ++ <enum name="EGL_TIMEOUT_EXPIRED_KHR"/> ++ <enum name="EGL_CONDITION_SATISFIED_KHR"/> ++ <enum name="EGL_SYNC_TYPE_KHR"/> ++ <enum name="EGL_SYNC_REUSABLE_KHR"/> ++ <enum name="EGL_SYNC_FLUSH_COMMANDS_BIT_KHR"/> ++ <enum name="EGL_FOREVER_KHR"/> ++ <enum name="EGL_NO_SYNC_KHR"/> ++ <command name="eglCreateSyncKHR"/> ++ <command name="eglDestroySyncKHR"/> ++ <command name="eglClientWaitSyncKHR"/> ++ <command name="eglSignalSyncKHR"/> ++ <command name="eglGetSyncAttribKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_stream" protect="KHRONOS_SUPPORT_INT64" supported="egl"> ++ <require> ++ <enum name="EGL_NO_STREAM_KHR"/> ++ <enum name="EGL_CONSUMER_LATENCY_USEC_KHR"/> ++ <enum name="EGL_PRODUCER_FRAME_KHR"/> ++ <enum name="EGL_CONSUMER_FRAME_KHR"/> ++ <enum name="EGL_STREAM_STATE_KHR"/> ++ <enum name="EGL_STREAM_STATE_CREATED_KHR"/> ++ <enum name="EGL_STREAM_STATE_CONNECTING_KHR"/> ++ <enum name="EGL_STREAM_STATE_EMPTY_KHR"/> ++ <enum name="EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR"/> ++ <enum name="EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR"/> ++ <enum name="EGL_STREAM_STATE_DISCONNECTED_KHR"/> ++ <enum name="EGL_BAD_STREAM_KHR"/> ++ <enum name="EGL_BAD_STATE_KHR"/> ++ <command name="eglCreateStreamKHR"/> ++ <command name="eglDestroyStreamKHR"/> ++ <command name="eglStreamAttribKHR"/> ++ <command name="eglQueryStreamKHR"/> ++ <command name="eglQueryStreamu64KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_stream_consumer_gltexture" protect="EGL_KHR_stream" supported="egl"> ++ <require> ++ <enum name="EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR"/> ++ <command name="eglStreamConsumerGLTextureExternalKHR"/> ++ <command name="eglStreamConsumerAcquireKHR"/> ++ <command name="eglStreamConsumerReleaseKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_stream_cross_process_fd" protect="EGL_KHR_stream" supported="egl"> ++ <require> ++ <enum name="EGL_NO_FILE_DESCRIPTOR_KHR"/> ++ <command name="eglGetStreamFileDescriptorKHR"/> ++ <command name="eglCreateStreamFromFileDescriptorKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_stream_fifo" protect="EGL_KHR_stream" supported="egl"> ++ <require> ++ <enum name="EGL_STREAM_FIFO_LENGTH_KHR"/> ++ <enum name="EGL_STREAM_TIME_NOW_KHR"/> ++ <enum name="EGL_STREAM_TIME_CONSUMER_KHR"/> ++ <enum name="EGL_STREAM_TIME_PRODUCER_KHR"/> ++ <command name="eglQueryStreamTimeKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_stream_producer_aldatalocator" protect="EGL_KHR_stream" supported="egl"/> ++ <extension name="EGL_KHR_stream_producer_eglsurface" protect="EGL_KHR_stream" supported="egl"> ++ <require> ++ <enum name="EGL_STREAM_BIT_KHR"/> ++ <command name="eglCreateStreamProducerSurfaceKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_surfaceless_context" supported="egl" comment="Just relaxes an error condition"/> ++ <extension name="EGL_KHR_swap_buffers_with_damage" supported="egl"> ++ <require> ++ <command name="eglSwapBuffersWithDamageKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_vg_parent_image" supported="egl"> ++ <require> ++ <enum name="EGL_VG_PARENT_IMAGE_KHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_KHR_wait_sync" supported="egl"> ++ <require> ++ <command name="eglWaitSyncKHR"/> ++ </require> ++ </extension> ++ <extension name="EGL_MESA_drm_image" supported="egl"> ++ <require> ++ <enum name="EGL_DRM_BUFFER_FORMAT_MESA"/> ++ <enum name="EGL_DRM_BUFFER_USE_MESA"/> ++ <enum name="EGL_DRM_BUFFER_FORMAT_ARGB32_MESA"/> ++ <enum name="EGL_DRM_BUFFER_MESA"/> ++ <enum name="EGL_DRM_BUFFER_STRIDE_MESA"/> ++ <enum name="EGL_DRM_BUFFER_USE_SCANOUT_MESA"/> ++ <enum name="EGL_DRM_BUFFER_USE_SHARE_MESA"/> ++ <command name="eglCreateDRMImageMESA"/> ++ <command name="eglExportDRMImageMESA"/> ++ </require> ++ </extension> ++ <extension name="EGL_MESA_image_dma_buf_export" supported="egl"> ++ <require> ++ <type name="EGLuint64KHR"/> ++ <command name="eglExportDMABUFImageQueryMESA"/> ++ <command name="eglExportDMABUFImageMESA"/> ++ </require> ++ </extension> ++ <extension name="EGL_MESA_platform_gbm" supported="egl"> ++ <require> ++ <enum name="EGL_PLATFORM_GBM_MESA"/> ++ </require> ++ </extension> ++ <extension name="EGL_NOK_swap_region" supported="egl"> ++ <require> ++ <command name="eglSwapBuffersRegionNOK"/> ++ </require> ++ </extension> ++ <extension name="EGL_NOK_swap_region2" supported="egl"> ++ <require> ++ <command name="eglSwapBuffersRegion2NOK"/> ++ </require> ++ </extension> ++ <extension name="EGL_NOK_texture_from_pixmap" supported="egl"> ++ <require> ++ <enum name="EGL_Y_INVERTED_NOK"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_3dvision_surface" supported="egl"> ++ <require> ++ <enum name="EGL_AUTO_STEREO_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_coverage_sample" supported="egl"> ++ <require> ++ <enum name="EGL_COVERAGE_BUFFERS_NV"/> ++ <enum name="EGL_COVERAGE_SAMPLES_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_coverage_sample_resolve" supported="egl"> ++ <require> ++ <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_NV"/> ++ <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV"/> ++ <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_cuda_event" supported="egl"> ++ <require> ++ <enum name="EGL_CUDA_EVENT_HANDLE_NV"/> ++ <enum name="EGL_SYNC_CUDA_EVENT_NV"/> ++ <enum name="EGL_SYNC_CUDA_EVENT_COMPLETE_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_depth_nonlinear" supported="egl"> ++ <require> ++ <enum name="EGL_DEPTH_ENCODING_NV"/> ++ <enum name="EGL_DEPTH_ENCODING_NONE_NV"/> ++ <enum name="EGL_DEPTH_ENCODING_NONLINEAR_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_device_cuda" supported="egl"> ++ <require> ++ <enum name="EGL_CUDA_DEVICE_NV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_native_query" supported="egl"> ++ <require> ++ <command name="eglQueryNativeDisplayNV"/> ++ <command name="eglQueryNativeWindowNV"/> ++ <command name="eglQueryNativePixmapNV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_post_convert_rounding" supported="egl"> ++ <require> ++ </require> ++ </extension> ++ <extension name="EGL_NV_post_sub_buffer" supported="egl"> ++ <require> ++ <enum name="EGL_POST_SUB_BUFFER_SUPPORTED_NV"/> ++ <command name="eglPostSubBufferNV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_stream_sync" supported="egl"> ++ <require> ++ <enum name="EGL_SYNC_TYPE_KHR"/> ++ <enum name="EGL_SYNC_NEW_FRAME_NV"/> ++ <command name="eglCreateStreamSyncNV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl"> ++ <require> ++ <enum name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV"/> ++ <enum name="EGL_SYNC_STATUS_NV"/> ++ <enum name="EGL_SIGNALED_NV"/> ++ <enum name="EGL_UNSIGNALED_NV"/> ++ <enum name="EGL_SYNC_FLUSH_COMMANDS_BIT_NV"/> ++ <enum name="EGL_FOREVER_NV"/> ++ <enum name="EGL_ALREADY_SIGNALED_NV"/> ++ <enum name="EGL_TIMEOUT_EXPIRED_NV"/> ++ <enum name="EGL_CONDITION_SATISFIED_NV"/> ++ <enum name="EGL_SYNC_TYPE_NV"/> ++ <enum name="EGL_SYNC_CONDITION_NV"/> ++ <enum name="EGL_SYNC_FENCE_NV"/> ++ <enum name="EGL_NO_SYNC_NV"/> ++ <command name="eglCreateFenceSyncNV"/> ++ <command name="eglDestroySyncNV"/> ++ <command name="eglFenceNV"/> ++ <command name="eglClientWaitSyncNV"/> ++ <command name="eglSignalSyncNV"/> ++ <command name="eglGetSyncAttribNV"/> ++ </require> ++ </extension> ++ <extension name="EGL_NV_system_time" protect="KHRONOS_SUPPORT_INT64" supported="egl"> ++ <require> ++ <command name="eglGetSystemTimeFrequencyNV"/> ++ <command name="eglGetSystemTimeNV"/> ++ </require> ++ </extension> ++ <extension name="EGL_TIZEN_image_native_buffer" supported="egl"> ++ <require> ++ <enum name="EGL_NATIVE_BUFFER_TIZEN"/> ++ </require> ++ </extension> ++ <extension name="EGL_TIZEN_image_native_surface" supported="egl"> ++ <require> ++ <enum name="EGL_NATIVE_SURFACE_TIZEN"/> ++ </require> ++ </extension> ++ </extensions> ++</registry> +diff --git a/src/egl/generate/eglFunctionList.py b/src/egl/generate/eglFunctionList.py +new file mode 100644 +index 0000000000..b19b5f7193 +--- /dev/null ++++ b/src/egl/generate/eglFunctionList.py +@@ -0,0 +1,197 @@ ++#!/usr/bin/env python ++ ++""" ++Contains a list of EGL functions to generate dispatch functions for. ++ ++This is used from gen_egl_dispatch.py. ++ ++EGL_FUNCTIONS is a sequence of (name, eglData) pairs, where name is the name ++of the function, and eglData is a dictionary containing data about that ++function. ++ ++The values in the eglData dictionary are: ++- method (string): ++ How to select a vendor library. See "Method values" below. ++ ++- prefix (string): ++ This string is prepended to the name of the dispatch function. If ++ unspecified, the default is "" (an empty string). ++ ++- static (boolean) ++ If True, this function should be declared static. ++ ++- "public" (boolean) ++ If True, the function should be exported from the library. Vendor libraries ++ generally should not use this. ++ ++- extension (string): ++ If specified, this is the name of a macro to check for before defining a ++ function. Used for checking for extension macros and such. ++ ++- retval (string): ++ If specified, this is a C expression with the default value to return if we ++ can't find a function to call. By default, it will try to guess from the ++ return type: EGL_NO_whatever for the various handle types, NULL for ++ pointers, and zero for everything else. ++ ++method values: ++- "custom" ++ The dispatch stub will be hand-written instead of generated. ++ ++- "none" ++ No dispatch function exists at all, but the function should still have an ++ entry in the index array. This is for other functions that a stub may need ++ to call that are implemented in libEGL itself. ++ ++- "display" ++ Select a vendor from an EGLDisplay argument. ++ ++- "device" ++ Select a vendor from an EGLDeviceEXT argument. ++ ++- "current" ++ Select the vendor that owns the current context. ++""" ++ ++def _eglFunc(name, method, static=False, public=False, inheader=None, prefix="", extension=None, retval=None): ++ """ ++ A convenience function to define an entry in the EGL function list. ++ """ ++ if inheader is None: ++ inheader = (not public) ++ values = { ++ "method" : method, ++ "prefix" : prefix, ++ "extension" : extension, ++ "retval" : retval, ++ "static" : static, ++ "public" : public, ++ "inheader" : inheader, ++ } ++ return (name, values) ++ ++EGL_FUNCTIONS = ( ++ # EGL_VERSION_1_0 ++ _eglFunc("eglChooseConfig", "none"), ++ _eglFunc("eglCopyBuffers", "none"), ++ _eglFunc("eglCreateContext", "none"), ++ _eglFunc("eglCreatePbufferSurface", "none"), ++ _eglFunc("eglCreatePixmapSurface", "none"), ++ _eglFunc("eglCreateWindowSurface", "none"), ++ _eglFunc("eglDestroyContext", "none"), ++ _eglFunc("eglDestroySurface", "none"), ++ _eglFunc("eglGetConfigAttrib", "none"), ++ _eglFunc("eglGetConfigs", "none"), ++ _eglFunc("eglQueryContext", "none"), ++ _eglFunc("eglQuerySurface", "none"), ++ _eglFunc("eglSwapBuffers", "none"), ++ _eglFunc("eglWaitGL", "none"), ++ _eglFunc("eglWaitNative", "none"), ++ _eglFunc("eglTerminate", "none"), ++ _eglFunc("eglInitialize", "none"), ++ ++ _eglFunc("eglGetCurrentDisplay", "none"), ++ _eglFunc("eglGetCurrentSurface", "none"), ++ _eglFunc("eglGetDisplay", "none"), ++ _eglFunc("eglGetError", "none"), ++ _eglFunc("eglGetProcAddress", "none"), ++ _eglFunc("eglMakeCurrent", "none"), ++ _eglFunc("eglQueryString", "none"), ++ ++ # EGL_VERSION_1_1 ++ _eglFunc("eglBindTexImage", "none"), ++ _eglFunc("eglReleaseTexImage", "none"), ++ _eglFunc("eglSurfaceAttrib", "none"), ++ _eglFunc("eglSwapInterval", "none"), ++ ++ # EGL_VERSION_1_2 ++ _eglFunc("eglCreatePbufferFromClientBuffer", "none"), ++ _eglFunc("eglWaitClient", "none"), ++ _eglFunc("eglBindAPI", "none"), ++ _eglFunc("eglQueryAPI", "none"), ++ _eglFunc("eglReleaseThread", "none"), ++ ++ # EGL_VERSION_1_4 ++ _eglFunc("eglGetCurrentContext", "none"), ++ ++ # EGL_VERSION_1_5 ++ _eglFunc("eglCreateSync", "none"), ++ _eglFunc("eglDestroySync", "none"), ++ _eglFunc("eglClientWaitSync", "none"), ++ _eglFunc("eglGetSyncAttrib", "none"), ++ _eglFunc("eglCreateImage", "none"), ++ _eglFunc("eglDestroyImage", "none"), ++ _eglFunc("eglCreatePlatformWindowSurface", "none"), ++ _eglFunc("eglCreatePlatformPixmapSurface", "none"), ++ _eglFunc("eglWaitSync", "none"), ++ _eglFunc("eglGetPlatformDisplay", "none"), ++ ++ # EGL_EXT_platform_base ++ _eglFunc("eglCreatePlatformWindowSurfaceEXT", "display"), ++ _eglFunc("eglCreatePlatformPixmapSurfaceEXT", "display"), ++ _eglFunc("eglGetPlatformDisplayEXT", "none"), ++ ++ # TODO: Most of these extensions should be provided by the vendor ++ # libraries, not by libEGL. They're here now to make testing everything ++ # else easier. ++ ++ # EGL_EXT_swap_buffers_with_damage ++ _eglFunc("eglSwapBuffersWithDamageEXT", "display"), ++ ++ # KHR_EXT_swap_buffers_with_damage ++ _eglFunc("eglSwapBuffersWithDamageKHR", "display"), ++ ++ # EGL_KHR_cl_event2 ++ _eglFunc("eglCreateSync64KHR", "display"), ++ ++ # EGL_KHR_fence_sync ++ _eglFunc("eglCreateSyncKHR", "display"), ++ _eglFunc("eglDestroySyncKHR", "display"), ++ _eglFunc("eglClientWaitSyncKHR", "display"), ++ _eglFunc("eglGetSyncAttribKHR", "display"), ++ ++ # EGL_KHR_image ++ _eglFunc("eglCreateImageKHR", "display"), ++ _eglFunc("eglDestroyImageKHR", "display"), ++ ++ # EGL_KHR_image_base ++ # eglCreateImageKHR already defined in EGL_KHR_image ++ # eglDestroyImageKHR already defined in EGL_KHR_image ++ ++ # EGL_KHR_reusable_sync ++ _eglFunc("eglSignalSyncKHR", "display"), ++ # eglCreateSyncKHR already defined in EGL_KHR_fence_sync ++ # eglDestroySyncKHR already defined in EGL_KHR_fence_sync ++ # eglClientWaitSyncKHR already defined in EGL_KHR_fence_sync ++ # eglGetSyncAttribKHR already defined in EGL_KHR_fence_sync ++ ++ # EGL_KHR_wait_sync ++ _eglFunc("eglWaitSyncKHR", "display"), ++ ++ # EGL_MESA_drm_image ++ _eglFunc("eglCreateDRMImageMESA", "display"), ++ _eglFunc("eglExportDRMImageMESA", "display"), ++ ++ # EGL_MESA_image_dma_buf_export ++ _eglFunc("eglExportDMABUFImageQueryMESA", "display"), ++ _eglFunc("eglExportDMABUFImageMESA", "display"), ++ ++ # EGL_NOK_swap_region ++ _eglFunc("eglSwapBuffersRegionNOK", "display"), ++ ++ # EGL_NV_post_sub_buffer ++ _eglFunc("eglPostSubBufferNV", "display"), ++ ++ # EGL_WL_bind_wayland_display ++ _eglFunc("eglCreateWaylandBufferFromImageWL", "display"), ++ _eglFunc("eglUnbindWaylandDisplayWL", "display"), ++ _eglFunc("eglQueryWaylandBufferWL", "display"), ++ _eglFunc("eglBindWaylandDisplayWL", "display"), ++ ++ # EGL_CHROMIUM_get_sync_values ++ _eglFunc("eglGetSyncValuesCHROMIUM", "display"), ++ ++ # EGL_ANDROID_native_fence_sync ++ _eglFunc("eglDupNativeFenceFDANDROID", "display"), ++) ++ +diff --git a/src/egl/generate/egl_other.xml b/src/egl/generate/egl_other.xml +new file mode 100644 +index 0000000000..7fe3a9e272 +--- /dev/null ++++ b/src/egl/generate/egl_other.xml +@@ -0,0 +1,47 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<registry> ++ <comment> ++ This file contains any EGL extension functions that are missing from ++ the normal egl.xml list. ++ </comment> ++ <commands namespace="EGL"> ++ <!-- EGL_WL_bind_wayland_display --> ++ <command> ++ <proto>struct wl_buffer * <name>eglCreateWaylandBufferFromImageWL</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>EGLImage</ptype> <name>image</name></param> ++ </command> ++ ++ <command> ++ <proto>EGLBoolean <name>eglUnbindWaylandDisplayWL</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>struct wl_display *</ptype> <name>display</name></param> ++ </command> ++ ++ <command> ++ <proto>EGLBoolean <name>eglQueryWaylandBufferWL</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>struct wl_resource *</ptype> <name>buffer</name></param> ++ <param><ptype>EGLint</ptype> <name>attribute</name></param> ++ <param><ptype>EGLint *</ptype> <name>value</name></param> ++ </command> ++ ++ <command> ++ <proto>EGLBoolean <name>eglBindWaylandDisplayWL</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>dpy</name></param> ++ <param><ptype>struct wl_display *</ptype> <name>display</name></param> ++ </command> ++ ++ <!-- EGL_CHROMIUM_get_sync_values --> ++ <command> ++ <proto>EGLBoolean <name>eglGetSyncValuesCHROMIUM</name></proto> ++ <param><ptype>EGLDisplay</ptype> <name>display</name></param> ++ <param><ptype>EGLSurface</ptype> <name>surface</name></param> ++ <param><ptype>EGLuint64KHR *</ptype> <name>ust</name></param> ++ <param><ptype>EGLuint64KHR *</ptype> <name>msc</name></param> ++ <param><ptype>EGLuint64KHR *</ptype> <name>sbc</name></param> ++ </command> ++ </commands> ++</registry> ++ ++ +diff --git a/src/egl/generate/genCommon.py b/src/egl/generate/genCommon.py +new file mode 100644 +index 0000000000..d493d7bf29 +--- /dev/null ++++ b/src/egl/generate/genCommon.py +@@ -0,0 +1,223 @@ ++#!/usr/bin/env python ++ ++# (C) Copyright 2015, NVIDIA CORPORATION. ++# All Rights Reserved. ++# ++# Permission is hereby granted, free of charge, to any person obtaining a ++# copy of this software and associated documentation files (the "Software"), ++# to deal in the Software without restriction, including without limitation ++# on the rights to use, copy, modify, merge, publish, distribute, sub ++# license, and/or sell copies of the Software, and to permit persons to whom ++# the Software is furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice (including the next ++# paragraph) shall be included in all copies or substantial portions of the ++# Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS ++# IN THE SOFTWARE. ++# ++# Authors: ++# Kyle Brenneman <kbrenneman@nvidia.com> ++ ++import collections ++import re ++import sys ++import xml.etree.cElementTree as etree ++ ++MAPI_TABLE_NUM_DYNAMIC = 4096 ++ ++_LIBRARY_FEATURE_NAMES = { ++ # libGL and libGLdiapatch both include every function. ++ "gl" : None, ++ "gldispatch" : None, ++ "opengl" : frozenset(( "GL_VERSION_1_0", "GL_VERSION_1_1", ++ "GL_VERSION_1_2", "GL_VERSION_1_3", "GL_VERSION_1_4", "GL_VERSION_1_5", ++ "GL_VERSION_2_0", "GL_VERSION_2_1", "GL_VERSION_3_0", "GL_VERSION_3_1", ++ "GL_VERSION_3_2", "GL_VERSION_3_3", "GL_VERSION_4_0", "GL_VERSION_4_1", ++ "GL_VERSION_4_2", "GL_VERSION_4_3", "GL_VERSION_4_4", "GL_VERSION_4_5", ++ )), ++ "glesv1" : frozenset(("GL_VERSION_ES_CM_1_0", "GL_OES_point_size_array")), ++ "glesv2" : frozenset(("GL_ES_VERSION_2_0", "GL_ES_VERSION_3_0", ++ "GL_ES_VERSION_3_1" "GL_ES_VERSION_3_2", ++ )), ++} ++ ++def getFunctions(xmlFiles): ++ """ ++ Reads an XML file and returns all of the functions defined in it. ++ ++ xmlFile should be the path to Khronos's gl.xml file. The return value is a ++ sequence of FunctionDesc objects, ordered by slot number. ++ """ ++ roots = [ etree.parse(xmlFile).getroot() for xmlFile in xmlFiles ] ++ return getFunctionsFromRoots(roots) ++ ++def getFunctionsFromRoots(roots): ++ functions = {} ++ for root in roots: ++ for func in _getFunctionList(root): ++ functions[func.name] = func ++ functions = functions.values() ++ ++ # Sort the function list by name. ++ functions = sorted(functions, key=lambda f: f.name) ++ ++ # Assign a slot number to each function. This isn't strictly necessary, ++ # since you can just look at the index in the list, but it makes it easier ++ # to include the slot when formatting output. ++ for i in range(len(functions)): ++ functions[i] = functions[i]._replace(slot=i) ++ ++ return functions ++ ++def getExportNamesFromRoots(target, roots): ++ """ ++ Goes through the <feature> tags from gl.xml and returns a set of OpenGL ++ functions that a library should export. ++ ++ target should be one of "gl", "gldispatch", "opengl", "glesv1", or ++ "glesv2". ++ """ ++ featureNames = _LIBRARY_FEATURE_NAMES[target] ++ if featureNames is None: ++ return set(func.name for func in getFunctionsFromRoots(roots)) ++ ++ names = set() ++ for root in roots: ++ features = [] ++ for featElem in root.findall("feature"): ++ if featElem.get("name") in featureNames: ++ features.append(featElem) ++ for featElem in root.findall("extensions/extension"): ++ if featElem.get("name") in featureNames: ++ features.append(featElem) ++ for featElem in features: ++ for commandElem in featElem.findall("require/command"): ++ names.add(commandElem.get("name")) ++ return names ++ ++class FunctionArg(collections.namedtuple("FunctionArg", "type name")): ++ @property ++ def dec(self): ++ """ ++ Returns a "TYPE NAME" string, suitable for a function prototype. ++ """ ++ rv = str(self.type) ++ if not rv.endswith("*"): ++ rv += " " ++ rv += self.name ++ return rv ++ ++class FunctionDesc(collections.namedtuple("FunctionDesc", "name rt args slot")): ++ def hasReturn(self): ++ """ ++ Returns true if the function returns a value. ++ """ ++ return (self.rt != "void") ++ ++ @property ++ def decArgs(self): ++ """ ++ Returns a string with the types and names of the arguments, as you ++ would use in a function declaration. ++ """ ++ if not self.args: ++ return "void" ++ else: ++ return ", ".join(arg.dec for arg in self.args) ++ ++ @property ++ def callArgs(self): ++ """ ++ Returns a string with the names of the arguments, as you would use in a ++ function call. ++ """ ++ return ", ".join(arg.name for arg in self.args) ++ ++ @property ++ def basename(self): ++ assert self.name.startswith("gl") ++ return self.name[2:] ++ ++def _getFunctionList(root): ++ for elem in root.findall("commands/command"): ++ yield _parseCommandElem(elem) ++ ++def _parseCommandElem(elem): ++ protoElem = elem.find("proto") ++ (rt, name) = _parseProtoElem(protoElem) ++ ++ args = [] ++ for ch in elem.findall("param"): ++ # <param> tags have the same format as a <proto> tag. ++ args.append(FunctionArg(*_parseProtoElem(ch))) ++ func = FunctionDesc(name, rt, tuple(args), slot=None) ++ ++ return func ++ ++def _parseProtoElem(elem): ++ # If I just remove the tags and string the text together, I'll get valid C code. ++ text = _flattenText(elem) ++ text = text.strip() ++ m = re.match(r"^(.+)\b(\w+)(?:\s*\[\s*(\d*)\s*\])?$", text, re.S) ++ if m: ++ typename = _fixupTypeName(m.group(1)) ++ name = m.group(2) ++ if m.group(3): ++ # HACK: glPathGlyphIndexRangeNV defines an argument like this: ++ # GLuint baseAndCount[2] ++ # Convert it to a pointer and hope for the best. ++ typename += "*" ++ return (typename, name) ++ else: ++ raise ValueError("Can't parse element %r -> %r" % (elem, text)) ++ ++def _flattenText(elem): ++ """ ++ Returns the text in an element and all child elements, with the tags ++ removed. ++ """ ++ text = "" ++ if elem.text is not None: ++ text = elem.text ++ for ch in elem: ++ text += _flattenText(ch) ++ if ch.tail is not None: ++ text += ch.tail ++ return text ++ ++def _fixupTypeName(typeName): ++ """ ++ Converts a typename into a more consistent format. ++ """ ++ ++ rv = typeName.strip() ++ ++ # Replace "GLvoid" with just plain "void". ++ rv = re.sub(r"\bGLvoid\b", "void", rv) ++ ++ # Remove the vendor suffixes from types that have a suffix-less version. ++ rv = re.sub(r"\b(GLhalf|GLintptr|GLsizeiptr|GLint64|GLuint64)(?:ARB|EXT|NV|ATI)\b", r"\1", rv) ++ ++ rv = re.sub(r"\bGLvoid\b", "void", rv) ++ ++ # Clear out any leading and trailing whitespace. ++ rv = rv.strip() ++ ++ # Remove any whitespace before a '*' ++ rv = re.sub(r"\s+\*", r"*", rv) ++ ++ # Change "foo*" to "foo *" ++ rv = re.sub(r"([^\*])\*", r"\1 *", rv) ++ ++ # Condense all whitespace into a single space. ++ rv = re.sub(r"\s+", " ", rv) ++ ++ return rv ++ +diff --git a/src/egl/generate/gen_egl_dispatch.py b/src/egl/generate/gen_egl_dispatch.py +new file mode 100755 +index 0000000000..eeb3f3f9a5 +--- /dev/null ++++ b/src/egl/generate/gen_egl_dispatch.py +@@ -0,0 +1,250 @@ ++#!/usr/bin/env python ++ ++# (C) Copyright 2016, NVIDIA CORPORATION. ++# All Rights Reserved. ++# ++# Permission is hereby granted, free of charge, to any person obtaining a ++# copy of this software and associated documentation files (the "Software"), ++# to deal in the Software without restriction, including without limitation ++# on the rights to use, copy, modify, merge, publish, distribute, sub ++# license, and/or sell copies of the Software, and to permit persons to whom ++# the Software is furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice (including the next ++# paragraph) shall be included in all copies or substantial portions of the ++# Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS ++# IN THE SOFTWARE. ++# ++# Authors: ++# Kyle Brenneman <kbrenneman@nvidia.com> ++ ++""" ++Generates dispatch functions for EGL. ++ ++The list of functions and arguments is read from the Khronos's XML files, with ++additional information defined in the module eglFunctionList. ++""" ++ ++import argparse ++import collections ++import imp ++import sys ++import textwrap ++ ++import genCommon ++ ++def main(): ++ parser = argparse.ArgumentParser() ++ parser.add_argument("target", choices=("header", "source"), ++ help="Whether to build the source or header file.") ++ parser.add_argument("func_list_file", help="The function list .py file.") ++ parser.add_argument("xml_files", nargs="+", help="The XML files with the EGL function lists.") ++ ++ args = parser.parse_args() ++ ++ # The function list is a Python module, but it's specified on the command ++ # line. ++ eglFunctionList = imp.load_source("eglFunctionList", args.func_list_file) ++ ++ xmlFunctions = genCommon.getFunctions(args.xml_files) ++ xmlByName = dict((f.name, f) for f in xmlFunctions) ++ functions = [] ++ for (name, eglFunc) in eglFunctionList.EGL_FUNCTIONS: ++ func = xmlByName[name] ++ eglFunc = fixupEglFunc(func, eglFunc) ++ functions.append((func, eglFunc)) ++ ++ # Sort the function list by name. ++ functions = sorted(functions, key=lambda f: f[0].name) ++ ++ if args.target == "header": ++ text = generateHeader(functions) ++ elif args.target == "source": ++ text = generateSource(functions) ++ sys.stdout.write(text) ++ ++def fixupEglFunc(func, eglFunc): ++ result = dict(eglFunc) ++ if result.get("prefix") is None: ++ result["prefix"] = "" ++ ++ if result.get("extension") is not None: ++ text = "defined(" + result["extension"] + ")" ++ result["extension"] = text ++ ++ if result["method"] in ("none", "custom"): ++ return result ++ ++ if result["method"] not in ("display", "device", "current"): ++ raise ValueError("Invalid dispatch method %r for function %r" % (result["method"], func.name)) ++ ++ if func.hasReturn(): ++ if result.get("retval") is None: ++ result["retval"] = getDefaultReturnValue(func.rt) ++ ++ return result ++ ++def generateHeader(functions): ++ text = textwrap.dedent(r""" ++ #ifndef G_EGLDISPATCH_STUBS_H ++ #define G_EGLDISPATCH_STUBS_H ++ ++ #ifdef __cplusplus ++ extern "C" { ++ #endif ++ ++ #include <EGL/egl.h> ++ #include <EGL/eglext.h> ++ #include "glvnd/libeglabi.h" ++ ++ """.lstrip("\n")) ++ ++ text += "enum {\n" ++ for (func, eglFunc) in functions: ++ text += generateGuardBegin(func, eglFunc) ++ text += " __EGL_DISPATCH_" + func.name + ",\n" ++ text += generateGuardEnd(func, eglFunc) ++ text += " __EGL_DISPATCH_COUNT\n" ++ text += "};\n" ++ ++ for (func, eglFunc) in functions: ++ if eglFunc["inheader"]: ++ text += generateGuardBegin(func, eglFunc) ++ text += "{f.rt} EGLAPIENTRY {ex[prefix]}{f.name}({f.decArgs});\n".format(f=func, ex=eglFunc) ++ text += generateGuardEnd(func, eglFunc) ++ ++ text += textwrap.dedent(r""" ++ #ifdef __cplusplus ++ } ++ #endif ++ #endif // G_EGLDISPATCH_STUBS_H ++ """) ++ return text ++ ++def generateSource(functions): ++ # First, sort the function list by name. ++ text = "" ++ text += '#include "egldispatchstubs.h"\n' ++ text += '#include "g_egldispatchstubs.h"\n' ++ text += "\n" ++ ++ for (func, eglFunc) in functions: ++ if eglFunc["method"] not in ("custom", "none"): ++ text += generateGuardBegin(func, eglFunc) ++ text += generateDispatchFunc(func, eglFunc) ++ text += generateGuardEnd(func, eglFunc) ++ ++ text += "\n" ++ text += "const char * const __EGL_DISPATCH_FUNC_NAMES[__EGL_DISPATCH_COUNT + 1] = {\n" ++ for (func, eglFunc) in functions: ++ text += generateGuardBegin(func, eglFunc) ++ text += ' "' + func.name + '",\n' ++ text += generateGuardEnd(func, eglFunc) ++ text += " NULL\n" ++ text += "};\n" ++ ++ text += "const __eglMustCastToProperFunctionPointerType __EGL_DISPATCH_FUNCS[__EGL_DISPATCH_COUNT + 1] = {\n" ++ for (func, eglFunc) in functions: ++ text += generateGuardBegin(func, eglFunc) ++ if eglFunc["method"] != "none": ++ text += " (__eglMustCastToProperFunctionPointerType) " + eglFunc.get("prefix", "") + func.name + ",\n" ++ else: ++ text += " NULL, // " + func.name + "\n" ++ text += generateGuardEnd(func, eglFunc) ++ text += " NULL\n" ++ text += "};\n" ++ ++ return text ++ ++def generateGuardBegin(func, eglFunc): ++ ext = eglFunc.get("extension") ++ if ext is not None: ++ return "#if " + ext + "\n" ++ else: ++ return "" ++ ++def generateGuardEnd(func, eglFunc): ++ if eglFunc.get("extension") is not None: ++ return "#endif\n" ++ else: ++ return "" ++ ++def generateDispatchFunc(func, eglFunc): ++ text = "" ++ ++ if eglFunc.get("static"): ++ text += "static " ++ elif eglFunc.get("public"): ++ text += "PUBLIC " ++ text += textwrap.dedent( ++ r""" ++ {f.rt} EGLAPIENTRY {ef[prefix]}{f.name}({f.decArgs}) ++ {{ ++ typedef {f.rt} EGLAPIENTRY (* _pfn_{f.name})({f.decArgs}); ++ """).lstrip("\n").format(f=func, ef=eglFunc) ++ ++ if func.hasReturn(): ++ text += " {f.rt} _ret = {ef[retval]};\n".format(f=func, ef=eglFunc) ++ ++ text += " _pfn_{f.name} _ptr_{f.name} = (_pfn_{f.name}) ".format(f=func) ++ if eglFunc["method"] == "current": ++ text += "__eglDispatchFetchByCurrent(__EGL_DISPATCH_{f.name});\n".format(f=func) ++ ++ elif eglFunc["method"] in ("display", "device"): ++ if eglFunc["method"] == "display": ++ lookupFunc = "__eglDispatchFetchByDisplay" ++ lookupType = "EGLDisplay" ++ else: ++ assert eglFunc["method"] == "device" ++ lookupFunc = "__eglDispatchFetchByDevice" ++ lookupType = "EGLDeviceEXT" ++ ++ lookupArg = None ++ for arg in func.args: ++ if arg.type == lookupType: ++ lookupArg = arg.name ++ break ++ if lookupArg is None: ++ raise ValueError("Can't find %s argument for function %s" % (lookupType, func.name,)) ++ ++ text += "{lookupFunc}({lookupArg}, __EGL_DISPATCH_{f.name});\n".format( ++ f=func, lookupFunc=lookupFunc, lookupArg=lookupArg) ++ else: ++ raise ValueError("Unknown dispatch method: %r" % (eglFunc["method"],)) ++ ++ text += " if(_ptr_{f.name} != NULL) {{\n".format(f=func) ++ text += " " ++ if func.hasReturn(): ++ text += "_ret = " ++ text += "_ptr_{f.name}({f.callArgs});\n".format(f=func) ++ text += " }\n" ++ ++ if func.hasReturn(): ++ text += " return _ret;\n" ++ text += "}\n" ++ return text ++ ++def getDefaultReturnValue(typename): ++ if typename.endswith("*"): ++ return "NULL" ++ elif typename == "EGLDisplay": ++ return "EGL_NO_DISPLAY" ++ elif typename == "EGLContext": ++ return "EGL_NO_CONTEXT" ++ elif typename == "EGLSurface": ++ return "EGL_NO_SURFACE" ++ elif typename == "EGLBoolean": ++ return "EGL_FALSE"; ++ ++ return "0" ++ ++if __name__ == "__main__": ++ main() ++ +diff --git a/src/egl/main/50_mesa.json b/src/egl/main/50_mesa.json +new file mode 100644 +index 0000000000..8aaaa100ff +--- /dev/null ++++ b/src/egl/main/50_mesa.json +@@ -0,0 +1,6 @@ ++{ ++ "file_format_version" : "1.0.0", ++ "ICD" : { ++ "library_path" : "libEGL_mesa.so.0" ++ } ++} +diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c +index cab05c2301..5f21f3457d 100644 +--- a/src/egl/main/eglapi.c ++++ b/src/egl/main/eglapi.c +@@ -651,7 +651,11 @@ eglQueryString(EGLDisplay dpy, EGLint name) + _EGLDriver *drv; + + if (dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) { +- RETURN_EGL_SUCCESS(NULL, _eglGlobal.ClientExtensionString); ++ const char *ret = _eglGetClientExtensionString(); ++ if (ret != NULL) ++ RETURN_EGL_SUCCESS(NULL, ret); ++ else ++ RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, NULL); + } + + disp = _eglLockDisplay(dpy); +diff --git a/src/egl/main/egldispatchstubs.c b/src/egl/main/egldispatchstubs.c +new file mode 100644 +index 0000000000..e02abd7a9e +--- /dev/null ++++ b/src/egl/main/egldispatchstubs.c +@@ -0,0 +1,110 @@ ++#include "egldispatchstubs.h" ++#include "g_egldispatchstubs.h" ++ ++#include <string.h> ++ ++#include "eglcurrent.h" ++ ++static const __EGLapiExports *exports; ++ ++const int __EGL_DISPATCH_FUNC_COUNT = __EGL_DISPATCH_COUNT; ++int __EGL_DISPATCH_FUNC_INDICES[__EGL_DISPATCH_COUNT + 1]; ++ ++static int FindProcIndex(const char *name) ++{ ++ unsigned first = 0; ++ unsigned last = __EGL_DISPATCH_COUNT - 1; ++ ++ while (first <= last) { ++ unsigned middle = (first + last) / 2; ++ int comp = strcmp(name, ++ __EGL_DISPATCH_FUNC_NAMES[middle]); ++ ++ if (comp > 0) ++ first = middle + 1; ++ else if (comp < 0) ++ last = middle - 1; ++ else ++ return middle; ++ } ++ ++ /* Just point to the dummy entry at the end of the respective table */ ++ return __EGL_DISPATCH_COUNT; ++} ++ ++void __eglInitDispatchStubs(const __EGLapiExports *exportsTable) ++{ ++ int i; ++ exports = exportsTable; ++ for (i=0; i<__EGL_DISPATCH_FUNC_COUNT; i++) { ++ __EGL_DISPATCH_FUNC_INDICES[i] = -1; ++ } ++} ++ ++void __eglSetDispatchIndex(const char *name, int dispatchIndex) ++{ ++ int index = FindProcIndex(name); ++ __EGL_DISPATCH_FUNC_INDICES[index] = dispatchIndex; ++} ++ ++void *__eglDispatchFindDispatchFunction(const char *name) ++{ ++ int index = FindProcIndex(name); ++ return (void *) __EGL_DISPATCH_FUNCS[index]; ++} ++ ++static __eglMustCastToProperFunctionPointerType FetchVendorFunc(__EGLvendorInfo *vendor, ++ int index, EGLint errorCode) ++{ ++ __eglMustCastToProperFunctionPointerType func = NULL; ++ ++ if (vendor != NULL) { ++ func = exports->fetchDispatchEntry(vendor, __EGL_DISPATCH_FUNC_INDICES[index]); ++ } ++ if (func == NULL) { ++ if (errorCode != EGL_SUCCESS) { ++ _eglError(errorCode, __EGL_DISPATCH_FUNC_NAMES[index]); ++ } ++ return NULL; ++ } ++ ++ if (!exports->setLastVendor(vendor)) { ++ // Don't bother trying to set an error code in libglvnd. If ++ // setLastVendor failed, then setEGLError would also fail. ++ _eglError(errorCode, __EGL_DISPATCH_FUNC_NAMES[index]); ++ return NULL; ++ } ++ ++ return func; ++} ++ ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByCurrent(int index) ++{ ++ __EGLvendorInfo *vendor; ++ ++ // Note: This is only used for the eglWait* functions. For those, if ++ // there's no current context, then they're supposed to do nothing but ++ // return success. ++ exports->threadInit(); ++ vendor = exports->getCurrentVendor(); ++ return FetchVendorFunc(vendor, index, EGL_SUCCESS); ++} ++ ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByDisplay(EGLDisplay dpy, int index) ++{ ++ __EGLvendorInfo *vendor; ++ ++ exports->threadInit(); ++ vendor = exports->getVendorFromDisplay(dpy); ++ return FetchVendorFunc(vendor, index, EGL_BAD_DISPLAY); ++} ++ ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByDevice(EGLDeviceEXT dev, int index) ++{ ++ __EGLvendorInfo *vendor; ++ ++ exports->threadInit(); ++ vendor = exports->getVendorFromDevice(dev); ++ return FetchVendorFunc(vendor, index, EGL_BAD_DEVICE_EXT); ++} ++ +diff --git a/src/egl/main/egldispatchstubs.h b/src/egl/main/egldispatchstubs.h +new file mode 100644 +index 0000000000..7861ea5e61 +--- /dev/null ++++ b/src/egl/main/egldispatchstubs.h +@@ -0,0 +1,26 @@ ++#ifndef EGLDISPATCHSTUBS_H ++#define EGLDISPATCHSTUBS_H ++ ++#include "glvnd/libeglabi.h" ++ ++// These variables are all generated along with the dispatch stubs. ++extern const int __EGL_DISPATCH_FUNC_COUNT; ++extern const char * const __EGL_DISPATCH_FUNC_NAMES[]; ++extern int __EGL_DISPATCH_FUNC_INDICES[]; ++extern const __eglMustCastToProperFunctionPointerType __EGL_DISPATCH_FUNCS[]; ++ ++void __eglInitDispatchStubs(const __EGLapiExports *exportsTable); ++void __eglSetDispatchIndex(const char *name, int index); ++ ++/** ++ * Returns the dispatch function for the given name, or \c NULL if the function ++ * isn't supported. ++ */ ++void *__eglDispatchFindDispatchFunction(const char *name); ++ ++// Helper functions used by the generated stubs. ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByDisplay(EGLDisplay dpy, int index); ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByDevice(EGLDeviceEXT dpy, int index); ++__eglMustCastToProperFunctionPointerType __eglDispatchFetchByCurrent(int index); ++ ++#endif // EGLDISPATCHSTUBS_H +diff --git a/src/egl/main/eglglobals.c b/src/egl/main/eglglobals.c +index cb41063e32..baf96bb1ec 100644 +--- a/src/egl/main/eglglobals.c ++++ b/src/egl/main/eglglobals.c +@@ -29,6 +29,8 @@ + + + #include <stdlib.h> ++#include <stdio.h> ++#include <string.h> + #include <assert.h> + #include "c11/threads.h" + +@@ -50,9 +52,13 @@ struct _egl_global _eglGlobal = + _eglFiniDisplay + }, + +- /* ClientExtensionString */ ++ /* ClientOnlyExtensionString */ + "EGL_EXT_client_extensions" + " EGL_EXT_platform_base" ++ " EGL_KHR_client_get_all_proc_addresses" ++ " EGL_KHR_debug", ++ ++ /* PlatformExtensionString */ + #ifdef HAVE_WAYLAND_PLATFORM + " EGL_EXT_platform_wayland" + #endif +@@ -65,8 +71,9 @@ struct _egl_global _eglGlobal = + #ifdef HAVE_SURFACELESS_PLATFORM + " EGL_MESA_platform_surfaceless" + #endif +- " EGL_KHR_client_get_all_proc_addresses" +- " EGL_KHR_debug", ++ "", ++ ++ NULL, /* ClientExtensionsString */ + + NULL, /* debugCallback */ + _EGL_DEBUG_BIT_CRITICAL | _EGL_DEBUG_BIT_ERROR, /* debugTypesEnabled */ +@@ -101,3 +108,37 @@ _eglAddAtExitCall(void (*func)(void)) + mtx_unlock(_eglGlobal.Mutex); + } + } ++ ++const char * ++_eglGetClientExtensionString(void) ++{ ++ const char *ret; ++ ++ mtx_lock(_eglGlobal.Mutex); ++ ++ if (_eglGlobal.ClientExtensionString == NULL) { ++ size_t clientLen = strlen(_eglGlobal.ClientOnlyExtensionString); ++ size_t platformLen = strlen(_eglGlobal.PlatformExtensionString); ++ ++ _eglGlobal.ClientExtensionString = (char *) malloc(clientLen + platformLen + 1); ++ if (_eglGlobal.ClientExtensionString != NULL) { ++ char *ptr = _eglGlobal.ClientExtensionString; ++ ++ memcpy(ptr, _eglGlobal.ClientOnlyExtensionString, clientLen); ++ ptr += clientLen; ++ ++ if (platformLen > 0) { ++ // Note that if PlatformExtensionString is not empty, then it will ++ // already have a leading space. ++ assert(_eglGlobal.PlatformExtensionString[0] == ' '); ++ memcpy(ptr, _eglGlobal.PlatformExtensionString, platformLen); ++ ptr += platformLen; ++ } ++ *ptr = '\0'; ++ } ++ } ++ ret = _eglGlobal.ClientExtensionString; ++ ++ mtx_unlock(_eglGlobal.Mutex); ++ return ret; ++} +diff --git a/src/egl/main/eglglobals.h b/src/egl/main/eglglobals.h +index ec4f3d04a3..c6ef59d482 100644 +--- a/src/egl/main/eglglobals.h ++++ b/src/egl/main/eglglobals.h +@@ -57,7 +57,15 @@ struct _egl_global + EGLint NumAtExitCalls; + void (*AtExitCalls[10])(void); + +- const char *ClientExtensionString; ++ /* ++ * Under libglvnd, the client extension string has to be split into two ++ * strings, one for platform extensions, and one for everything else. So, ++ * define separate strings for them. _eglGetClientExtensionString will ++ * concatenate them together for a non-libglvnd build. ++ */ ++ const char *ClientOnlyExtensionString; ++ const char *PlatformExtensionString; ++ char *ClientExtensionString; + + EGLDEBUGPROCKHR debugCallback; + unsigned int debugTypesEnabled; +@@ -76,4 +84,7 @@ static inline unsigned int DebugBitFromType(EGLenum type) + return (1 << (type - EGL_DEBUG_MSG_CRITICAL_KHR)); + } + ++extern const char * ++_eglGetClientExtensionString(void); ++ + #endif /* EGLGLOBALS_INCLUDED */ +diff --git a/src/egl/main/eglglvnd.c b/src/egl/main/eglglvnd.c +new file mode 100644 +index 0000000000..6b984ed6c2 +--- /dev/null ++++ b/src/egl/main/eglglvnd.c +@@ -0,0 +1,82 @@ ++#include <string.h> ++#include <assert.h> ++ ++#include <glvnd/libeglabi.h> ++ ++#include "eglcurrent.h" ++#include "egldispatchstubs.h" ++#include "eglglobals.h" ++ ++static const __EGLapiExports *__eglGLVNDApiExports = NULL; ++ ++static const char * EGLAPIENTRY ++__eglGLVNDQueryString(EGLDisplay dpy, EGLenum name) ++{ ++ // For client extensions, return the list of non-platform extensions. The ++ // platform extensions are returned by __eglGLVNDGetVendorString. ++ if (dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) ++ return _eglGlobal.ClientOnlyExtensionString; ++ ++ // For everything else, forward to the normal eglQueryString function. ++ return eglQueryString(dpy, name); ++} ++ ++static const char * ++__eglGLVNDGetVendorString(int name) ++{ ++ if (name == __EGL_VENDOR_STRING_PLATFORM_EXTENSIONS) { ++ const char *str = _eglGlobal.PlatformExtensionString; ++ // The platform extension string may have a leading space. If it does, ++ // then skip over it. ++ while (*str == ' ') { ++ str++; ++ } ++ return str; ++ } ++ ++ return NULL; ++} ++ ++static EGLDisplay ++__eglGLVNDGetPlatformDisplay(EGLenum platform, void *native_display, ++ const EGLAttrib *attrib_list) ++{ ++ if (platform == EGL_NONE) { ++ assert(native_display == (void *) EGL_DEFAULT_DISPLAY); ++ assert(attrib_list == NULL); ++ return eglGetDisplay((EGLNativeDisplayType) native_display); ++ } else { ++ return eglGetPlatformDisplay(platform, native_display, attrib_list); ++ } ++} ++ ++static void * ++__eglGLVNDGetProcAddress(const char *procName) ++{ ++ if (strcmp(procName, "eglQueryString") == 0) ++ return (void *) __eglGLVNDQueryString; ++ ++ return (void *) eglGetProcAddress(procName); ++} ++ ++EGLAPI EGLBoolean ++__egl_Main(uint32_t version, const __EGLapiExports *exports, ++ __EGLvendorInfo *vendor, __EGLapiImports *imports) ++{ ++ if (EGL_VENDOR_ABI_GET_MAJOR_VERSION(version) != ++ EGL_VENDOR_ABI_MAJOR_VERSION) ++ return EGL_FALSE; ++ ++ __eglGLVNDApiExports = exports; ++ __eglInitDispatchStubs(exports); ++ ++ imports->getPlatformDisplay = __eglGLVNDGetPlatformDisplay; ++ imports->getSupportsAPI = _eglIsApiValid; ++ imports->getVendorString = __eglGLVNDGetVendorString; ++ imports->getProcAddress = __eglGLVNDGetProcAddress; ++ imports->getDispatchAddress = __eglDispatchFindDispatchFunction; ++ imports->setDispatchIndex = __eglSetDispatchIndex; ++ ++ return EGL_TRUE; ++} ++ +-- +2.11.0 + diff --git a/abs/core/mesa/0001-Fix-linkage-against-shared-glapi.patch b/abs/core/mesa/0001-Fix-linkage-against-shared-glapi.patch new file mode 100644 index 0000000..7f8f716 --- /dev/null +++ b/abs/core/mesa/0001-Fix-linkage-against-shared-glapi.patch @@ -0,0 +1,26 @@ +From 1b5a187c3c31513ae39cd2a917a3234c2c5f87fc Mon Sep 17 00:00:00 2001 +From: Adam Jackson <ajax@redhat.com> +Date: Wed, 12 Oct 2016 13:41:33 -0400 +Subject: [PATCH] Fix linkage against shared glapi + +Signed-off-by: Adam Jackson <ajax@redhat.com> +--- + src/gallium/targets/osmesa/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/gallium/targets/osmesa/Makefile.am b/src/gallium/targets/osmesa/Makefile.am +index 5d39486..04add87 100644 +--- a/src/gallium/targets/osmesa/Makefile.am ++++ b/src/gallium/targets/osmesa/Makefile.am +@@ -63,7 +63,7 @@ lib@OSMESA_LIB@_la_LIBADD = \ + $(top_builddir)/src/gallium/drivers/trace/libtrace.la \ + $(top_builddir)/src/gallium/drivers/softpipe/libsoftpipe.la \ + $(top_builddir)/src/gallium/state_trackers/osmesa/libosmesa.la \ +- $(top_builddir)/src/mapi/glapi/libglapi.la \ ++ $(top_builddir)/src/mapi/shared-glapi/libglapi.la \ + $(SHARED_GLAPI_LIB) \ + $(OSMESA_LIB_DEPS) \ + $(CLOCK_LIB) +-- +2.9.3 + diff --git a/abs/core/mesa/0001-glapi-Link-with-glapi-when-built-shared.patch b/abs/core/mesa/0001-glapi-Link-with-glapi-when-built-shared.patch new file mode 100644 index 0000000..376828e --- /dev/null +++ b/abs/core/mesa/0001-glapi-Link-with-glapi-when-built-shared.patch @@ -0,0 +1,82 @@ +From 16875ea5b9170f2213fd486d763f27a9d6dfc1b5 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet <kwizart@gmail.com> +Date: Tue, 25 Oct 2016 09:35:13 +0200 +Subject: [PATCH 1/3] glapi: Link with glapi when built shared + +This patch explicitly links to libglapi when built shared. +This was specially needed to avoid undefined non-weak-symbol as shown +with: + +ldd -r /usr/lib64/dri/i915_dri.so + linux-vdso.so.1 (0x00007fff821f4000) + libdrm_intel.so.1 => /lib64/libdrm_intel.so.1 (0x00007f6adf2c7000) + libdrm_nouveau.so.2 => /lib64/libdrm_nouveau.so.2 (0x00007f6adf0be000) + libdrm_radeon.so.1 => /lib64/libdrm_radeon.so.1 (0x00007f6adeeb2000) + libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6adec8b000) + libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f6adea7c000) + libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f6ade84f000) + libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6ade633000) + libdl.so.2 => /lib64/libdl.so.2 (0x00007f6ade42f000) + libm.so.6 => /lib64/libm.so.6 (0x00007f6ade125000) + libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6addf0e000) + libc.so.6 => /lib64/libc.so.6 (0x00007f6addb4c000) + /lib64/ld-linux-x86-64.so.2 (0x000056274e913000) + libpciaccess.so.0 => /lib64/libpciaccess.so.0 (0x00007f6add941000) + libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6add6ce000) +undefined symbol: _glapi_get_dispatch_table_size (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_get_context (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_add_dispatch (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_check_multithread (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_tls_Context (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_set_context (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_set_dispatch (/usr/lib64/dri/i915_dri.so) +undefined symbol: _glapi_tls_Dispatch (/usr/lib64/dri/i915_dri.so) + +v3: Add gallium counterpart for radeon cases +Reported-by: Jonathan Dieter <jdieter@lesbg.com> + +v2: Add Bugzilla and Signed-off + +Fixes: 0cbc90c57c ("mesa: dri: Add shared glapi to LIBADD on Android") +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98428 +Signed-off-by: Nicolas Chauvet <kwizart@gmail.com> +--- + src/gallium/targets/dri/Makefile.am | 2 -- + src/mesa/drivers/dri/Makefile.am | 3 --- + 2 files changed, 5 deletions(-) + +diff --git a/src/gallium/targets/dri/Makefile.am b/src/gallium/targets/dri/Makefile.am +index bca747f..05f6c8c 100644 +--- a/src/gallium/targets/dri/Makefile.am ++++ b/src/gallium/targets/dri/Makefile.am +@@ -1,10 +1,8 @@ + include $(top_srcdir)/src/gallium/Automake.inc + +-if HAVE_ANDROID + if HAVE_SHARED_GLAPI + SHARED_GLAPI_LIB = $(top_builddir)/src/mapi/shared-glapi/libglapi.la + endif +-endif + + AM_CFLAGS = \ + -I$(top_srcdir)/src/mapi \ +diff --git a/src/mesa/drivers/dri/Makefile.am b/src/mesa/drivers/dri/Makefile.am +index 1c6dd08..8e68fc0 100644 +--- a/src/mesa/drivers/dri/Makefile.am ++++ b/src/mesa/drivers/dri/Makefile.am +@@ -6,12 +6,9 @@ MEGADRIVERS_DEPS = + + SUBDIRS+=common + +-# On Android, we need to explicitly link to libglapi.so. +-if HAVE_ANDROID + if HAVE_SHARED_GLAPI + SHARED_GLAPI_LIB = $(top_builddir)/src/mapi/shared-glapi/libglapi.la + endif +-endif + + if HAVE_I915_DRI + SUBDIRS += i915 +-- +2.7.4 + diff --git a/abs/core/mesa/0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch b/abs/core/mesa/0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch deleted file mode 100644 index 8f8c536..0000000 --- a/abs/core/mesa/0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 0247e5ee3edd546b8598082d5b45d110f61853d0 Mon Sep 17 00:00:00 2001 -From: Martin Peres <martin.peres@linux.intel.com> -Date: Thu, 6 Oct 2016 17:07:22 +0300 -Subject: [PATCH 1/2] loader/dri3: add get_dri_screen() to the vtable - -This allows querying the current active screen from the -loader's common code. - -Cc: mesa-stable@lists.freedesktop.org -Reviewed-by: Emil Velikov <emil.velikov@collabora.com> -Signed-off-by: Martin Peres <martin.peres@linux.intel.com> ---- - src/egl/drivers/dri2/platform_x11_dri3.c | 12 ++++++++++++ - src/glx/dri3_glx.c | 11 +++++++++++ - src/loader/loader_dri3_helper.h | 1 + - 3 files changed, 24 insertions(+) - -diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c -index 31649fe..d93f5bc 100644 ---- a/src/egl/drivers/dri2/platform_x11_dri3.c -+++ b/src/egl/drivers/dri2/platform_x11_dri3.c -@@ -103,6 +103,17 @@ egl_dri3_get_dri_context(struct loader_dri3_drawable *draw) - return dri2_ctx->dri_context; - } - -+static __DRIscreen * -+egl_dri3_get_dri_screen(struct loader_dri3_drawable *draw) -+{ -+ _EGLContext *ctx = _eglGetCurrentContext(); -+ struct dri2_egl_context *dri2_ctx; -+ if (!ctx) -+ return NULL; -+ dri2_ctx = dri2_egl_context(ctx); -+ return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen; -+} -+ - static void - egl_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags) - { -@@ -119,6 +130,7 @@ static struct loader_dri3_vtable egl_dri3_vtable = { - .set_drawable_size = egl_dri3_set_drawable_size, - .in_current_context = egl_dri3_in_current_context, - .get_dri_context = egl_dri3_get_dri_context, -+ .get_dri_screen = egl_dri3_get_dri_screen, - .flush_drawable = egl_dri3_flush_drawable, - .show_fps = NULL, - }; -diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c -index 90d7bba..51b6b1c 100644 ---- a/src/glx/dri3_glx.c -+++ b/src/glx/dri3_glx.c -@@ -132,6 +132,16 @@ glx_dri3_get_dri_context(struct loader_dri3_drawable *draw) - return (gc != &dummyContext) ? dri3Ctx->driContext : NULL; - } - -+static __DRIscreen * -+glx_dri3_get_dri_screen(struct loader_dri3_drawable *draw) -+{ -+ struct glx_context *gc = __glXGetCurrentContext(); -+ struct dri3_context *pcp = (struct dri3_context *) gc; -+ struct dri3_screen *psc = (struct dri3_screen *) pcp->base.psc; -+ -+ return (gc != &dummyContext && psc) ? psc->driScreen : NULL; -+} -+ - static void - glx_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags) - { -@@ -169,6 +179,7 @@ static struct loader_dri3_vtable glx_dri3_vtable = { - .set_drawable_size = glx_dri3_set_drawable_size, - .in_current_context = glx_dri3_in_current_context, - .get_dri_context = glx_dri3_get_dri_context, -+ .get_dri_screen = glx_dri3_get_dri_screen, - .flush_drawable = glx_dri3_flush_drawable, - .show_fps = glx_dri3_show_fps, - }; -diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h -index 5b8fd1d..658e190 100644 ---- a/src/loader/loader_dri3_helper.h -+++ b/src/loader/loader_dri3_helper.h -@@ -103,6 +103,7 @@ struct loader_dri3_vtable { - void (*set_drawable_size)(struct loader_dri3_drawable *, int, int); - bool (*in_current_context)(struct loader_dri3_drawable *); - __DRIcontext *(*get_dri_context)(struct loader_dri3_drawable *); -+ __DRIscreen *(*get_dri_screen)(struct loader_dri3_drawable *); - void (*flush_drawable)(struct loader_dri3_drawable *, unsigned); - void (*show_fps)(struct loader_dri3_drawable *, uint64_t); - }; --- -2.10.0 - diff --git a/abs/core/mesa/0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch b/abs/core/mesa/0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch new file mode 100644 index 0000000..f3b0f99 --- /dev/null +++ b/abs/core/mesa/0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch @@ -0,0 +1,33 @@ +From 2d4094c2caad6cef2f5544b3966fcc37ceb32036 Mon Sep 17 00:00:00 2001 +From: Kyle Brenneman <kbrenneman@nvidia.com> +Date: Thu, 5 Jan 2017 14:29:47 -0700 +Subject: [PATCH 2/2] fixup! EGL: Implement the libglvnd interface for EGL (v2) + +--- + src/egl/generate/eglFunctionList.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/egl/generate/eglFunctionList.py b/src/egl/generate/eglFunctionList.py +index b19b5f7193..80cb83437c 100644 +--- a/src/egl/generate/eglFunctionList.py ++++ b/src/egl/generate/eglFunctionList.py +@@ -53,12 +53,14 @@ method values: + Select the vendor that owns the current context. + """ + +-def _eglFunc(name, method, static=False, public=False, inheader=None, prefix="", extension=None, retval=None): ++def _eglFunc(name, method, static=None, public=False, inheader=None, prefix="dispatch_", extension=None, retval=None): + """ + A convenience function to define an entry in the EGL function list. + """ ++ if static is None: ++ static = (not public and method != "custom") + if inheader is None: +- inheader = (not public) ++ inheader = (not static) + values = { + "method" : method, + "prefix" : prefix, +-- +2.11.0 + diff --git a/abs/core/mesa/0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch b/abs/core/mesa/0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch deleted file mode 100644 index 893872b..0000000 --- a/abs/core/mesa/0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch +++ /dev/null @@ -1,59 +0,0 @@ -From a599b1c2037ac8aca6c92350c8a7b3e42c81deaa Mon Sep 17 00:00:00 2001 -From: Martin Peres <martin.peres@linux.intel.com> -Date: Thu, 6 Oct 2016 17:10:35 +0300 -Subject: [PATCH 2/2] loader/dri3: import prime buffers in the currently-bound - screen - -This tries to mirrors the codepath taken by DRI2 in IntelSetTexBuffer2() -and fixes many applications when using DRI3: - - Totem with libva on hw-accelerated decoding - - obs-studio, using Window Capture (Xcomposite) as a Source - - gstreamer with VAAPI - -v2: - - introduce get_dri_screen() in the dri3 loader's vtable (krh) - -Tested-by: Timo Aaltonen <tjaalton@ubuntu.com> -Tested-by: Ionut Biru <biru.ionut@gmail.com> -Cc: mesa-stable@lists.freedesktop.org -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71759 -Reviewed-by: Emil Velikov <emil.velikov@collabora.com> -Signed-off-by: Martin Peres <martin.peres@linux.intel.com> ---- - src/loader/loader_dri3_helper.c | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c -index 3ce0352..8179297 100644 ---- a/src/loader/loader_dri3_helper.c -+++ b/src/loader/loader_dri3_helper.c -@@ -1117,6 +1117,7 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, unsigned int format, - xcb_sync_fence_t sync_fence; - struct xshmfence *shm_fence; - int fence_fd; -+ __DRIscreen *cur_screen; - - if (buffer) - return buffer; -@@ -1147,8 +1148,17 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, unsigned int format, - if (!bp_reply) - goto no_image; - -+ /* Get the currently-bound screen or revert to using the drawable's screen if -+ * no contexts are currently bound. The latter case is at least necessary for -+ * obs-studio, when using Window Capture (Xcomposite) as a Source. -+ */ -+ cur_screen = draw->vtable->get_dri_screen(draw); -+ if (!cur_screen) { -+ cur_screen = draw->dri_screen; -+ } -+ - buffer->image = loader_dri3_create_image(draw->conn, bp_reply, format, -- draw->dri_screen, draw->ext->image, -+ cur_screen, draw->ext->image, - buffer); - if (!buffer->image) - goto no_image; --- -2.10.0 - diff --git a/abs/core/mesa/PKGBUILD b/abs/core/mesa/PKGBUILD index 16ab271..5b30ea2 100644 --- a/abs/core/mesa/PKGBUILD +++ b/abs/core/mesa/PKGBUILD @@ -3,48 +3,54 @@ # Maintainer: Andreas Radke <andyrtr@archlinux.org> pkgbase=mesa -pkgname=('opencl-mesa' 'vulkan-intel' 'libva-mesa-driver' 'mesa-vdpau' 'mesa' 'mesa-libgl') -pkgver=12.0.3 -pkgrel=3 +pkgname=('opencl-mesa' 'vulkan-intel' 'vulkan-radeon' 'libva-mesa-driver' 'mesa-vdpau' 'mesa') +pkgver=17.0.2 +pkgrel=2 arch=('i686' 'x86_64') makedepends=('python2-mako' 'libxml2' 'libx11' 'glproto' 'libdrm' 'dri2proto' 'dri3proto' 'presentproto' 'libxshmfence' 'libxxf86vm' 'libxdamage' 'libvdpau' 'libva' 'wayland' 'elfutils' 'llvm' - 'systemd' 'libomxil-bellagio' 'libgcrypt' 'libclc' 'clang') + 'libomxil-bellagio' 'libclc' 'clang' 'libglvnd') url="http://mesa3d.sourceforge.net" license=('custom') -source=(ftp://ftp.freedesktop.org/pub/mesa/${pkgver}/mesa-${pkgver}.tar.xz{,.sig} +source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig} LICENSE remove-libpthread-stubs.patch - 0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch - 0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch - llvm-39.patch) -sha256sums=('1dc86dd9b51272eee1fad3df65e18cda2e556ef1bc0b6e07cd750b9757f493b1' + 0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch + 0001-Fix-linkage-against-shared-glapi.patch + 0001-glapi-Link-with-glapi-when-built-shared.patch + 0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch + glvnd-fix-gl-dot-pc.patch) +sha256sums=('f8f191f909e01e65de38d5bdea5fb057f21649a3aed20948be02348e77a689d4' 'SKIP' '7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2' - 'd82c329e89754266eb1538df29b94d33692a66e3b6882b2cee78f4d5aab4a39c' - '52eb98eb6c9c644383d9743692aea302d84c4f89cfaa7a276b9276befc2d9780' - '96ad07e241d16802b14b14ca3d6965fa7f4f4b8c678d62ba375291910dce3b4a' - '9156cb5cbfe287ecaeb4c97af44eaa677d28d3b659d309a6c5706bc9eefbfa16') + '75ab53ad44b95204c788a2988e97a5cb963bdbf6072a5466949a2afb79821c8f' + '1d3475dc2f4f3e450cf313130d3ce965f933f396058828fa843c0df8115feeb9' + 'c68d1522f9bce4ce31c92aa7a688da49f13043f5bb2254795b76dea8f47130b7' + '064dcd5a3ab1b7c23383e2cafbd37859e4c353f8839671d9695c6f7c2ef3260b' + '81d0ced62f61677ea0cf5f69a491093409fa1370f2ef045c41106ca8bf9c46f6' + '64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966') validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov@gmail.com> prepare() { - cd ${srcdir}/?esa-* - - patch -Np0 -i ../llvm-39.patch + cd ${srcdir}/mesa-${pkgver} # Now mesa checks for libpthread-stubs - so remove the check patch -Np1 -i ../remove-libpthread-stubs.patch - # fix FS#50240 - https://bugs.freedesktop.org/show_bug.cgi?id=71759 - # merged upstream - patch -Np1 -i ../0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch - patch -Np1 -i ../0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch + # glvnd support patches - from Fedora + # https://patchwork.freedesktop.org/series/12354/, v3 & v4 + patch -Np1 -i ../0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch + patch -Np1 -i ../0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch + # non-upstreamed ones + patch -Np1 -i ../glvnd-fix-gl-dot-pc.patch + patch -Np1 -i ../0001-Fix-linkage-against-shared-glapi.patch + patch -Np1 -i ../0001-glapi-Link-with-glapi-when-built-shared.patch autoreconf -fiv } build() { - cd ${srcdir}/?esa-* + cd ${srcdir}/mesa-${pkgver} ./configure --prefix=/usr \ --sysconfdir=/etc \ @@ -52,12 +58,12 @@ build() { --with-gallium-drivers=r300,r600,radeonsi,nouveau,svga,swrast,virgl \ --with-dri-drivers=i915,i965,r200,radeon,nouveau,swrast \ --with-egl-platforms=x11,drm,wayland \ - --with-vulkan-drivers=intel \ - --with-sha1=libgcrypt \ + --with-vulkan-drivers=intel,radeon \ --disable-xvmc \ --enable-gallium-llvm \ --enable-llvm-shared-libs \ --enable-shared-glapi \ + --enable-libglvnd \ --enable-egl \ --enable-glx \ --enable-glx-tls \ @@ -65,14 +71,16 @@ build() { --enable-gles2 \ --enable-gbm \ --enable-dri \ - --enable-osmesa \ + --enable-gallium-osmesa \ --enable-texture-float \ --enable-xa \ --enable-vdpau \ --enable-omx \ --enable-nine \ - --enable-opencl --enable-opencl-icd \ + --enable-opencl \ + --enable-opencl-icd \ --with-clang-libdir=/usr/lib + #--with-sha1=libgcrypt \ make @@ -83,9 +91,10 @@ build() { package_opencl-mesa() { pkgdesc="OpenCL support for AMD/ATI Radeon mesa drivers" - depends=('expat' 'libdrm' 'elfutils' 'libxfixes' 'libxext' 'opencl-icd-loader' 'libclc' 'clang') + depends=('expat' 'libdrm' 'libelf' 'libclc' 'clang') optdepends=('opencl-headers: headers necessary for OpenCL development') - + provides=('opencl-driver') + install -m755 -d ${pkgdir}/etc cp -rv ${srcdir}/fakeinstall/etc/OpenCL ${pkgdir}/etc/ @@ -99,10 +108,11 @@ package_opencl-mesa() { package_vulkan-intel() { pkgdesc="Intel's Vulkan mesa driver" - depends=('vulkan-icd-loader' 'libgcrypt' 'wayland' 'libxcb') - - install -m755 -d ${pkgdir}/usr/share - mv -v ${srcdir}/fakeinstall/usr/share/vulkan ${pkgdir}/usr/share/ + depends=('wayland' 'libx11' 'libxshmfence') + provides=('vulkan-driver') + + install -m755 -d ${pkgdir}/usr/share/vulkan/icd.d + mv -v ${srcdir}/fakeinstall/usr/share/vulkan/icd.d/intel_icd*.json ${pkgdir}/usr/share/vulkan/icd.d/ install -m755 -d ${pkgdir}/usr/{include/vulkan,lib} mv -v ${srcdir}/fakeinstall/usr/lib/libvulkan_intel.so ${pkgdir}/usr/lib/ @@ -112,9 +122,24 @@ package_vulkan-intel() { install -m644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/vulkan-intel/" } +package_vulkan-radeon() { + pkgdesc="Radeon's Vulkan mesa driver" + depends=('wayland' 'libx11' 'libxshmfence' 'libelf' 'libdrm' 'llvm-libs') + provides=('vulkan-driver') + + install -m755 -d ${pkgdir}/usr/share/vulkan/icd.d + mv -v ${srcdir}/fakeinstall/usr/share/vulkan/icd.d/radeon_icd*.json ${pkgdir}/usr/share/vulkan/icd.d/ + + install -m755 -d ${pkgdir}/usr/lib + mv -v ${srcdir}/fakeinstall/usr/lib/libvulkan_radeon.so ${pkgdir}/usr/lib/ + + install -m755 -d "${pkgdir}/usr/share/licenses/vulkan-radeon" + install -m644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/vulkan-radeon/" +} + package_libva-mesa-driver() { pkgdesc="VA-API implementation for gallium" - depends=('libdrm' 'libx11' 'llvm-libs' 'expat' 'elfutils') + depends=('libdrm' 'libx11' 'llvm-libs' 'expat' 'libelf' 'libxshmfence') install -m755 -d ${pkgdir}/usr/lib cp -rv ${srcdir}/fakeinstall/usr/lib/dri ${pkgdir}/usr/lib @@ -125,7 +150,7 @@ package_libva-mesa-driver() { package_mesa-vdpau() { pkgdesc="Mesa VDPAU drivers" - depends=('libdrm' 'libx11' 'llvm-libs' 'expat' 'elfutils') + depends=('libdrm' 'libx11' 'llvm-libs' 'expat' 'libelf' 'libxshmfence') install -m755 -d ${pkgdir}/usr/lib cp -rv ${srcdir}/fakeinstall/usr/lib/vdpau ${pkgdir}/usr/lib @@ -136,18 +161,21 @@ package_mesa-vdpau() { package_mesa() { pkgdesc="an open-source implementation of the OpenGL specification" - depends=('libdrm' 'wayland' 'libxxf86vm' 'libxdamage' 'libxshmfence' 'systemd' 'elfutils' - 'libomxil-bellagio' 'expat' 'libgcrypt' 'libtxc_dxtn' 'llvm-libs') + depends=('libdrm' 'wayland' 'libxxf86vm' 'libxdamage' 'libxshmfence' 'libelf' + 'libomxil-bellagio' 'libtxc_dxtn' 'llvm-libs' 'libglvnd') optdepends=('opengl-man-pages: for the OpenGL API man pages' 'mesa-vdpau: for accelerated video playback' 'libva-mesa-driver: for accelerated video playback') - provides=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri') - conflicts=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri') - replaces=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri') + provides=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri' 'mesa-libgl' 'opengl-driver') + conflicts=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri' 'mesa-libgl') + replaces=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' 'mesa-dri' 'mesa-libgl') install -m755 -d ${pkgdir}/etc cp -rv ${srcdir}/fakeinstall/etc/drirc ${pkgdir}/etc + install -m755 -d ${pkgdir}/usr/share/glvnd/egl_vendor.d + cp -rv ${srcdir}/fakeinstall/usr/share/glvnd/egl_vendor.d/50_mesa.json ${pkgdir}/usr/share/glvnd/egl_vendor.d/ + install -m755 -d ${pkgdir}/usr/lib/xorg/modules/dri # ati-dri, nouveau-dri, intel-dri, svga-dri, swrast cp -av ${srcdir}/fakeinstall/usr/lib/xorg/modules/dri/* ${pkgdir}/usr/lib/xorg/modules/dri @@ -165,42 +193,12 @@ package_mesa() { # remove vulkan headers rm -rf ${pkgdir}/usr/include/vulkan - install -m755 -d ${pkgdir}/usr/lib/mesa - # move libgl/EGL/glesv*.so to not conflict with blobs - may break .pc files ? - cp -rv ${srcdir}/fakeinstall/usr/lib/libGL.so* ${pkgdir}/usr/lib/mesa/ - cp -rv ${srcdir}/fakeinstall/usr/lib/libEGL.so* ${pkgdir}/usr/lib/mesa/ - cp -rv ${srcdir}/fakeinstall/usr/lib/libGLES*.so* ${pkgdir}/usr/lib/mesa/ + # libglvnd support + cp -rv ${srcdir}/fakeinstall/usr/lib/libGLX_mesa.so* ${pkgdir}/usr/lib/ + cp -rv ${srcdir}/fakeinstall/usr/lib/libEGL_mesa.so* ${pkgdir}/usr/lib/ + # indirect rendering + ln -s /usr/lib/libGLX_mesa.so.0 ${pkgdir}/usr/lib/libGLX_indirect.so.0 install -m755 -d "${pkgdir}/usr/share/licenses/mesa" install -m644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/mesa/" } - -package_mesa-libgl() { - pkgdesc="Mesa 3-D graphics library" - depends=('mesa') - provides=('libgl' 'libgles' 'libegl') - conflicts=('libgl' 'libgles' 'libegl') - - # See FS#26284 - install -m755 -d "${pkgdir}/usr/lib/xorg/modules/extensions" - ln -s libglx.xorg "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so" - - ln -s /usr/lib/mesa/libGL.so.1.2.0 ${pkgdir}/usr/lib/libGL.so.1.2.0 - ln -s libGL.so.1.2.0 ${pkgdir}/usr/lib/libGL.so.1 - ln -s libGL.so.1.2.0 ${pkgdir}/usr/lib/libGL.so - - ln -s /usr/lib/mesa/libEGL.so.1.0.0 ${pkgdir}/usr/lib/libEGL.so.1.0.0 - ln -s libEGL.so.1.0.0 ${pkgdir}/usr/lib/libEGL.so.1 - ln -s libEGL.so.1.0.0 ${pkgdir}/usr/lib/libEGL.so - - ln -s /usr/lib/mesa/libGLESv1_CM.so.1.1.0 ${pkgdir}/usr/lib/libGLESv1_CM.so.1.1.0 - ln -s libGLESv1_CM.so.1.1.0 ${pkgdir}/usr/lib/libGLESv1_CM.so.1 - ln -s libGLESv1_CM.so.1.1.0 ${pkgdir}/usr/lib/libGLESv1_CM.so - - ln -s /usr/lib/mesa/libGLESv2.so.2.0.0 ${pkgdir}/usr/lib/libGLESv2.so.2.0.0 - ln -s libGLESv2.so.2.0.0 ${pkgdir}/usr/lib/libGLESv2.so.2 - ln -s libGLESv2.so.2.0.0 ${pkgdir}/usr/lib/libGLESv2.so - - install -m755 -d "${pkgdir}/usr/share/licenses/mesa-libgl" - install -m644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/mesa-libgl/" -} diff --git a/abs/core/mesa/glvnd-fix-gl-dot-pc.patch b/abs/core/mesa/glvnd-fix-gl-dot-pc.patch new file mode 100644 index 0000000..68118f4 --- /dev/null +++ b/abs/core/mesa/glvnd-fix-gl-dot-pc.patch @@ -0,0 +1,12 @@ +diff -up mesa-12.0.3/src/mesa/gl.pc.in.jx mesa-12.0.3/src/mesa/gl.pc.in +--- mesa-12.0.3/src/mesa/gl.pc.in.jx 2016-01-18 02:39:26.000000000 -0500 ++++ mesa-12.0.3/src/mesa/gl.pc.in 2016-10-25 13:06:44.013159358 -0400 +@@ -7,7 +7,7 @@ Name: gl + Description: Mesa OpenGL library + Requires.private: @GL_PC_REQ_PRIV@ + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -l@GL_LIB@ ++Libs: -L${libdir} -lGL + Libs.private: @GL_PC_LIB_PRIV@ + Cflags: -I${includedir} @GL_PC_CFLAGS@ + glx_tls: @GLX_TLS@ diff --git a/abs/core/mesa/llvm-39.patch b/abs/core/mesa/llvm-39.patch deleted file mode 100644 index 4cdbb73..0000000 --- a/abs/core/mesa/llvm-39.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- src/gallium/state_trackers/clover/llvm/invocation.cpp 2016-09-18 14:21:11.960782381 +0200 -+++ src/gallium/state_trackers/clover/llvm/invocation.cpp 2016-09-18 14:22:59.743093983 +0200 -@@ -208,6 +208,7 @@ - c.getInvocation().setLangDefaults(c.getLangOpts(), clang::IK_OpenCL, - #if HAVE_LLVM >= 0x0309 - llvm::Triple(triple), -+ c.getPreprocessorOpts(), - #endif - clang::LangStandard::lang_opencl11); - c.createDiagnostics( diff --git a/abs/core/mesa/remove-libpthread-stubs.patch b/abs/core/mesa/remove-libpthread-stubs.patch index 5b44d03..efe8aad 100644 --- a/abs/core/mesa/remove-libpthread-stubs.patch +++ b/abs/core/mesa/remove-libpthread-stubs.patch @@ -1,14 +1,13 @@ -diff -ur mesa-orig/configure.ac mesa-origb/configure.ac ---- mesa-orig/configure.ac 2016-05-25 15:37:44.191643017 +0200 -+++ mesa-origb/configure.ac 2016-05-25 15:42:20.861654709 +0200 -@@ -813,10 +813,6 @@ - dnl pkgconfig files. - test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread" +diff --git a/configure.ac b/configure.ac +index 54416b4..8a708d3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -824,7 +824,7 @@ test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread" --PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs) --AC_SUBST(PTHREADSTUBS_CFLAGS) --AC_SUBST(PTHREADSTUBS_LIBS) -- - dnl SELinux awareness. - AC_ARG_ENABLE([selinux], - [AS_HELP_STRING([--enable-selinux], + dnl pthread-stubs is mandatory on targets where it exists + case "$host_os" in +-cygwin* ) ++cygwin* | linux* ) + pthread_stubs_possible="no" + ;; + * ) |