diff options
author | Adam Jackson <ajax@redhat.com> | 2013-07-16 09:58:14 -0400 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2013-07-16 10:01:36 -0400 |
commit | cf9ce6c2e876bf49e984117ea278f5eae00fb63a (patch) | |
tree | b26b2bc5244e9f9a7ffc63a4a15d546809c4709c | |
parent | 54cff7c9914a9006201a5831c4f2229437158bcd (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.ac | 1 | ||||
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/glamor_egl.c | 29 | ||||
-rw-r--r-- | src/glamor_utils.h | 15 | ||||
-rw-r--r-- | src/glapi.h | 121 |
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 |