summaryrefslogtreecommitdiff
path: root/src/egl/generate/eglFunctionList.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/egl/generate/eglFunctionList.py')
-rw-r--r--src/egl/generate/eglFunctionList.py199
1 files changed, 199 insertions, 0 deletions
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"),
+)
+