diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/egl/Makefile.am | 96 | ||||
-rw-r--r-- | src/egl/generate/egl.xml | 2412 | ||||
-rw-r--r-- | src/egl/generate/eglFunctionList.py | 199 | ||||
-rw-r--r-- | src/egl/generate/egl_other.xml | 47 | ||||
-rw-r--r-- | src/egl/generate/genCommon.py | 223 | ||||
-rw-r--r-- | src/egl/generate/gen_egl_dispatch.py | 250 | ||||
-rw-r--r-- | src/egl/main/50_mesa.json | 6 | ||||
-rw-r--r-- | src/egl/main/eglapi.c | 6 | ||||
-rw-r--r-- | src/egl/main/egldispatchstubs.c | 110 | ||||
-rw-r--r-- | src/egl/main/egldispatchstubs.h | 26 | ||||
-rw-r--r-- | src/egl/main/eglglobals.c | 47 | ||||
-rw-r--r-- | src/egl/main/eglglobals.h | 13 | ||||
-rw-r--r-- | src/egl/main/eglglvnd.c | 82 | ||||
-rw-r--r-- | src/glx/Makefile.am | 2 | ||||
-rw-r--r-- | src/glx/glxclient.h | 2 |
15 files changed, 3493 insertions, 28 deletions
diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am index 3477f797d77..e607b83fb99 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 +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 + +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 include $(top_srcdir)/install-lib-links.mk @@ -134,4 +186,6 @@ 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 100644 index 00000000000..f6dbbc0f269 --- /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 00000000000..80cb83437c0 --- /dev/null +++ b/src/egl/generate/eglFunctionList.py @@ -0,0 +1,199 @@ +#!/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=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 static) + 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 00000000000..7fe3a9e2722 --- /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 00000000000..d493d7bf29a --- /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 <[email protected]> + +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 100644 index 00000000000..eeb3f3f9a5a --- /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 <[email protected]> + +""" +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 00000000000..8aaaa100ffa --- /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 5694b5a4ca3..fc243a58e8c 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -657,7 +657,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 00000000000..e02abd7a9e0 --- /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 00000000000..7861ea5e61a --- /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 cb41063e321..baf96bb1ec5 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 ec4f3d04a36..c6ef59d4820 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 00000000000..6b984ed6c28 --- /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; +} + diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am index 5c0376408cc..41e4939a0b7 100644 --- a/src/glx/Makefile.am +++ b/src/glx/Makefile.am @@ -155,7 +155,7 @@ libglx_la_LIBADD += \ $(builddir)/windows/libwindowsglx.la endif -if USE_LIBGLVND_GLX +if USE_LIBGLVND AM_CFLAGS += \ -DGL_LIB_NAME=\"lib@[email protected]\" \ $(GLVND_CFLAGS) diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index 70733acb23f..0d29e5635e9 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -56,7 +56,7 @@ #include "glxextensions.h" -#if defined(USE_LIBGLVND_GLX) +#if defined(USE_LIBGLVND) #define _GLX_PUBLIC _X_HIDDEN #else #define _GLX_PUBLIC _X_EXPORT |