[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