From: Eric Anholt Date: Tue, 24 Sep 2013 17:24:07 +0000 (-0700) Subject: nouveau: Build the driver into the shared mesa_dri_drivers.so. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ead86e378fd4a8b19f7a3f185c751a41b2530b2f;p=mesa.git nouveau: Build the driver into the shared mesa_dri_drivers.so. 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 (v2) Reviewed-by: Emil Velikov --- diff --git a/configure.ac b/configure.ac index d47636d4dad..c352cf5a536 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/src/mesa/drivers/dri/Makefile.am b/src/mesa/drivers/dri/Makefile.am index 7c573566898..d69bf38b535 100644 --- a/src/mesa/drivers/dri/Makefile.am +++ b/src/mesa/drivers/dri/Makefile.am @@ -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 diff --git a/src/mesa/drivers/dri/nouveau/Makefile.am b/src/mesa/drivers/dri/nouveau/Makefile.am index 7e6605f29c5..377b9a24e05 100644 --- a/src/mesa/drivers/dri/nouveau/Makefile.am +++ b/src/mesa/drivers/dri/nouveau/Makefile.am @@ -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) diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c index 6816406f539..4ab830e4dc3 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c @@ -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; +} diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.h b/src/mesa/drivers/dri/nouveau/nouveau_screen.h index bcf57e21f28..45b1ee928d6 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_screen.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.h @@ -27,6 +27,8 @@ #ifndef __NOUVEAU_SCREEN_H__ #define __NOUVEAU_SCREEN_H__ +const __DRIextension **__driDriverGetExtensions_nouveau_vieux(void); + struct nouveau_context; struct nouveau_screen {