Okay here is a proposed patch against mesa which routes around TTM.

This leave me with the hope of creating a libdrm 2.3.1 which just
updates the APIs for all the other drivers, and still have mesa work.

This patch requires you to pass --enable-ttm-api to the mesa configure
if you need to use TTM APIs.

I think the X server might also need something similiar around dri2.

Dave.
From b85269252bb38769fcdd58dbcafb2c015f60f7d4 Mon Sep 17 00:00:00 2001
From: Dave Airlie <[EMAIL PROTECTED]>
Date: Wed, 28 May 2008 15:55:44 +1000
Subject: [PATCH] mesa/drm/ttm: allow build against non-TTM aware libdrm

I'll release a libdrm 2.3.1 without TTM apis included from a special
drm branch that should allow mesa 7.1 to build against it.

I've had to turn off DRI2 stuff.
---
 configure.ac                                  |   18 ++++++++++++
 src/mesa/drivers/dri/common/dri_bufmgr.h      |   38 +++++++++++++++++++++++++
 src/mesa/drivers/dri/common/dri_util.c        |    6 ++++
 src/mesa/drivers/dri/common/dri_util.h        |    3 +-
 src/mesa/drivers/dri/intel/intel_bufmgr_ttm.c |   20 +++++++++++++
 src/mesa/drivers/dri/intel/intel_bufmgr_ttm.h |    8 +++++
 src/mesa/drivers/dri/intel/intel_ioctl.c      |   10 ++++++
 7 files changed, 102 insertions(+), 1 deletions(-)

diff --git a/configure.ac b/configure.ac
index a250f75..a73c754 100644
--- a/configure.ac
+++ b/configure.ac
@@ -478,6 +478,19 @@ AC_ARG_ENABLE([driglx-direct],
         [enable direct rendering in GLX for DRI @<:@default=enabled@:>@])],
     [driglx_direct="$enableval"],
     [driglx_direct="yes"])
+dnl ttm support
+AC_ARG_ENABLE([ttm-api],
+    [AS_HELP_STRING([--enable-ttm-api],
+	[enable TTM API users])],
+    [ttmapi="$enableval"],
+    [ttmapi="no"])
+
+if test "x$ttmapi" = "xyes"; then
+    save_CFLAGS=$CFLAGS
+    CFLAGS=$LIBDRM_CFLAGS
+    AC_CHECK_HEADERS([xf86mm.h],[],[AC_MSG_ERROR([xf86mm.h required for TTM.])],[#include "stdint.h"\n#include "drm.h"])
+    CFLAGS=$save_CFLAGS
+fi
 
 dnl Which drivers to build - default is chosen by platform
 AC_ARG_WITH([dri-drivers],
@@ -516,6 +529,10 @@ if test "$mesa_driver" = dri; then
         DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
     fi
 
+    if test "x$ttmapi" = xyes; then
+        DEFINES="$DEFINES -DTTM_API"
+    fi
+
     if test "x$USING_EGL" = x1; then
         PROGRAM_DIRS="egl"
     fi
@@ -934,6 +951,7 @@ if test "$mesa_driver" = dri; then
     dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
     echo "        DRI drivers:     $dri_dirs"
     echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
+    echo "        TTM API support: $ttmapi"
 fi
 
 dnl Libraries
diff --git a/src/mesa/drivers/dri/common/dri_bufmgr.h b/src/mesa/drivers/dri/common/dri_bufmgr.h
index 4593eaf..0a726dc 100644
--- a/src/mesa/drivers/dri/common/dri_bufmgr.h
+++ b/src/mesa/drivers/dri/common/dri_bufmgr.h
@@ -219,4 +219,42 @@ void dri_post_process_relocs(dri_bo *batch_buf);
 void dri_post_submit(dri_bo *batch_buf, dri_fence **last_fence);
 int dri_bufmgr_check_aperture_space(dri_bo *bo);
 
+#ifndef TTM_API
+/* reuse some TTM API */
+
+#define DRM_BO_MEM_LOCAL 0
+#define DRM_BO_MEM_TT 1
+#define DRM_BO_MEM_VRAM 2
+#define DRM_BO_MEM_PRIV0 3
+#define DRM_BO_MEM_PRIV1 4
+#define DRM_BO_MEM_PRIV2 5
+#define DRM_BO_MEM_PRIV3 6
+#define DRM_BO_MEM_PRIV4 7
+
+#define DRM_BO_FLAG_READ        (1ULL << 0)
+#define DRM_BO_FLAG_WRITE       (1ULL << 1)
+#define DRM_BO_FLAG_EXE         (1ULL << 2)
+#define DRM_BO_MASK_ACCESS	(DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE)
+#define DRM_BO_FLAG_NO_EVICT    (1ULL << 4)
+
+#define DRM_BO_FLAG_MAPPABLE    (1ULL << 5)
+#define DRM_BO_FLAG_SHAREABLE   (1ULL << 6)
+
+#define DRM_BO_FLAG_CACHED      (1ULL << 7)
+
+#define DRM_BO_FLAG_NO_MOVE     (1ULL << 8)
+#define DRM_BO_FLAG_CACHED_MAPPED    (1ULL << 19)
+#define DRM_BO_FLAG_FORCE_CACHING  (1ULL << 13)
+#define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14)
+#define DRM_BO_FLAG_TILE           (1ULL << 15)
+
+#define DRM_BO_FLAG_MEM_LOCAL  (1ULL << 24)
+#define DRM_BO_FLAG_MEM_TT     (1ULL << 25)
+#define DRM_BO_FLAG_MEM_VRAM   (1ULL << 26)
+
+#define DRM_BO_MASK_MEM         0x00000000FF000000ULL
+
+#define DRM_FENCE_TYPE_EXE                 0x00000001
+#endif
+
 #endif
diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 5870208..6cae1eb 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -771,8 +771,10 @@ static void driDestroyScreen(__DRIscreen *psp)
 	    (*psp->DriverAPI.DestroyScreen)(psp);
 
 	if (psp->dri2.enabled) {
+#ifdef TTM_API
 	    drmBOUnmap(psp->fd, &psp->dri2.sareaBO);
 	    drmBOUnreference(psp->fd, &psp->dri2.sareaBO);
+#endif
 	} else {
 	   (void)drmUnmap((drmAddress)psp->pSAREA, SAREA_MAX);
 	   (void)drmUnmap((drmAddress)psp->pFB, psp->fbSize);
@@ -904,6 +906,7 @@ dri2CreateNewScreen(int scrn, int fd, unsigned int sarea_handle,
 		    const __DRIextension **extensions,
 		    const __DRIconfig ***driver_configs, void *data)
 {
+#ifdef TTM_API
     static const __DRIextension *emptyExtensionList[] = { NULL };
     __DRIscreen *psp;
     unsigned int *p;
@@ -971,6 +974,9 @@ dri2CreateNewScreen(int scrn, int fd, unsigned int sarea_handle,
     psp->DriverAPI = driDriverAPI;
 
     return psp;
+#else
+    return NULL;
+#endif
 }
 
 static const __DRIextension **driGetExtensions(__DRIscreen *psp)
diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
index 8e1cdfc..203479e 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -53,7 +53,6 @@
 #include <drm.h>
 #include <drm_sarea.h>
 #include <xf86drm.h>
-#include <xf86mm.h>
 #include "GL/internal/glcore.h"
 #include "GL/internal/dri_interface.h"
 #include "GL/internal/dri_sarea.h"
@@ -524,7 +523,9 @@ struct __DRIscreenRec {
 	/* Flag to indicate that this is a DRI2 screen.  Many of the above
 	 * fields will not be valid or initializaed in that case. */
 	int enabled;
+#ifdef TTM_API
 	drmBO sareaBO;
+#endif
 	void *sarea;
 	__DRIEventBuffer *buffer;
 	__DRILock *lock;
diff --git a/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.c b/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.c
index 545913f..194814e 100644
--- a/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.c
+++ b/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.c
@@ -50,6 +50,7 @@
 #include "i915_drm.h"
 
 #include "intel_bufmgr_ttm.h"
+#ifdef TTM_API
 
 #define DBG(...) do {					\
    if (bufmgr_ttm->bufmgr.debug)			\
@@ -1099,4 +1100,23 @@ intel_bufmgr_ttm_init(int fd, unsigned int fence_type,
 
     return &bufmgr_ttm->bufmgr;
 }
+#else
+dri_bufmgr *
+intel_bufmgr_ttm_init(int fd, unsigned int fence_type,
+		      unsigned int fence_type_flush, int batch_size)
+{
+    return NULL;
+}
+
+dri_bo *
+intel_ttm_bo_create_from_handle(dri_bufmgr *bufmgr, const char *name,
+			      unsigned int handle)
+{
+    return NULL;
+}
 
+void
+intel_ttm_enable_bo_reuse(dri_bufmgr *bufmgr)
+{
+}
+#endif
diff --git a/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.h b/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.h
index d267a16..f5bd64c 100644
--- a/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.h
+++ b/src/mesa/drivers/dri/intel/intel_bufmgr_ttm.h
@@ -7,8 +7,10 @@
 extern dri_bo *intel_ttm_bo_create_from_handle(dri_bufmgr *bufmgr, const char *name,
 					       unsigned int handle);
 
+#ifdef TTM_API
 dri_fence *intel_ttm_fence_create_from_arg(dri_bufmgr *bufmgr, const char *name,
 					   drm_fence_arg_t *arg);
+#endif
 
 
 dri_bufmgr *intel_bufmgr_ttm_init(int fd, unsigned int fence_type,
@@ -17,4 +19,10 @@ dri_bufmgr *intel_bufmgr_ttm_init(int fd, unsigned int fence_type,
 void
 intel_ttm_enable_bo_reuse(dri_bufmgr *bufmgr);
 
+#ifndef TTM_API
+#define DRM_I915_FENCE_CLASS_ACCEL 0
+#define DRM_I915_FENCE_TYPE_RW 2
+#define DRM_I915_FENCE_FLAG_FLUSHED 0x01000000
+#endif
+
 #endif
diff --git a/src/mesa/drivers/dri/intel/intel_ioctl.c b/src/mesa/drivers/dri/intel/intel_ioctl.c
index 66e3610..f4566ba 100644
--- a/src/mesa/drivers/dri/intel/intel_ioctl.c
+++ b/src/mesa/drivers/dri/intel/intel_ioctl.c
@@ -147,6 +147,7 @@ intel_batch_ioctl(struct intel_context *intel,
    }
 }
 
+#ifdef TTM_API
 void
 intel_exec_ioctl(struct intel_context *intel,
 		 GLuint used,
@@ -211,3 +212,12 @@ intel_exec_ioctl(struct intel_context *intel,
    }
    *fence = fo;
 }
+#else
+void
+intel_exec_ioctl(struct intel_context *intel,
+		 GLuint used,
+		 GLboolean ignore_cliprects, GLboolean allow_unlock,
+		 void *start, GLuint count, dri_fence **fence)
+{
+}
+#endif
-- 
1.5.4.1

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to