diff options
author | Chia-I Wu <olvaffe@gmail.com> | 2010-01-31 17:34:02 +0800 |
---|---|---|
committer | Chia-I Wu <olvaffe@gmail.com> | 2010-01-31 22:20:42 +0800 |
commit | 0135e5d6c83add5e539492a4899504e33f3f2434 (patch) | |
tree | c95f8a26c519ff15fb9a92e160c0d149a6eb0ee0 /src/egl/main/eglmisc.c | |
parent | f8f2520e88cecf21aee5023423185deea7e44b23 (diff) | |
download | external_mesa3d-0135e5d6c83add5e539492a4899504e33f3f2434.zip external_mesa3d-0135e5d6c83add5e539492a4899504e33f3f2434.tar.gz external_mesa3d-0135e5d6c83add5e539492a4899504e33f3f2434.tar.bz2 |
egl: Add support for more EGLImage extensions to EGL core.
Add support EGL_KHR_vg_parent_image and EGL_KHR_gl_*. This is as simple
as adding some flags that can be enabled. Individual drivers need to
implement the extensions before enbaling the flags.
Diffstat (limited to 'src/egl/main/eglmisc.c')
-rw-r--r-- | src/egl/main/eglmisc.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/egl/main/eglmisc.c b/src/egl/main/eglmisc.c index 907a057..984e426 100644 --- a/src/egl/main/eglmisc.c +++ b/src/egl/main/eglmisc.c @@ -39,30 +39,64 @@ /** + * Copy the extension into the string and update the string pointer. + */ +static EGLint +_eglAppendExtension(char **str, const char *ext) +{ + char *s = *str; + EGLint len = strlen(ext); + + if (s) { + memcpy(s, ext, len); + s[len++] = ' '; + s[len] = '\0'; + + *str += len; + } + else { + len++; + } + + return len; +} + + +/** * Examine the individual extension enable/disable flags and recompute * the driver's Extensions string. */ static void _eglUpdateExtensionsString(_EGLDisplay *dpy) { +#define _EGL_CHECK_EXTENSION(ext) \ + do { \ + if (dpy->Extensions.ext) { \ + _eglAppendExtension(&exts, "EGL_" #ext); \ + assert(exts <= dpy->Extensions.String + _EGL_MAX_EXTENSIONS_LEN); \ + } \ + } while (0) + char *exts = dpy->Extensions.String; if (exts[0]) return; - if (dpy->Extensions.MESA_screen_surface) - strcat(exts, "EGL_MESA_screen_surface "); - if (dpy->Extensions.MESA_copy_context) - strcat(exts, "EGL_MESA_copy_context "); + _EGL_CHECK_EXTENSION(MESA_screen_surface); + _EGL_CHECK_EXTENSION(MESA_copy_context); - if (dpy->Extensions.KHR_image_base) - strcat(exts, "EGL_KHR_image_base "); - if (dpy->Extensions.KHR_image_pixmap) - strcat(exts, "EGL_KHR_image_pixmap "); + _EGL_CHECK_EXTENSION(KHR_image_base); + _EGL_CHECK_EXTENSION(KHR_image_pixmap); if (dpy->Extensions.KHR_image_base && dpy->Extensions.KHR_image_pixmap) - strcat(exts, "EGL_KHR_image "); + _eglAppendExtension(&exts, "EGL_KHR_image"); + + _EGL_CHECK_EXTENSION(KHR_vg_parent_image); + _EGL_CHECK_EXTENSION(KHR_gl_texture_2D_image); + _EGL_CHECK_EXTENSION(KHR_gl_texture_cubemap_image); + _EGL_CHECK_EXTENSION(KHR_gl_texture_3D_image); + _EGL_CHECK_EXTENSION(KHR_gl_renderbuffer_image); - assert(strlen(exts) < _EGL_MAX_EXTENSIONS_LEN); +#undef _EGL_CHECK_EXTENSION } |