summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2013-07-16 09:58:14 -0400
committerAdam Jackson <ajax@redhat.com>2013-07-16 10:01:36 -0400
commitcf9ce6c2e876bf49e984117ea278f5eae00fb63a (patch)
treeb26b2bc5244e9f9a7ffc63a4a15d546809c4709c
parent54cff7c9914a9006201a5831c4f2229437158bcd (diff)
xserver 1.15 compatibility
In the 1.15 GLX rewrite, the server is now just another EGL client, and no longer directly loads DRI drivers. As a result we need to delete the code that directly mucks with the DRI dispatch table, and instead always do the equivalent thing in terms of eglMakeCurrent. Since the convention elsewhere in xserver/glx is now to set the EGL context right when you need it, we don't explicitly unbind in glamor_egl_restore_context. Signed-off-by: Adam Jackson <ajax@redhat.com>
-rw-r--r--configure.ac1
-rw-r--r--src/Makefile.am3
-rw-r--r--src/glamor_egl.c29
-rw-r--r--src/glamor_utils.h15
-rw-r--r--src/glapi.h121
5 files changed, 4 insertions, 165 deletions
diff --git a/configure.ac b/configure.ac
index 5ff6ae1..ba40dfe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,7 +123,6 @@ if test "x$EGL = xyes"; then
PKG_CHECK_MODULES(GBM, $LIBGBM, [GBM=yes], [GBM=no])
if test "x$GBM" = xyes; then
AC_DEFINE(GLAMOR_HAS_GBM, 1, [Use GBM.])
- AC_DEFINE(GLX_USE_SHARED_DISPATCH, 1, [GLX and GLAMOR share the glapi dispatch table.])
fi
fi
diff --git a/src/Makefile.am b/src/Makefile.am
index 4beb559..272184d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -54,8 +54,7 @@ libglamor_la_SOURCES = \
glamor_fbo.c\
glamor_compositerects.c\
glamor_utils.h\
- glamor.h\
- glapi.h
+ glamor.h
sdk_HEADERS = glamor.h
diff --git a/src/glamor_egl.c b/src/glamor_egl.c
index 35c1219..5b25b2e 100644
--- a/src/glamor_egl.c
+++ b/src/glamor_egl.c
@@ -61,9 +61,6 @@
#include "glamor.h"
#include "compat-api.h"
#include "glamor_gl_dispatch.h"
-#ifdef GLX_USE_SHARED_DISPATCH
-#include "glapi.h"
-#endif
static const char glamor_name[] = "glamor";
@@ -92,8 +89,6 @@ struct glamor_egl_screen_private {
struct gbm_device *gbm;
#endif
int has_gem;
- void *glamor_context;
- void *current_context;
int gl_context_depth;
PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr;
@@ -112,7 +107,7 @@ glamor_egl_get_screen_private(ScrnInfoPtr scrn)
return (struct glamor_egl_screen_private *)
scrn->privates[xf86GlamorEGLPrivateIndex].ptr;
}
-#ifdef GLX_USE_SHARED_DISPATCH
+
_X_EXPORT void
glamor_egl_make_current(ScreenPtr screen)
{
@@ -123,9 +118,7 @@ glamor_egl_make_current(ScreenPtr screen)
if (glamor_egl->gl_context_depth++)
return;
- GET_CURRENT_CONTEXT(glamor_egl->current_context);
-
- if (glamor_egl->glamor_context != glamor_egl->current_context) {
+ if (glamor_egl->context != eglGetCurrentContext()) {
eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE,
EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (!eglMakeCurrent(glamor_egl->display,
@@ -143,17 +136,8 @@ glamor_egl_restore_context(ScreenPtr screen)
struct glamor_egl_screen_private *glamor_egl =
glamor_egl_get_screen_private(scrn);
- if (--glamor_egl->gl_context_depth)
- return;
-
- if (glamor_egl->current_context &&
- glamor_egl->glamor_context != glamor_egl->current_context)
- SET_CURRENT_CONTEXT(glamor_egl->current_context);
+ --glamor_egl->gl_context_depth;
}
-#else
-#define glamor_egl_make_current(x)
-#define glamor_egl_restore_context(s)
-#endif
static EGLImageKHR
_glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl,
@@ -556,17 +540,10 @@ glamor_egl_init(void *_scrn, int fd)
"Failed to make EGL context current\n");
return FALSE;
}
-#ifdef GLX_USE_SHARED_DISPATCH
- GET_CURRENT_CONTEXT(glamor_egl->glamor_context);
-#endif
glamor_egl->saved_free_screen = scrn->FreeScreen;
scrn->FreeScreen = glamor_egl_free_screen;
#ifdef GLAMOR_GLES2
xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n");
-#ifdef GLX_USE_SHARED_DISPATCH
- xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Glamor is using GLES2 but GLX needs GL. "
- "Indirect GLX may not work correctly.\n");
-#endif
#endif
return TRUE;
}
diff --git a/src/glamor_utils.h b/src/glamor_utils.h
index d307838..263e3ba 100644
--- a/src/glamor_utils.h
+++ b/src/glamor_utils.h
@@ -1801,7 +1801,6 @@ static inline void glamor_restore_current(ScreenPtr screen)
glamor_egl_restore_context(screen);
}
-#ifdef GLX_USE_SHARED_DISPATCH
static inline glamor_gl_dispatch *
glamor_get_dispatch(glamor_screen_private *glamor_priv)
{
@@ -1817,19 +1816,5 @@ glamor_put_dispatch(glamor_screen_private *glamor_priv)
if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN)
glamor_restore_current(glamor_priv->screen);
}
-#else
-#warning "Indirect GLX may be broken, need to implement context switch."
-static inline glamor_gl_dispatch *
-glamor_get_dispatch(glamor_screen_private *glamor_priv)
-{
- return &glamor_priv->_dispatch;
-}
-
-static inline void
-glamor_put_dispatch(glamor_screen_private *glamor_priv)
-{
-}
-
-#endif
#endif
diff --git a/src/glapi.h b/src/glapi.h
deleted file mode 100644
index d510dac..0000000
--- a/src/glapi.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * \mainpage Mesa GL API Module
- *
- * \section GLAPIIntroduction Introduction
- *
- * The Mesa GL API module is responsible for dispatching all the
- * gl*() functions. All GL functions are dispatched by jumping through
- * the current dispatch table (basically a struct full of function
- * pointers.)
- *
- * A per-thread current dispatch table and per-thread current context
- * pointer are managed by this module too.
- *
- * This module is intended to be non-Mesa-specific so it can be used
- * with the X/DRI libGL also.
- */
-
-#ifndef _GLAPI_H
-#define _GLAPI_H
-
-#define GL_GLEXT_PROTOTYPES
-
-#if GLAMOR_GLES2
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#else
-#include <GL/gl.h>
-#include "GL/glext.h"
-#endif
-
-/* Is this needed? It is incomplete anyway. */
-#ifdef USE_MGL_NAMESPACE
-#define _glapi_set_dispatch _mglapi_set_dispatch
-#define _glapi_get_dispatch _mglapi_get_dispatch
-#define _glapi_set_context _mglapi_set_context
-#define _glapi_get_context _mglapi_get_context
-#define _glapi_Dispatch _mglapi_Dispatch
-#define _glapi_Context _mglapi_Context
-#endif
-
-typedef void (*_glapi_proc)(void);
-struct _glapi_table;
-
-
-#if defined (GLX_USE_TLS)
-
-extern __thread struct _glapi_table * _glapi_tls_Dispatch
- __attribute__((tls_model("initial-exec")));
-
-extern __thread void * _glapi_tls_Context
- __attribute__((tls_model("initial-exec")));
-
-extern const struct _glapi_table *_glapi_Dispatch;
-extern const void *_glapi_Context;
-
-# define GET_DISPATCH() _glapi_tls_Dispatch
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_tls_Context
-# define SET_CURRENT_CONTEXT(C) _glapi_tls_Context = (void*)C
-
-#else
-
-extern struct _glapi_table *_glapi_Dispatch;
-extern void *_glapi_Context;
-
-# ifdef THREADS
-
-# define GET_DISPATCH() \
- (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
-
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) \
- (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
-
-
-# define SET_CURRENT_CONTEXT(C) do { if (likely(_glapi_Context)) \
- _glapi_Context = (void*)C; \
- else \
- _glapi_set_context(C); } while(0)
-
-# else
-
-# define GET_DISPATCH() _glapi_Dispatch
-# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_Context
-# define SET_CURRENT_CONTEXT(C) _glapi_Context = (void*)C
-
-# endif
-
-#endif /* defined (GLX_USE_TLS) */
-
-
-extern void
-_glapi_set_context(void *context);
-
-extern void *
-_glapi_get_context(void);
-
-#endif