The latest revision of the spec explicitly requires the same handle to
be returned for the same native display.

Signed-off-by: Chia-I Wu <olva...@gmail.com>
---
 src/egl/main/eglapi.c     |    9 ++++++---
 src/egl/main/egldisplay.c |   19 +++++++++++++++++++
 src/egl/main/egldisplay.h |    4 ++++
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index 71fa43e..714d404 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -51,9 +51,12 @@ eglGetDisplay(NativeDisplayType nativeDisplay)
 {
    _EGLDisplay *dpy;
    _eglInitGlobals();
-   dpy = _eglNewDisplay(nativeDisplay);
-   if (dpy)
-      _eglLinkDisplay(dpy);
+   dpy = _eglFindDisplay(nativeDisplay);
+   if (!dpy) {
+      dpy = _eglNewDisplay(nativeDisplay);
+      if (dpy)
+         _eglLinkDisplay(dpy);
+   }
    return _eglGetDisplayHandle(dpy);
 }
 
diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 943912d..8c3dfda 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -89,6 +89,25 @@ _eglLookupDisplay(EGLDisplay dpy)
 }
 
 
+_EGLDisplay *
+_eglFindDisplay(NativeDisplayType nativeDisplay)
+{
+   EGLuint key = _eglHashFirstEntry(_eglGlobal.Displays);
+
+   while (key) {
+      _EGLDisplay *dpy = (_EGLDisplay *)
+            _eglHashLookup(_eglGlobal.Displays, key);
+      assert(dpy);
+
+      if (dpy->NativeDisplay == nativeDisplay)
+         return dpy;
+      key = _eglHashNextEntry(_eglGlobal.Displays, key);
+   }
+
+   return NULL;
+}
+
+
 /**
  * Free all the data hanging of an _EGLDisplay object, but not
  * the object itself.
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index c907df5..c5a7f08 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -51,6 +51,10 @@ extern _EGLDisplay *
 _eglLookupDisplay(EGLDisplay dpy);
 
 
+extern _EGLDisplay *
+_eglFindDisplay(NativeDisplayType nativeDisplay);
+
+
 extern void
 _eglCleanupDisplay(_EGLDisplay *disp);
 
-- 
1.6.2.4


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to