OSDN Git Service

Fix resetting current display when no current context.
authorNicolas Capens <capn@google.com>
Thu, 15 Jun 2017 21:15:30 +0000 (14:15 -0700)
committerNicolas Capens <capn@google.com>
Sat, 24 Jun 2017 06:07:26 +0000 (06:07 +0000)
Bug swiftshader:65

Change-Id: I8454538d144ed37a56b98c46ed1e88ffdced387e
Reviewed-on: https://swiftshader-review.googlesource.com/10188
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/libEGL/Context.hpp
src/OpenGL/libEGL/libEGL.cpp
src/OpenGL/libEGL/main.cpp
src/OpenGL/libEGL/main.h
tests/unittests/unittests.cpp

index acf06ce..c968690 100644 (file)
@@ -38,6 +38,8 @@ public:
        virtual EGLint getConfigID() const = 0;
        virtual void finish() = 0;
 
+       Display *getDisplay() const { return display; }
+
 protected:
        Context(egl::Display *display) : display(display) {}
        virtual ~Context() {};
index 979691e..c7a4127 100644 (file)
@@ -810,7 +810,6 @@ EGLBoolean MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLCont
                UNIMPLEMENTED();   // FIXME
        }
 
-       egl::setCurrentDisplay(dpy);
        egl::setCurrentDrawSurface(drawSurface);
        egl::setCurrentReadSurface(readSurface);
        egl::setCurrentContext(context);
@@ -856,7 +855,14 @@ EGLDisplay GetCurrentDisplay(void)
 {
        TRACE("()");
 
-       return success(egl::getCurrentDisplay());
+       egl::Context *context = egl::getCurrentContext();
+
+       if(!context)
+       {
+               return success(EGL_NO_DISPLAY);
+       }
+
+       return success(context->getDisplay());
 }
 
 EGLBoolean QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
index 8aa9582..1df31c5 100644 (file)
@@ -51,7 +51,6 @@ void attachThread()
 
                current->error = EGL_SUCCESS;
                current->API = EGL_OPENGL_ES_API;
-               current->display = EGL_NO_DISPLAY;
                current->context = nullptr;
                current->drawSurface = nullptr;
                current->readSurface = nullptr;
@@ -211,20 +210,6 @@ EGLenum getCurrentAPI()
        return current->API;
 }
 
-void setCurrentDisplay(EGLDisplay dpy)
-{
-       Current *current = getCurrent();
-
-       current->display = dpy;
-}
-
-EGLDisplay getCurrentDisplay()
-{
-       Current *current = getCurrent();
-
-       return current->display;
-}
-
 void setCurrentContext(egl::Context *ctx)
 {
        Current *current = getCurrent();
index 25b9ecf..a2a8f44 100644 (file)
@@ -35,7 +35,6 @@ namespace egl
        {
                EGLint error;
                EGLenum API;
-               EGLDisplay display;
                Context *context;
                Surface *drawSurface;
                Surface *readSurface;
@@ -49,9 +48,6 @@ namespace egl
        void setCurrentAPI(EGLenum API);
        EGLenum getCurrentAPI();
 
-       void setCurrentDisplay(EGLDisplay dpy);
-       EGLDisplay getCurrentDisplay();
-
        void setCurrentContext(Context *ctx);
        Context *getCurrentContext();
 
index f363756..d93123b 100644 (file)
@@ -39,11 +39,6 @@ protected:
        }
 };
 
-TEST_F(SwiftShaderTest, CompilationOnly)
-{
-       // Empty test to trigger compilation of SwiftShader on build bots
-}
-
 TEST_F(SwiftShaderTest, Initalization)
 {
        EXPECT_EQ(EGL_SUCCESS, eglGetError());
@@ -162,9 +157,9 @@ TEST_F(SwiftShaderTest, Initalization)
        EXPECT_EQ(EGL_SUCCESS, eglGetError());
        EXPECT_EQ((EGLBoolean)EGL_TRUE, success);
 
-//     currentDisplay = eglGetCurrentDisplay();
-//     EXPECT_EQ(EGL_SUCCESS, eglGetError());
-//     EXPECT_EQ(EGL_NO_DISPLAY, currentDisplay);
+       currentDisplay = eglGetCurrentDisplay();
+       EXPECT_EQ(EGL_SUCCESS, eglGetError());
+       EXPECT_EQ(EGL_NO_DISPLAY, currentDisplay);
 
        currentDrawSurface = eglGetCurrentSurface(EGL_DRAW);
        EXPECT_EQ(EGL_SUCCESS, eglGetError());