Commit 27c1ec23348d55da55923f88ffb94268cbbb43b4
- Diff rendering mode:
- inline
- side by side
src/egl/main/eglapi.c
(3 / 29)
|   | |||
| 93 | 93 | snprintf(disp->Version, sizeof(disp->Version), | |
| 94 | 94 | "%d.%d (%s)", major_int, minor_int, drv->Name); | |
| 95 | 95 | ||
| 96 | /* update the global notion of supported APIs */ | ||
| 97 | _eglGlobal.ClientAPIsMask |= disp->ClientAPIsMask; | ||
| 96 | /* limit to APIs supported by core */ | ||
| 97 | disp->ClientAPIsMask &= _EGL_API_ALL_BITS; | ||
| 98 | 98 | ||
| 99 | 99 | disp->Driver = drv; | |
| 100 | 100 | } else { | |
| … | … | ||
| 876 | 876 | if (!_eglIsApiValid(api)) | |
| 877 | 877 | return _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); | |
| 878 | 878 | ||
| 879 | switch (api) { | ||
| 880 | #ifdef EGL_VERSION_1_4 | ||
| 881 | case EGL_OPENGL_API: | ||
| 882 | if (_eglGlobal.ClientAPIsMask & EGL_OPENGL_BIT) { | ||
| 883 | t->CurrentAPIIndex = _eglConvertApiToIndex(api); | ||
| 884 | return EGL_TRUE; | ||
| 885 | } | ||
| 886 | _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); | ||
| 887 | return EGL_FALSE; | ||
| 888 | #endif | ||
| 889 | case EGL_OPENGL_ES_API: | ||
| 890 | if (_eglGlobal.ClientAPIsMask & (EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT)) { | ||
| 891 | t->CurrentAPIIndex = _eglConvertApiToIndex(api); | ||
| 892 | return EGL_TRUE; | ||
| 893 | } | ||
| 894 | _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); | ||
| 895 | return EGL_FALSE; | ||
| 896 | case EGL_OPENVG_API: | ||
| 897 | if (_eglGlobal.ClientAPIsMask & EGL_OPENVG_BIT) { | ||
| 898 | t->CurrentAPIIndex = _eglConvertApiToIndex(api); | ||
| 899 | return EGL_TRUE; | ||
| 900 | } | ||
| 901 | _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); | ||
| 902 | return EGL_FALSE; | ||
| 903 | default: | ||
| 904 | return EGL_FALSE; | ||
| 905 | } | ||
| 879 | t->CurrentAPIIndex = _eglConvertApiToIndex(api); | ||
| 906 | 880 | return EGL_TRUE; | |
| 907 | 881 | } | |
| 908 | 882 |
src/egl/main/eglcurrent.c
(1 / 1)
|   | |||
| 9 | 9 | ||
| 10 | 10 | /* This should be kept in sync with _eglInitThreadInfo() */ | |
| 11 | 11 | #define _EGL_THREAD_INFO_INITIALIZER \ | |
| 12 | { EGL_SUCCESS, { NULL }, 1 } | ||
| 12 | { EGL_SUCCESS, { NULL }, 0 } | ||
| 13 | 13 | ||
| 14 | 14 | /* a fallback thread info to guarantee that every thread always has one */ | |
| 15 | 15 | static _EGLThreadInfo dummy_thread = _EGL_THREAD_INFO_INITIALIZER; |
src/egl/main/eglcurrent.h
(15 / 8)
|   | |||
| 4 | 4 | #include "egltypedefs.h" | |
| 5 | 5 | ||
| 6 | 6 | ||
| 7 | #define _EGL_API_NUM_INDICES \ | ||
| 8 | (EGL_OPENGL_API - EGL_OPENGL_ES_API + 2) /* idx 0 is for EGL_NONE */ | ||
| 7 | #define _EGL_API_ALL_BITS \ | ||
| 8 | (EGL_OPENGL_ES_BIT | \ | ||
| 9 | EGL_OPENVG_BIT | \ | ||
| 10 | EGL_OPENGL_ES2_BIT | \ | ||
| 11 | EGL_OPENGL_BIT) | ||
| 9 | 12 | ||
| 10 | 13 | ||
| 14 | #define _EGL_API_FIRST_API EGL_OPENGL_ES_API | ||
| 15 | #define _EGL_API_LAST_API EGL_OPENGL_API | ||
| 16 | #define _EGL_API_NUM_APIS (_EGL_API_LAST_API - _EGL_API_FIRST_API + 1) | ||
| 17 | |||
| 18 | |||
| 11 | 19 | /** | |
| 12 | 20 | * Per-thread info | |
| 13 | 21 | */ | |
| 14 | 22 | struct _egl_thread_info | |
| 15 | 23 | { | |
| 16 | 24 | EGLint LastError; | |
| 17 | _EGLContext *CurrentContexts[_EGL_API_NUM_INDICES]; | ||
| 25 | _EGLContext *CurrentContexts[_EGL_API_NUM_APIS]; | ||
| 18 | 26 | /* use index for fast access to current context */ | |
| 19 | 27 | EGLint CurrentAPIIndex; | |
| 20 | 28 | }; | |
| 21 | 29 | ||
| 22 | 30 | ||
| 23 | 31 | /** | |
| 24 | * Return true if a client API enum can be converted to an index. | ||
| 32 | * Return true if a client API enum is recognized. | ||
| 25 | 33 | */ | |
| 26 | 34 | static INLINE EGLBoolean | |
| 27 | 35 | _eglIsApiValid(EGLenum api) | |
| 28 | 36 | { | |
| 29 | return ((api >= EGL_OPENGL_ES_API && api <= EGL_OPENGL_API) || | ||
| 30 | api == EGL_NONE); | ||
| 37 | return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API); | ||
| 31 | 38 | } | |
| 32 | 39 | ||
| 33 | 40 | ||
| … | … | ||
| 45 | 45 | static INLINE EGLint | |
| 46 | 46 | _eglConvertApiToIndex(EGLenum api) | |
| 47 | 47 | { | |
| 48 | return (api != EGL_NONE) ? api - EGL_OPENGL_ES_API + 1 : 0; | ||
| 48 | return api - _EGL_API_FIRST_API; | ||
| 49 | 49 | } | |
| 50 | 50 | ||
| 51 | 51 | ||
| … | … | ||
| 56 | 56 | static INLINE EGLenum | |
| 57 | 57 | _eglConvertApiFromIndex(EGLint idx) | |
| 58 | 58 | { | |
| 59 | return (idx) ? EGL_OPENGL_ES_API + idx - 1 : EGL_NONE; | ||
| 59 | return _EGL_API_FIRST_API + idx; | ||
| 60 | 60 | } | |
| 61 | 61 | ||
| 62 | 62 |
src/egl/main/eglglobals.c
(0 / 1)
|   | |||
| 15 | 15 | &_eglGlobalMutex, /* Mutex */ | |
| 16 | 16 | NULL, /* DisplayList */ | |
| 17 | 17 | 1, /* FreeScreenHandle */ | |
| 18 | 0x0, /* ClientAPIsMask */ | ||
| 19 | 18 | 0, /* NumDrivers */ | |
| 20 | 19 | { NULL }, /* Drivers */ | |
| 21 | 20 | 2, /* NumAtExitCalls */ |
src/egl/main/eglglobals.h
(0 / 3)
|   | |||
| 19 | 19 | ||
| 20 | 20 | EGLScreenMESA FreeScreenHandle; | |
| 21 | 21 | ||
| 22 | /* bitmaks of supported APIs (supported by _some_ driver) */ | ||
| 23 | EGLint ClientAPIsMask; | ||
| 24 | |||
| 25 | 22 | EGLint NumDrivers; | |
| 26 | 23 | _EGLDriver *Drivers[10]; | |
| 27 | 24 |

