X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Feglglobals.h;h=fc3b6bd62a775a3ed735cd15bae98aea3e5ec39f;hb=2907faee7a3970a63daefd6017bb7b8691e7fc08;hp=a9443cfbdd88f25fceafdf1d9f9b56917fd8b661;hpb=1e355a0cb36f206e681d1098b425ac541bc80840;p=mesa.git diff --git a/src/egl/main/eglglobals.h b/src/egl/main/eglglobals.h index a9443cfbdd8..fc3b6bd62a7 100644 --- a/src/egl/main/eglglobals.h +++ b/src/egl/main/eglglobals.h @@ -1,31 +1,78 @@ +/************************************************************************** + * + * Copyright 2008 VMware, Inc. + * Copyright 2009-2010 Chia-I Wu + * Copyright 2010-2011 LunarG, Inc. + * 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 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 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 SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + #ifndef EGLGLOBALS_INCLUDED #define EGLGLOBALS_INCLUDED +#include +#include "c11/threads.h" + #include "egltypedefs.h" -#include "eglhash.h" -#include "eglcurrent.h" +enum +{ + _EGL_DEBUG_BIT_CRITICAL = 0x1, + _EGL_DEBUG_BIT_ERROR = 0x2, + _EGL_DEBUG_BIT_WARN = 0x4, + _EGL_DEBUG_BIT_INFO = 0x8, +}; /** * Global library data */ struct _egl_global { - EGLBoolean Initialized; - - /* these are private to egldisplay.c */ - _EGLHashtable *Displays; - _EGLHashtable *Surfaces; - - EGLScreenMESA FreeScreenHandle; - - /* bitmaks of supported APIs (supported by _some_ driver) */ - EGLint ClientAPIsMask; - - char ClientAPIs[1000]; /**< updated by eglQueryString */ - - EGLint NumDrivers; - _EGLDriver *Drivers[10]; + mtx_t *Mutex; + + /* the list of all displays */ + _EGLDisplay *DisplayList; + + _EGLDevice *DeviceList; + + EGLint NumAtExitCalls; + void (*AtExitCalls[10])(void); + + /* + * Under libglvnd, the client extension string has to be split into two + * strings, one for platform extensions, and one for everything else. + * For a non-glvnd build create a concatenated one. + */ +#if USE_LIBGLVND + const char *ClientOnlyExtensionString; + const char *PlatformExtensionString; +#else + const char *ClientExtensionString; +#endif + + EGLDEBUGPROCKHR debugCallback; + unsigned int debugTypesEnabled; }; @@ -33,11 +80,18 @@ extern struct _egl_global _eglGlobal; extern void -_eglInitGlobals(void); +_eglAddAtExitCall(void (*func)(void)); +static inline unsigned int DebugBitFromType(EGLenum type) +{ + assert(type >= EGL_DEBUG_MSG_CRITICAL_KHR && type <= EGL_DEBUG_MSG_INFO_KHR); + return (1 << (type - EGL_DEBUG_MSG_CRITICAL_KHR)); +} -extern void -_eglDestroyGlobals(void); - +/** + * Perform validity checks on a generic pointer. + */ +extern EGLBoolean +_eglPointerIsDereferencable(void *p); #endif /* EGLGLOBALS_INCLUDED */