nouveau: Build the driver into the shared mesa_dri_drivers.so.
authorEric Anholt <eric@anholt.net>
Tue, 24 Sep 2013 17:24:07 +0000 (10:24 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 24 Oct 2013 21:13:08 +0000 (14:13 -0700)
v2: drop dridir now that it's unused.
v3: Consistently put spaces around += in the updated Makefile.am block.
v4: Set a global driverAPI variable so loaders don't have to update to
    createNewScreen2() (though they may want to for thread safety).
v5: Fix missed public symbol in nouveau. (caught by Emil)

Reviewed-by: Matt Turner <mattst88@gmail.com> (v2)
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
configure.ac
src/mesa/drivers/dri/Makefile.am
src/mesa/drivers/dri/nouveau/Makefile.am
src/mesa/drivers/dri/nouveau/nouveau_screen.c
src/mesa/drivers/dri/nouveau/nouveau_screen.h

index d47636d4dad93465ac00444aaef962b1258b2fc2..c352cf5a536ab094a05aab0214b0a7316e11efeb 100644 (file)
@@ -1039,7 +1039,7 @@ fi
 enable_dricore=no
 enable_megadriver=no
 for driver in $DRI_DIRS; do
-    if test $driver != "i965"; then
+    if test $driver != "i965" -a $driver != "nouveau"; then
         enable_dricore=yes
     else
         enable_megadriver=yes
index 7c5735668984acbf75d66557c688bc5a760d960a..d69bf38b535c8004f537b113577f80fabfdbbed0 100644 (file)
@@ -17,7 +17,9 @@ MEGADRIVERS += i965_dri.so
 endif
 
 if HAVE_NOUVEAU_DRI
-SUBDIRS+=nouveau
+SUBDIRS += nouveau
+MEGADRIVERS_DEPS += nouveau/libnouveau_dri.la
+MEGADRIVERS += nouveau_vieux_dri.so
 endif
 
 if HAVE_R200_DRI
index 7e6605f29c5e5b202a4312d40282d8d71832834a..377b9a24e054cf273d27d7b4a7806d5116f5ed5d 100644 (file)
@@ -33,20 +33,6 @@ AM_CFLAGS = \
        $(VISIBILITY_CFLAGS) \
        $(NOUVEAU_CFLAGS)
 
-dridir = $(DRI_DRIVER_INSTALL_DIR)
-dri_LTLIBRARIES = nouveau_vieux_dri.la
-
-nouveau_vieux_dri_la_SOURCES = \
-       $(NOUVEAU_C_FILES)
-
-nouveau_vieux_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
-nouveau_vieux_dri_la_LIBADD = \
-       ../common/libdricommon.la \
-       $(DRI_LIB_DEPS) \
-       $(NOUVEAU_LIBS)
-
-# Provide compatibility with scripts for the old Mesa build system for
-# a while by putting a link to the driver into /lib of the build tree.
-all-local: nouveau_vieux_dri.la
-       $(MKDIR_P) $(top_builddir)/$(LIB_DIR);
-       ln -f .libs/nouveau_vieux_dri.so $(top_builddir)/$(LIB_DIR)/nouveau_vieux_dri.so;
+noinst_LTLIBRARIES = libnouveau_dri.la
+libnouveau_dri_la_SOURCES = $(NOUVEAU_C_FILES)
+libnouveau_dri_la_LIBADD = $(NOUVEAU_LIBS)
index 6816406f539ed5a82d8055396affbb8c364ec676..4ab830e4dc319c4007a52feea7cf57f1fadeef59 100644 (file)
@@ -246,7 +246,7 @@ static const __DRIextension *nouveau_screen_extensions[] = {
     NULL
 };
 
-const struct __DriverAPIRec driDriverAPI = {
+const struct __DriverAPIRec nouveau_driver_api = {
        .InitScreen      = nouveau_init_screen2,
        .DestroyScreen   = nouveau_destroy_screen,
        .CreateBuffer    = nouveau_create_buffer,
@@ -257,9 +257,22 @@ const struct __DriverAPIRec driDriverAPI = {
        .UnbindContext   = nouveau_context_unbind,
 };
 
+static const struct __DRIDriverVtableExtensionRec nouveau_vtable = {
+   .base = { __DRI_DRIVER_VTABLE, 1 },
+   .vtable = &nouveau_driver_api,
+};
+
 /* This is the table of extensions that the loader will dlsym() for. */
-PUBLIC const __DRIextension *__driDriverExtensions[] = {
+static const __DRIextension *nouveau_driver_extensions[] = {
        &driCoreExtension.base,
        &driDRI2Extension.base,
+       &nouveau_vtable.base,
        NULL
 };
+
+PUBLIC const __DRIextension **__driDriverGetExtensions_nouveau_vieux(void)
+{
+   globalDriverAPI = &nouveau_driver_api;
+
+   return nouveau_driver_extensions;
+}
index bcf57e21f28bee942c45881710d8a9383d87ba1b..45b1ee928d6e1f41d70a24625f52e9309e908d8f 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef __NOUVEAU_SCREEN_H__
 #define __NOUVEAU_SCREEN_H__
 
+const __DRIextension **__driDriverGetExtensions_nouveau_vieux(void);
+
 struct nouveau_context;
 
 struct nouveau_screen {