Fix retrieving the current Display. eglGetCurrentDisplay() returned a pointer to the concrete egl::Display object, instead of the opaque identifier obtained from eglGetDisplay. This was a regression caused by https://swiftshader-review.googlesource.com/10188 Bug chromium:738298 Change-Id: Id3a87fc3978f8f4efdc77d6c5eaa85743fa3672c Reviewed-on: https://swiftshader-review.googlesource.com/10508 Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp index a4aacfd..b08fa65 100644 --- a/src/OpenGL/libEGL/Display.cpp +++ b/src/OpenGL/libEGL/Display.cpp
@@ -46,7 +46,7 @@ class DisplayImplementation : public Display { public: - DisplayImplementation(void *nativeDisplay) : Display(nativeDisplay) {} + DisplayImplementation(EGLDisplay dpy, void *nativeDisplay) : Display(dpy, nativeDisplay) {} ~DisplayImplementation() override {} Image *getSharedImage(EGLImageKHR name) override @@ -72,12 +72,12 @@ } #endif - static DisplayImplementation display(nativeDisplay); + static DisplayImplementation display(dpy, nativeDisplay); return &display; } -Display::Display(void *nativeDisplay) : nativeDisplay(nativeDisplay) +Display::Display(EGLDisplay eglDisplay, void *nativeDisplay) : eglDisplay(eglDisplay), nativeDisplay(nativeDisplay) { mMinSwapInterval = 1; mMaxSwapInterval = 1; @@ -610,6 +610,11 @@ return mMaxSwapInterval; } +EGLDisplay Display::getEGLDisplay() const +{ + return eglDisplay; +} + void *Display::getNativeDisplay() const { return nativeDisplay;
diff --git a/src/OpenGL/libEGL/Display.h b/src/OpenGL/libEGL/Display.h index ba6b92c..5944d69 100644 --- a/src/OpenGL/libEGL/Display.h +++ b/src/OpenGL/libEGL/Display.h
@@ -38,7 +38,7 @@ class [[clang::lto_visibility_public]] Display { protected: - explicit Display(void *nativeDisplay); + explicit Display(EGLDisplay eglDisplay, void *nativeDisplay); virtual ~Display() = 0; public: @@ -70,6 +70,7 @@ EGLint getMinSwapInterval() const; EGLint getMaxSwapInterval() const; + EGLDisplay getEGLDisplay() const; void *getNativeDisplay() const; EGLImageKHR createSharedImage(Image *image); @@ -79,6 +80,7 @@ private: sw::Format getDisplayFormat() const; + const EGLDisplay eglDisplay; void *const nativeDisplay; EGLint mMaxSwapInterval;
diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp index c7a4127..3a62da0 100644 --- a/src/OpenGL/libEGL/libEGL.cpp +++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -862,7 +862,14 @@ return success(EGL_NO_DISPLAY); } - return success(context->getDisplay()); + egl::Display *display = context->getDisplay(); + + if(!display) + { + return error(EGL_BAD_ACCESS, EGL_NO_DISPLAY); + } + + return success(display->getEGLDisplay()); } EGLBoolean QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)