Added autoconf bits to allow using DRI as the driver through the option
--with-dri-driver=DRIVER. The options are x11 (default) and dri. Three
DRI specific options for controlling the driver directory, direct
rendering and TLS are also added.

The DRI will probably not work for platforms besides linux and freebsd.
---
 configs/autoconf.in |   17 +++++
 configure.ac        |  190 ++++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 191 insertions(+), 16 deletions(-)

diff --git a/configs/autoconf.in b/configs/autoconf.in
index 99f7b89..8cb1ba7 100644
--- a/configs/autoconf.in
+++ b/configs/autoconf.in
@@ -63,6 +63,11 @@ DRIVER_DIRS = @DRIVER_DIRS@
 # Which subdirs under $(TOP)/progs/ to enter:
 PROGRAM_DIRS = @PROGRAM_DIRS@
 
+# Driver specific build vars
+DRI_DIRS = @DRI_DIRS@
+WINDOW_SYSTEM = @WINDOW_SYSTEM@
+USING_EGL = @USING_EGL@
+
 # Dependencies
 X11_INCLUDES = @X11_INCLUDES@
 
@@ -78,6 +83,12 @@ GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \
        $(EXTRA_LIB_PATH) @GLW_LIB_DEPS@
 APP_LIB_DEPS = $(EXTRA_LIB_PATH) @APP_LIB_DEPS@
 
+# DRI dependencies
+DRI_LIB_DEPS = $(EXTRA_LIB_PATH) @DRI_LIB_DEPS@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIB = @LIBDRM_LIBS@
+EXPAT_INCLUDES = @EXPAT_INCLUDES@
+
 # Autoconf directories
 prefix = @prefix@
 exec_prefix = @exec_prefix@
@@ -85,3 +96,9 @@ libdir = @libdir@
 
 # Installation directories (for make install)
 INSTALL_DIR = $(prefix)
+
+# DRI installation directories
+DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@
+
+# Where libGL will look for DRI hardware drivers
+DRI_DRIVER_SEARCH_DIR = $(DRI_DRIVER_INSTALL_DIR)
diff --git a/configure.ac b/configure.ac
index 5563fa2..6c96038 100644
--- a/configure.ac
+++ b/configure.ac
@@ -87,14 +87,44 @@ AC_SUBST(GLW_LIB_NAME)
 AC_SUBST(OSMESA_LIB_NAME)
 
 dnl
-dnl Build directories for xlib driver
+dnl Driver configuration. Options are x11 (Xlib) and dri right now.
+dnl More later: osmesa, directfb, fbdev, ...
+dnl
+AC_ARG_WITH(driver,
+    [AS_HELP_STRING([--with-driver=DRIVER],
+        [driver for Mesa: x11,dri @<:@default=x11@:>@])],
+    mesa_driver="$withval",
+    mesa_driver="x11")
+dnl Check for valid option
+case "x$mesa_driver" in
+xx11|xdri)
+    ;;
+*)
+    AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
+    ;;
+esac
+
+dnl
+dnl Driver specific build directories
 dnl
 SRC_DIRS="mesa"
-DRIVER_DIRS="x11 osmesa"
 GLU_DIRS="sgi"
+DRI_DIRS=""
+WINDOW_SYSTEM=""
+case "$mesa_driver" in
+x11)
+    DRIVER_DIRS="x11"
+    ;;
+dri)
+    SRC_DIRS="glx/x11 $SRC_DIRS"
+    DRIVER_DIRS="dri"
+    WINDOW_SYSTEM="dri"
+    ;;
+esac
 AC_SUBST(SRC_DIRS)
 AC_SUBST(GLU_DIRS)
 AC_SUBST(DRIVER_DIRS)
+AC_SUBST(WINDOW_SYSTEM)
 
 dnl
 dnl Find out if X is available. The variables have_x or no_x will be
@@ -119,23 +149,50 @@ if test "$x11_pkgconfig" = no; then
     AC_PATH_XTRA
 fi
 
+dnl We need X for xlib and dri, so bomb now if it's not found
+case "$mesa_driver" in
+x11|dri)
+    if test "$no_x" = yes; then
+        AC_MSG_ERROR([X11 development libraries needed for $mesa_driver 
driver])
+    fi
+    ;;
+esac
+
 dnl
-dnl libGL for xlib driver
+dnl libGL configuration per driver
 dnl
-if test "$no_x" = yes; then
-    AC_MSG_ERROR([X11 development libraries needed for Xlib driver])
-fi
+case "$mesa_driver" in
+x11)
+    if test "$x11_pkgconfig" = yes; then
+        PKG_CHECK_MODULES(X11GL, x11 xext)
+        X11_INCLUDES="$X11_INCLUDES $X11GL_CFLAGS"
+        GL_LIB_DEPS="$X11GL_LIBS"
+    else
+        # should check these...
+        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
+        GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
+    fi
+    GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
+    ;;
+dri)
+    # Check for libdrm
+    PKG_CHECK_MODULES(LIBDRM, libdrm)
 
-if test "$x11_pkgconfig" = yes; then
-PKG_CHECK_MODULES(X11GL, x11 xext)
-    X11_INCLUDES="$X11_INCLUDES $X11GL_CFLAGS"
-    GL_LIB_DEPS="$X11GL_LIBS"
-else
-    # should check these...
-    X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
-    GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
-fi
-GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
+    # find the DRI deps for libGL
+    if test "$x11_pkgconfig" = yes; then
+        PKG_CHECK_MODULES(DRIGL, x11 xext xxf86vm xdamage xfixes)
+        X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
+        GL_LIB_DEPS="$DRIGL_LIBS"
+    else
+        # should check these...
+        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
+        GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
+    fi
+
+    # need DRM libs, -lpthread, etc.
+    GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread -ldl"
+    ;;
+esac
 AC_SUBST(GL_LIB_DEPS)
 
 dnl
@@ -146,8 +203,109 @@ if test "$mesa_driver" = x11; then
 fi
 
 dnl
+dnl More DRI setup
+dnl
+AC_ARG_ENABLE(glx-tls,
+    [AS_HELP_STRING([--enable-glx-tls],
+        [enable TLS support in GLX @<:@default=no@:>@])],
+        GLX_USE_TLS="$enableval",
+        GLX_USE_TLS=no)
+dnl Directory for DRI drivers
+AC_ARG_WITH(dridriverdir,
+    [AS_HELP_STRING([--with-dridriverdir=DIR],
+        [directory for the DRI drivers @<:@/usr/X11R6/lib/modules/dri@:>@])],
+    DRI_DRIVER_INSTALL_DIR="$withval",
+    DRI_DRIVER_INSTALL_DIR='/usr/X11R6/lib/modules/dri')
+AC_SUBST(DRI_DRIVER_INSTALL_DIR)
+dnl Direct rendering or just indirect rendering
+AC_ARG_ENABLE(driglx-direct,
+    [AS_HELP_STRING([--enable-driglx-direct],
+        [enable direct rendering in GLX for DRI @<:@default=yes@:>@])],
+        driglx_direct="$enableval",
+        driglx_direct="yes")
+
+dnl Just default to no EGL for now
+USING_EGL=0
+AC_SUBST(USING_EGL)
+
+dnl Set DRI_DIRS, DEFINES and LIB_DEPS
+if test "$mesa_driver" = dri; then
+    # Use TLS in GLX?
+    if test "x$GLX_USE_TLS" = xyes; then
+        DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
+    fi
+
+    if test "x$USING_EGL" = x1; then
+        PROGRAM_DIRS="egl"
+    fi
+
+    # Platform specific settings and drivers to build
+    case "$host_os" in
+    linux*)
+        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
+        if test "x$driglx_direct" = xyes; then
+            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
+        fi
+
+        case "$host_cpu" in
+        i*86)
+            DRI_DIRS="i810 i915tex i915 i965 mach64 mga r128 r200 r300 \
+                radeon s3v savage sis tdfx trident unichrome ffb"
+            ;;
+        x86_64)
+            DRI_DIRS="i915tex i915 i965 mach64 mga r128 r200 radeon tdfx \
+                unichrome savage r300"
+            ;;
+        powerpc*)
+            DRI_DIRS="mach64 r128 r200 r300 radeon tdfx"
+            ;;
+        esac
+        ;;
+    freebsd*)
+        DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
+        DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
+        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
+        if test "x$driglx_direct" = xyes; then
+            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
+        fi
+        if test "x$GXX" = xyes; then
+            CXXFLAGS="$CXXFLAGS -ansi -pedantic"
+        fi
+
+        DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 radeon tdfx \
+            unichrome savage sis"
+        ;;
+    esac
+    DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
+
+    # Check for expat
+    EXPAT_INCLUDES=""
+    EXPAT_LIB=-lexpat
+    AC_ARG_WITH(expat, AS_HELP_STRING([--with-expat=DIR],
+            [expat install directory]),[
+        EXPAT_INCLUDES="-I$withval/include"
+        CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
+        LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
+        EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
+        ])
+    AC_CHECK_HEADER(expat.h,,AC_MSG_ERROR([Expat required for DRI.]))
+    AC_CHECK_LIB(expat, XML_ParserCreate,,
+        AC_MSG_ERROR([Expat required for DRI.]))
+
+    # put all the necessary libs together
+    DRI_LIB_DEPS="$LIBDRM_LIBS $EXPAT_LIB -lm -lpthread -ldl"
+fi
+AC_SUBST(DRI_DIRS)
+AC_SUBST(EXPAT_INCLUDES)
+AC_SUBST(DRI_LIB_DEPS)
+
+dnl
 dnl OSMesa configuration
 dnl
+if test "$mesa_driver" = x11; then
+    DRIVER_DIRS="$DRIVER_DIRS osmesa"
+fi
 OSMESA_LIB_DEPS=""
 OSMESA_MESA_DEPS='-l$(GL_LIB)'
 AC_SUBST(OSMESA_LIB_DEPS)
-- 
1.5.3.2


-------------------------------------------------------------------------
SF.Net email is sponsored by: 
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to