Merge branch 'asm-shader-rework-1'
[mesa.git] / src / egl / main / egldisplay.h
index e8a3d49d96b4ab4b1419c5dca8f1f91aa9a27d14..c7a41cd588358c266f42ee332639dc50e25ef1bb 100644 (file)
@@ -65,6 +65,10 @@ extern void
 _eglFiniDisplay(void);
 
 
+extern char *
+_eglSplitDisplayString(const char *dpyString, const char **args);
+
+
 extern _EGLDisplay *
 _eglNewDisplay(NativeDisplayType displayName);
 
@@ -105,6 +109,51 @@ extern void
 _eglUnlinkSurface(_EGLSurface *surf);
 
 
+#ifndef _EGL_SKIP_HANDLE_CHECK
+
+
+extern EGLBoolean
+_eglCheckDisplayHandle(EGLDisplay dpy);
+
+
+extern EGLBoolean
+_eglCheckContextHandle(EGLContext ctx, _EGLDisplay *dpy);
+
+
+extern EGLBoolean
+_eglCheckSurfaceHandle(EGLSurface surf, _EGLDisplay *dpy);
+
+
+#else /* !_EGL_SKIP_HANDLE_CHECK */
+
+/* Only do a quick check.  This is NOT standard compliant. */
+
+static INLINE EGLBoolean
+_eglCheckDisplayHandle(EGLDisplay dpy)
+{
+   return ((_EGLDisplay *) dpy != NULL);
+}
+
+
+static INLINE EGLBoolean
+_eglCheckContextHandle(EGLContext ctx, _EGLDisplay *dpy)
+{
+   _EGLContext *c = (_EGLContext *) ctx;
+   return (dpy && c && c->Display == dpy);
+}
+
+
+static INLINE EGLBoolean
+_eglCheckSurfaceHandle(EGLSurface surf, _EGLDisplay *dpy)
+{
+   _EGLSurface *s = (_EGLSurface *) surf;
+   return (dpy && s && s->Display == dpy);
+}
+
+
+#endif /* _EGL_SKIP_HANDLE_CHECK */
+
+
 /**
  * Lookup a handle to find the linked display.
  * Return NULL if the handle has no corresponding linked display.
@@ -113,6 +162,8 @@ static INLINE _EGLDisplay *
 _eglLookupDisplay(EGLDisplay display)
 {
    _EGLDisplay *dpy = (_EGLDisplay *) display;
+   if (!_eglCheckDisplayHandle(display))
+      dpy = NULL;
    return dpy;
 }
 
@@ -145,7 +196,9 @@ static INLINE _EGLContext *
 _eglLookupContext(EGLContext context, _EGLDisplay *dpy)
 {
    _EGLContext *ctx = (_EGLContext *) context;
-   return (ctx && ctx->Display) ? ctx : NULL;
+   if (!_eglCheckContextHandle(context, dpy))
+      ctx = NULL;
+   return ctx;
 }
 
 
@@ -177,7 +230,9 @@ static INLINE _EGLSurface *
 _eglLookupSurface(EGLSurface surface, _EGLDisplay *dpy)
 {
    _EGLSurface *surf = (_EGLSurface *) surface;
-   return (surf && surf->Display) ? surf : NULL;
+   if (!_eglCheckSurfaceHandle(surf, dpy))
+      surf = NULL;
+   return surf;
 }