[Mesa-dev] [PATCH 2/2] egl: Check if API is supported when using eglBindAPI.
Plamena Manolova
plamena.manolova at intel.com
Tue May 17 16:35:51 UTC 2016
According to the EGL specifications before binding an API
we must check whether it's supported first. If not eglBindAPI
should return EGL_FALSE and generate a EGL_BAD_PARAMETER error.
Signed-off-by: Plamena Manolova <plamena.manolova at intel.com>
---
src/egl/main/eglcurrent.h | 33 ++++++++++++++++++++++++++++++---
1 file changed, 30 insertions(+), 3 deletions(-)
diff --git a/src/egl/main/eglcurrent.h b/src/egl/main/eglcurrent.h
index 1e386ac..f2e19cc 100644
--- a/src/egl/main/eglcurrent.h
+++ b/src/egl/main/eglcurrent.h
@@ -32,7 +32,8 @@
#include "c99_compat.h"
#include "egltypedefs.h"
-
+#include "eglglobals.h"
+#include "egldisplay.h"
#ifdef __cplusplus
extern "C" {
@@ -62,14 +63,40 @@ struct _egl_thread_info
EGLint CurrentAPIIndex;
};
-
+static inline EGLBoolean
+_eglDisplaySupportsApi(_EGLDisplay *dpy, EGLenum api)
+{
+ if (!dpy->Initialized) {
+ return EGL_FALSE;
+ } else if (api == EGL_OPENGL_API && dpy->ClientAPIs & EGL_OPENGL_BIT) {
+ return EGL_TRUE;
+ } else if (api == EGL_OPENGL_ES_API &&
+ (dpy->ClientAPIs & EGL_OPENGL_ES_BIT ||
+ dpy->ClientAPIs & EGL_OPENGL_ES2_BIT ||
+ dpy->ClientAPIs & EGL_OPENGL_ES3_BIT_KHR)) {
+ return EGL_TRUE;
+ } else if (api == EGL_OPENVG_API && dpy->ClientAPIs & EGL_OPENVG_BIT) {
+ return EGL_TRUE;
+ } else {
+ return EGL_FALSE;
+ }
+}
/**
* Return true if a client API enum is recognized.
*/
static inline EGLBoolean
_eglIsApiValid(EGLenum api)
{
- return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API);
+ _EGLDisplay *dpy = _eglGlobal.DisplayList;
+
+ while (dpy) {
+ if (_eglDisplaySupportsApi(dpy, api) == EGL_TRUE)
+ return EGL_TRUE;
+
+ dpy = dpy->Next;
+ }
+
+ return EGL_FALSE;
}
--
2.7.4
More information about the mesa-dev
mailing list