summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2012-01-03 11:35:59 -0800
committerIan Romanick <[email protected]>2012-01-04 12:43:10 -0800
commit4becf676e0b09b421821b6895251549ec98d4e5d (patch)
tree894ffe597aa356454ea45376726f8b43854c99c3
parentc2e537fef26be6f9995f99e04015d0c1ac9ed5ae (diff)
glx: More hacking around versions of XCB that lack GLX_ARB_create_context support
Detect whether a new enough version of XCB is installed at configure time. If it is not, don't enable the extension and don't build the unit tests. v2: Move the AM_CONDIATION outside the case-statement so that it is invoked even for non-GLX builds. This prevents build failures with osmesa, for example. Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Tested-by: Robert Hooker <[email protected]>
-rw-r--r--configure.ac22
-rw-r--r--src/glx/clientinfo.c5
-rw-r--r--src/glx/create_context.c2
-rw-r--r--src/glx/glxextensions.c4
-rw-r--r--tests/glx/Makefile.am4
5 files changed, 32 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 2d31273b9d8..dfffdf933ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1030,12 +1030,34 @@ xyesno)
GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
fi
+ # Check to see if the xcb-glx library is new enough to support
+ # GLX_ARB_create_context. This bit of hackery is necessary until XCB 1.8
+ # is released.
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS $X11_INCLUDES"
+ LDFLAGS="$LDFLAGS $GL_LIB_DEPS"
+ AC_CHECK_LIB(xcb-glx, xcb_glx_create_context_attribs_arb_checked,
+ [HAVE_XCB_GLX_CREATE_CONTEXT=yes],
+ [HAVE_XCB_GLX_CREATE_CONTEXT=no])
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+
+ if test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes; then
+ X11_INCLUDES="$X11_INCLUDES -DHAVE_XCB_GLX_CREATE_CONTEXT"
+ fi
+
# need DRM libs, -lpthread, etc.
GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
;;
esac
+# This is outside the case (above) so that it is invoked even for non-GLX
+# builds.
+AM_CONDITIONAL(HAVE_XCB_GLX_CREATE_CONTEXT,
+ test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes)
+
GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
diff --git a/src/glx/clientinfo.c b/src/glx/clientinfo.c
index 429e9a3bfa7..461030fce88 100644
--- a/src/glx/clientinfo.c
+++ b/src/glx/clientinfo.c
@@ -123,6 +123,7 @@ __glX_send_client_info(struct glx_display *glx_dpy)
* THE ORDER IS IMPORTANT. We want to send the most recent version of the
* protocol that the server can support.
*/
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
if (glx_dpy->majorVersion == 1 && glx_dpy->minorVersion == 4
&& any_screen_has_ARB_create_context_profile) {
xcb_glx_set_client_info_2arb(c,
@@ -145,7 +146,9 @@ __glX_send_client_info(struct glx_display *glx_dpy)
gl_versions,
gl_extension_string,
glx_extensions);
- } else {
+ } else
+#endif
+ {
xcb_glx_client_info(c,
GLX_MAJOR_VERSION, GLX_MINOR_VERSION,
gl_extension_length,
diff --git a/src/glx/create_context.c b/src/glx/create_context.c
index 11f9340a2e8..714f0e59271 100644
--- a/src/glx/create_context.c
+++ b/src/glx/create_context.c
@@ -94,7 +94,7 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
* the protocol error and handle it. Part of handling the error is freeing
* the possibly non-NULL value returned by this function.
*/
-#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
cookie =
xcb_glx_create_context_attribs_arb_checked(c,
gc->xid,
diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c
index 0fcd8a9e8b5..86dc7d03d13 100644
--- a/src/glx/glxextensions.c
+++ b/src/glx/glxextensions.c
@@ -71,7 +71,7 @@ struct extension_info
/* *INDENT-OFF* */
static const struct extension_info known_glx_extensions[] = {
-#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
{ GLX(ARB_create_context), VER(0,0), Y, N, N, N },
{ GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N },
#else
@@ -85,7 +85,7 @@ static const struct extension_info known_glx_extensions[] = {
{ GLX(EXT_visual_info), VER(0,0), Y, Y, N, N },
{ GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N },
{ GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N },
-#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
{ GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y },
#else
{ GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N },
diff --git a/tests/glx/Makefile.am b/tests/glx/Makefile.am
index 0b061176e1a..cdebf5d0cb1 100644
--- a/tests/glx/Makefile.am
+++ b/tests/glx/Makefile.am
@@ -4,6 +4,7 @@ AM_CXXFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi \
$(X11_CFLAGS) $(GTEST_CFLAGS)
if HAVE_GTEST
+if HAVE_XCB_GLX_CREATE_CONTEXT
TESTS = glx_unittest
check_PROGRAMS = glx_unittest
@@ -13,4 +14,5 @@ glx_unittest_SOURCES = \
fake_glx_screen.cpp
glx_unittest_LDADD = $(top_builddir)/src/glx/libglx.a $(GTEST_LIBS) -lgtest_main
-endif \ No newline at end of file
+endif
+endif