[Mesa-dev] [PATCH] glx: conditionaly build dri3 and present loader (v2)

Armin K krejzi at email.com
Fri Nov 8 15:03:38 PST 2013


This patch makes it possible to disable DRI3 if desired.

v2:

Incorporated changes from Ian Rommnick and Aaron Watry
Unified libudev check and made libGL link to it only
when DRI3 was enabled.

Adding Brian Paul to CC since he asked if DRI3 stuff
can be put behind some sort of config option.

Tested with:

./configure --disable-dri3 --with-dri-drivers=i965 \
--with-gallium-drivers= --disable-vdpau --disable-egl \
--disable-gbm --disable-xvmc

CC: Ian Romanick <idr at freedesktop.org>
CC: Aaron Watry <awatry at gmail.com>
CC: Brian Paul <brianp at vmware.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71397
---
 configure.ac        | 44 ++++++++++++++++++++++++++++++++++----------
 src/glx/Makefile.am |  8 ++++++--
 src/glx/glxext.c    |  4 ++++
 3 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/configure.ac b/configure.ac
index 8fb5e0d..f756b73 100644
--- a/configure.ac
+++ b/configure.ac
@@ -536,6 +536,11 @@ AC_ARG_ENABLE([dri],
         [enable DRI modules @<:@default=enabled@:>@])],
     [enable_dri="$enableval"],
     [enable_dri=yes])
+AC_ARG_ENABLE([dri3],
+    [AS_HELP_STRING([--enable-dri3],
+        [enable DRI3 @<:@default=enabled@:>@])],
+    [enable_dri3="$enableval"],
+    [enable_dri3=yes])
 AC_ARG_ENABLE([glx],
     [AS_HELP_STRING([--enable-glx],
         [enable GLX library @<:@default=enabled@:>@])],
@@ -702,6 +707,7 @@ fi
 AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xyes -a \
                                   "x$enable_dri" = xyes)
 AM_CONDITIONAL(HAVE_DRI, test "x$enable_dri" = xyes)
+AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes)
 
 AC_ARG_ENABLE([shared-glapi],
     [AS_HELP_STRING([--enable-shared-glapi],
@@ -756,6 +762,9 @@ AC_SUBST([MESA_LLVM])
 PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
                   [have_libdrm=yes], [have_libdrm=no])
 
+PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED],
+                  have_libudev=yes, have_libudev=no)
+
 if test "x$enable_dri" = xyes; then
     # DRI must be shared, I think
     if test "$enable_static" = yes; then
@@ -811,13 +820,21 @@ xyesno)
         fi
         PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
-        PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
-        PKG_CHECK_MODULES([PRESENTPROTO], [presentproto >= $PRESENTPROTO_REQUIRED])
-        PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED])
+        if test x"$enable_dri3" = xyes; then
+            if test x"$have_libudev" != xyes; then
+              AC_MSG_ERROR([DRI3 requires libudev >= $LIBUDEV_REQUIRED])
+            fi
+            PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
+            PKG_CHECK_MODULES([PRESENTPROTO], [presentproto >= $PRESENTPROTO_REQUIRED])
+        fi
     fi
 
     # find the DRI deps for libGL
-    dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 1.8 xcb-dri3 xcb-present xcb-sync xshmfence"
+    dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 1.8"
+
+    if test x"$enable_dri3" = xyes; then
+        dri_modules="$dri_modules xcb-dri3 xcb-present xcb-sync xshmfence"
+    fi
 
     # add xf86vidmode if available
     PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
@@ -827,8 +844,13 @@ xyesno)
 
     PKG_CHECK_MODULES([DRIGL], [$dri_modules])
     GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
-    X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS $LIBUDEV_CFLAGS"
-    GL_LIB_DEPS="$DRIGL_LIBS $LIBUDEV_LIBS"
+    X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
+    GL_LIB_DEPS="$DRIGL_LIBS"
+
+    if test x"$enable_dri3$have_libudev" = xyesyes; then
+        X11_INCLUDES="$X11_INCLUDES $LIBUDEV_CFLAGS"
+        GL_LIB_DEPS="$GL_LIB_DEPS $LIBUDEV_LIBS"
+    fi
 
     # need DRM libs, $PTHREAD_LIBS, etc.
     GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
@@ -947,6 +969,9 @@ if test "x$enable_dri" = xyes; then
     linux*)
         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1"
         DEFINES="$DEFINES -DHAVE_ALIAS"
+        if test "x$enable_dri3" = xyes; then
+            DEFINES="$DEFINES -DHAVE_DRI3"
+        fi
 
         case "$host_cpu" in
         x86_64|amd64)
@@ -1142,8 +1167,9 @@ if test "x$enable_gbm" = xauto; then
     esac
 fi
 if test "x$enable_gbm" = xyes; then
-    PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
-                      AC_MSG_ERROR([gbm needs udev]))
+    if test x"$have_libudev" != xyes; then
+        AC_MSG_ERROR([gbm needs udev])
+    fi
 
     if test "x$enable_dri" = xyes; then
         GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
@@ -1170,8 +1196,6 @@ if test "x$enable_egl" = xyes; then
 
     if test "$enable_static" != yes; then
         # build egl_glx when libGL is built
-        PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
-                          [have_libudev=yes],[have_libudev=no])
         if test "$have_libudev" = yes; then
             DEFINES="$DEFINES -DHAVE_LIBUDEV"
         fi
diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am
index ae296b9..0aec2aa 100644
--- a/src/glx/Makefile.am
+++ b/src/glx/Makefile.am
@@ -94,10 +94,14 @@ libglx_la_SOURCES = \
 	  dri2_glx.c \
 	  dri2.c \
 	  dri2_query_renderer.c \
-          dri3_glx.c \
-          dri3_common.c \
 	  applegl_glx.c
 
+if HAVE_DRI3
+libglx_la_SOURCES += \
+          dri3_glx.c \
+          dri3_common.c
+endif
+
 GL_LIBS = \
 	libglx.la \
 	$(SHARED_GLAPI_LIBS) \
diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index c6e4d9f..2711e57 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -770,8 +770,10 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv)
    for (i = 0; i < screens; i++, psc++) {
       psc = NULL;
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
+#if defined(HAVE_DRI3)
       if (priv->dri3Display)
          psc = (*priv->dri3Display->createScreen) (i, priv);
+#endif
       if (psc == NULL && priv->dri2Display)
 	 psc = (*priv->dri2Display->createScreen) (i, priv);
       if (psc == NULL && priv->driDisplay)
@@ -865,8 +867,10 @@ __glXInitialize(Display * dpy)
     ** (e.g., those called in AllocAndFetchScreenConfigs).
     */
    if (glx_direct && glx_accel) {
+#if defined(HAVE_DRI3)
       if (!getenv("LIBGL_DRI3_DISABLE"))
          dpyPriv->dri3Display = dri3_create_display(dpy);
+#endif
       dpyPriv->dri2Display = dri2CreateDisplay(dpy);
       dpyPriv->driDisplay = driCreateDisplay(dpy);
    }
-- 
1.8.4.2



More information about the mesa-dev mailing list