[PATCH 07/12] glamor: Use lastGLContext to coordinate the context with GLX.

Eric Anholt eric at anholt.net
Fri Apr 18 11:40:05 PDT 2014


This gets us some more context changes that are needed to make sure
the two sides render to the right drawables and manipulate the right
objects.

Signed-off-by: Eric Anholt <eric at anholt.net>
---
 glamor/glamor_egl.c   | 14 ++++++--------
 glamor/glamor_glx.c   |  6 ------
 glamor/glamor_utils.h |  5 ++++-
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c
index 9b6b323..33a95a0 100644
--- a/glamor/glamor_egl.c
+++ b/glamor/glamor_egl.c
@@ -100,14 +100,12 @@ glamor_egl_get_context(struct glamor_context *glamor_ctx)
     if (glamor_ctx->get_count++)
         return;
 
-    if (glamor_ctx->ctx != eglGetCurrentContext()) {
-        eglMakeCurrent(glamor_ctx->display, EGL_NO_SURFACE,
-                       EGL_NO_SURFACE, EGL_NO_CONTEXT);
-        if (!eglMakeCurrent(glamor_ctx->display,
-                            EGL_NO_SURFACE, EGL_NO_SURFACE,
-                            glamor_ctx->ctx)) {
-            FatalError("Failed to make EGL context current\n");
-        }
+    eglMakeCurrent(glamor_ctx->display, EGL_NO_SURFACE,
+                   EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    if (!eglMakeCurrent(glamor_ctx->display,
+                        EGL_NO_SURFACE, EGL_NO_SURFACE,
+                        glamor_ctx->ctx)) {
+        FatalError("Failed to make EGL context current\n");
     }
 }
 
diff --git a/glamor/glamor_glx.c b/glamor/glamor_glx.c
index 8f47c3d..d56581c 100644
--- a/glamor/glamor_glx.c
+++ b/glamor/glamor_glx.c
@@ -36,15 +36,9 @@
 static void
 glamor_glx_get_context(struct glamor_context *glamor_ctx)
 {
-    GLXContext old_ctx;
-
     if (glamor_ctx->get_count++)
         return;
 
-    old_ctx = glXGetCurrentContext();
-    if (old_ctx == glamor_ctx->ctx)
-        return;
-
     glXMakeCurrent(glamor_ctx->display, glamor_ctx->drawable_xid,
                    glamor_ctx->ctx);
 }
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 53b7d9b..56ef6a9 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -1501,7 +1501,10 @@ __fls(unsigned long x)
 static inline void
 glamor_get_context(glamor_screen_private * glamor_priv)
 {
-    glamor_priv->ctx.get_context(&glamor_priv->ctx);
+    if (lastGLContext != &glamor_priv->ctx) {
+        lastGLContext = &glamor_priv->ctx;
+        glamor_priv->ctx.get_context(&glamor_priv->ctx);
+    }
 }
 
 static inline void
-- 
1.9.2



More information about the xorg-devel mailing list