eglmisc.c revision 4eebea74a81ec5fbacf2347ea88cac137ddd4d69
111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul/************************************************************************** 211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * 311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * All Rights Reserved. 511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * 611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * copy of this software and associated documentation files (the 811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * "Software"), to deal in the Software without restriction, including 911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * without limitation the rights to use, copy, modify, merge, publish, 1011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * distribute, sub license, and/or sell copies of the Software, and to 1111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * permit persons to whom the Software is furnished to do so, subject to 1211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * the following conditions: 1311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * 1411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * The above copyright notice and this permission notice (including the 1511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * next paragraph) shall be included in all copies or substantial portions 1611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * of the Software. 1711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * 1811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * 2611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul **************************************************************************/ 2711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 2811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 2911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul/** 3011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * Small/misc EGL functions 3111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul */ 3211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 3311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 3411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul#include <assert.h> 3511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul#include <string.h> 3694cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu#include "eglcurrent.h" 3711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul#include "eglmisc.h" 385a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu#include "egldisplay.h" 3911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 4011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 4111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul/** 420135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu * Copy the extension into the string and update the string pointer. 430135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu */ 440135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wustatic EGLint 450135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu_eglAppendExtension(char **str, const char *ext) 460135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu{ 470135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu char *s = *str; 481e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu size_t len = strlen(ext); 490135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 500135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu if (s) { 510135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu memcpy(s, ext, len); 520135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu s[len++] = ' '; 530135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu s[len] = '\0'; 540135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 550135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu *str += len; 560135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu } 570135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu else { 580135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu len++; 590135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu } 600135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 611e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu return (EGLint) len; 620135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu} 630135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 640135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 650135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu/** 6611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * Examine the individual extension enable/disable flags and recompute 6711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul * the driver's Extensions string. 6811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul */ 6911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paulstatic void 705a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu_eglUpdateExtensionsString(_EGLDisplay *dpy) 7111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul{ 720135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu#define _EGL_CHECK_EXTENSION(ext) \ 730135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu do { \ 740135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu if (dpy->Extensions.ext) { \ 750135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _eglAppendExtension(&exts, "EGL_" #ext); \ 760135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu assert(exts <= dpy->Extensions.String + _EGL_MAX_EXTENSIONS_LEN); \ 770135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu } \ 780135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu } while (0) 790135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 805a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu char *exts = dpy->Extensions.String; 8111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 825a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (exts[0]) 835a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu return; 845a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu 850135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(MESA_screen_surface); 860135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(MESA_copy_context); 8778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu _EGL_CHECK_EXTENSION(MESA_drm_display); 88a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 890135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_image_base); 900135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_image_pixmap); 91a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (dpy->Extensions.KHR_image_base && dpy->Extensions.KHR_image_pixmap) 920135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _eglAppendExtension(&exts, "EGL_KHR_image"); 930135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu 940135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_vg_parent_image); 950135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_gl_texture_2D_image); 960135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_gl_texture_cubemap_image); 970135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_gl_texture_3D_image); 980135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu _EGL_CHECK_EXTENSION(KHR_gl_renderbuffer_image); 99a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_EXTENSION(KHR_reusable_sync); 1014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 102b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg _EGL_CHECK_EXTENSION(KHR_surfaceless_gles1); 103b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg _EGL_CHECK_EXTENSION(KHR_surfaceless_gles2); 104b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg _EGL_CHECK_EXTENSION(KHR_surfaceless_opengl); 105b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg 10652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_EXTENSION(NOK_swap_region); 1075dc0f49084f322dd8ff6eb585212eea8b50e3377Kristian Høgsberg _EGL_CHECK_EXTENSION(NOK_texture_from_pixmap); 1080135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu#undef _EGL_CHECK_EXTENSION 10911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul} 11011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 11111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 112d5078b94323241a6482f54797756116b1c864327Brian Paulstatic void 1135a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu_eglUpdateAPIsString(_EGLDisplay *dpy) 114d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1155a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu char *apis = dpy->ClientAPIs; 116d5078b94323241a6482f54797756116b1c864327Brian Paul 1175a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (apis[0] || !dpy->ClientAPIsMask) 1185a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu return; 119d5078b94323241a6482f54797756116b1c864327Brian Paul 1205a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (dpy->ClientAPIsMask & EGL_OPENGL_BIT) 1215a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu strcat(apis, "OpenGL "); 122d5078b94323241a6482f54797756116b1c864327Brian Paul 1235a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (dpy->ClientAPIsMask & EGL_OPENGL_ES_BIT) 1245a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu strcat(apis, "OpenGL_ES "); 125d5078b94323241a6482f54797756116b1c864327Brian Paul 1265a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (dpy->ClientAPIsMask & EGL_OPENGL_ES2_BIT) 1275a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu strcat(apis, "OpenGL_ES2 "); 128d5078b94323241a6482f54797756116b1c864327Brian Paul 1295a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu if (dpy->ClientAPIsMask & EGL_OPENVG_BIT) 1305a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu strcat(apis, "OpenVG "); 131d5078b94323241a6482f54797756116b1c864327Brian Paul 1325a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu assert(strlen(apis) < sizeof(dpy->ClientAPIs)); 1335a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu} 134d5078b94323241a6482f54797756116b1c864327Brian Paul 13511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 13611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paulconst char * 1372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglQueryString(_EGLDriver *drv, _EGLDisplay *dpy, EGLint name) 13811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul{ 13911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) drv; 14011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) dpy; 14111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul switch (name) { 14211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul case EGL_VENDOR: 14311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul return _EGL_VENDOR_STRING; 14411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul case EGL_VERSION: 1455a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu return dpy->Version; 14611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul case EGL_EXTENSIONS: 1475a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu _eglUpdateExtensionsString(dpy); 1485a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu return dpy->Extensions.String; 14911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul#ifdef EGL_VERSION_1_2 15011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul case EGL_CLIENT_APIS: 1515a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu _eglUpdateAPIsString(dpy); 1525a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu return dpy->ClientAPIs; 15311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul#endif 15411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul default: 15511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul _eglError(EGL_BAD_PARAMETER, "eglQueryString"); 15611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul return NULL; 15711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul } 15811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul} 15911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 16011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 16111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian PaulEGLBoolean 1626c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu_eglWaitClient(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx) 16311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul{ 16411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul /* just a placeholder */ 16511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) drv; 16611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) dpy; 1676c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu (void) ctx; 16811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul return EGL_TRUE; 16911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul} 17011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 17111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 17211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian PaulEGLBoolean 1732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglWaitNative(_EGLDriver *drv, _EGLDisplay *dpy, EGLint engine) 17411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul{ 17511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul /* just a placeholder */ 17611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) drv; 17711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul (void) dpy; 17811a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul switch (engine) { 17911a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul case EGL_CORE_NATIVE_ENGINE: 18011a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul break; 18111a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul default: 18211a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul _eglError(EGL_BAD_PARAMETER, "eglWaitNative(engine)"); 18311a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul return EGL_FALSE; 18411a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul } 18511a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul 18611a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul return EGL_TRUE; 18711a261ef4f1d4100c46f73ad51e7e4ed57cc1b5eBrian Paul} 188