From 86d50c2f1567eebd193ac797a49c58c969646787 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 27 Sep 2013 16:32:40 -0700 Subject: [PATCH] radeon: Build the driver into the shared mesa_dri_drivers.so. This required some reordering of headers to ensure that the symbol name redefines happened before any prototypes. v2: drop dridir now that it's unused. v3: Consistently put spaces around += in the updated Makefile.am blocks. v4: Set a global driverAPI variable so loaders don't have to update to createNewScreen2() (though they may want to for thread safety). Reviewed-by: Matt Turner (v2) Reviewed-by: Emil Velikov --- configure.ac | 2 +- src/mesa/drivers/dri/Makefile.am | 8 +- src/mesa/drivers/dri/r200/Makefile.am | 20 +--- src/mesa/drivers/dri/radeon/Makefile.am | 20 +--- .../dri/radeon/radeon_buffer_objects.c | 3 +- .../dri/radeon/radeon_common_context.h | 2 +- src/mesa/drivers/dri/radeon/radeon_debug.c | 2 +- src/mesa/drivers/dri/radeon/radeon_fog.c | 1 + .../drivers/dri/radeon/radeon_pixel_read.c | 2 +- src/mesa/drivers/dri/radeon/radeon_screen.c | 26 ++++- src/mesa/drivers/dri/radeon/radeon_screen.h | 98 +++++++++++++++++++ src/mesa/drivers/dri/radeon/radeon_tile.c | 1 + 12 files changed, 141 insertions(+), 44 deletions(-) diff --git a/configure.ac b/configure.ac index 2fcfd68faa2..0ac3bf8e172 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" -a $driver != "nouveau" -a $driver != "i915"; then + if test $driver = "swrast"; 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 33268408668..57b2341fa07 100644 --- a/src/mesa/drivers/dri/Makefile.am +++ b/src/mesa/drivers/dri/Makefile.am @@ -25,11 +25,15 @@ MEGADRIVERS += nouveau_vieux_dri.so endif if HAVE_R200_DRI -SUBDIRS+=r200 +SUBDIRS += r200 +MEGADRIVERS_DEPS += r200/libr200_dri.la +MEGADRIVERS += r200_dri.so endif if HAVE_RADEON_DRI -SUBDIRS+=radeon +SUBDIRS += radeon +MEGADRIVERS_DEPS += radeon/libradeon_dri.la +MEGADRIVERS += radeon_dri.so endif if HAVE_SWRAST_DRI diff --git a/src/mesa/drivers/dri/r200/Makefile.am b/src/mesa/drivers/dri/r200/Makefile.am index 6635265ea54..3a31fcb30da 100644 --- a/src/mesa/drivers/dri/r200/Makefile.am +++ b/src/mesa/drivers/dri/r200/Makefile.am @@ -36,20 +36,6 @@ AM_CFLAGS = \ $(VISIBILITY_CFLAGS) \ $(RADEON_CFLAGS) -dridir = $(DRI_DRIVER_INSTALL_DIR) -dri_LTLIBRARIES = r200_dri.la - -r200_dri_la_SOURCES = \ - $(R200_C_FILES) - -r200_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS) -r200_dri_la_LIBADD = \ - ../common/libdricommon.la \ - $(DRI_LIB_DEPS) \ - $(RADEON_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: r200_dri.la - $(MKDIR_P) $(top_builddir)/$(LIB_DIR); - ln -f .libs/r200_dri.so $(top_builddir)/$(LIB_DIR)/r200_dri.so; +noinst_LTLIBRARIES = libr200_dri.la +libr200_dri_la_SOURCES = $(R200_C_FILES) +libr200_dri_la_LIBADD = $(RADEON_LIBS) diff --git a/src/mesa/drivers/dri/radeon/Makefile.am b/src/mesa/drivers/dri/radeon/Makefile.am index eaee1a88d25..26bfbc13f18 100644 --- a/src/mesa/drivers/dri/radeon/Makefile.am +++ b/src/mesa/drivers/dri/radeon/Makefile.am @@ -36,20 +36,6 @@ AM_CFLAGS = \ $(VISIBILITY_CFLAGS) \ $(RADEON_CFLAGS) -dridir = $(DRI_DRIVER_INSTALL_DIR) -dri_LTLIBRARIES = radeon_dri.la - -radeon_dri_la_SOURCES = \ - $(RADEON_C_FILES) - -radeon_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS) -radeon_dri_la_LIBADD = \ - ../common/libdricommon.la \ - $(DRI_LIB_DEPS) \ - $(RADEON_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: radeon_dri.la - $(MKDIR_P) $(top_builddir)/$(LIB_DIR); - ln -f .libs/radeon_dri.so $(top_builddir)/$(LIB_DIR)/radeon_dri.so; +noinst_LTLIBRARIES = libradeon_dri.la +libradeon_dri_la_SOURCES = $(RADEON_C_FILES) +libradeon_dri_la_LIBADD = $(RADEON_LIBS) diff --git a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c index 5abc52ba3f7..40a16c3984c 100644 --- a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c +++ b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c @@ -25,13 +25,12 @@ * */ -#include "radeon_buffer_objects.h" - #include "main/imports.h" #include "main/mtypes.h" #include "main/bufferobj.h" #include "radeon_common.h" +#include "radeon_buffer_objects.h" struct radeon_buffer_object * get_radeon_buffer_object(struct gl_buffer_object *obj) diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h index 8437f34b5b7..ab55071dfba 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.h +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h @@ -7,8 +7,8 @@ #include "tnl/t_context.h" #include "main/colormac.h" -#include "radeon_debug.h" #include "radeon_screen.h" +#include "radeon_debug.h" #include "radeon_drm.h" #include "dri_util.h" #include "tnl/t_vertex.h" diff --git a/src/mesa/drivers/dri/radeon/radeon_debug.c b/src/mesa/drivers/dri/radeon/radeon_debug.c index dd0afb809a0..7ddba1ae85f 100644 --- a/src/mesa/drivers/dri/radeon/radeon_debug.c +++ b/src/mesa/drivers/dri/radeon/radeon_debug.c @@ -29,8 +29,8 @@ #include "utils.h" -#include "radeon_debug.h" #include "radeon_common_context.h" +#include "radeon_debug.h" #include #include diff --git a/src/mesa/drivers/dri/radeon/radeon_fog.c b/src/mesa/drivers/dri/radeon/radeon_fog.c index bd2642b1304..8b69570a44f 100644 --- a/src/mesa/drivers/dri/radeon/radeon_fog.c +++ b/src/mesa/drivers/dri/radeon/radeon_fog.c @@ -39,6 +39,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "main/enums.h" #include "main/macros.h" +#include "radeon_screen.h" #include "radeon_fog.h" /**********************************************************************/ diff --git a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c index db5e01da49b..0aa00bd95b0 100644 --- a/src/mesa/drivers/dri/radeon/radeon_pixel_read.c +++ b/src/mesa/drivers/dri/radeon/radeon_pixel_read.c @@ -33,8 +33,8 @@ #include "main/readpix.h" #include "main/state.h" -#include "radeon_buffer_objects.h" #include "radeon_common_context.h" +#include "radeon_buffer_objects.h" #include "radeon_debug.h" #include "radeon_mipmap_tree.h" diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index b0cc2d7084c..15bf5f859ae 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -764,7 +764,7 @@ __DRIconfig **radeonInitScreen2(__DRIscreen *psp) return (const __DRIconfig **)configs; } -const struct __DriverAPIRec driDriverAPI = { +static const struct __DriverAPIRec radeon_driver_api = { .InitScreen = radeonInitScreen2, .DestroyScreen = radeonDestroyScreen, #if defined(RADEON_R200) @@ -780,10 +780,32 @@ const struct __DriverAPIRec driDriverAPI = { .UnbindContext = radeonUnbindContext, }; +static const struct __DRIDriverVtableExtensionRec radeon_vtable = { + .base = { __DRI_DRIVER_VTABLE, 1 }, + .vtable = &radeon_driver_api, +}; + /* This is the table of extensions that the loader will dlsym() for. */ -PUBLIC const __DRIextension *__driDriverExtensions[] = { +static const __DRIextension *radeon_driver_extensions[] = { &driCoreExtension.base, &driDRI2Extension.base, &radeon_config_options.base, + &radeon_vtable.base, NULL }; + +#ifdef RADEON_R200 +PUBLIC const __DRIextension **__driDriverGetExtensions_r200(void) +{ + globalDriverAPI = &radeon_driver_api; + + return radeon_driver_extensions; +} +#else +PUBLIC const __DRIextension **__driDriverGetExtensions_radeon(void) +{ + globalDriverAPI = &radeon_driver_api; + + return radeon_driver_extensions; +} +#endif diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.h b/src/mesa/drivers/dri/radeon/radeon_screen.h index dd618f5836f..03abb2a2b55 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.h +++ b/src/mesa/drivers/dri/radeon/radeon_screen.h @@ -118,5 +118,103 @@ struct __DRIimageRec { void *data; }; +#ifdef RADEON_R200 +/* These defines are to ensure that r200_dri's symbols don't conflict with + * radeon's when linked together. + */ +#define get_radeon_buffer_object r200_get_radeon_buffer_object +#define radeonInitBufferObjectFuncs r200_radeonInitBufferObjectFuncs +#define radeonDestroyContext r200_radeonDestroyContext +#define radeonInitContext r200_radeonInitContext +#define radeonMakeCurrent r200_radeonMakeCurrent +#define radeon_prepare_render r200_radeon_prepare_render +#define radeonUnbindContext r200_radeonUnbindContext +#define radeon_update_renderbuffers r200_radeon_update_renderbuffers +#define radeon_check_front_buffer_rendering r200_radeon_check_front_buffer_rendering +#define radeonCountStateEmitSize r200_radeonCountStateEmitSize +#define radeon_draw_buffer r200_radeon_draw_buffer +#define radeonDrawBuffer r200_radeonDrawBuffer +#define radeonEmitState r200_radeonEmitState +#define radeonFinish r200_radeonFinish +#define radeonFlush r200_radeonFlush +#define radeonGetAge r200_radeonGetAge +#define radeonReadBuffer r200_radeonReadBuffer +#define radeonScissor r200_radeonScissor +#define radeonSetCliprects r200_radeonSetCliprects +#define radeonUpdateScissor r200_radeonUpdateScissor +#define radeonUserClear r200_radeonUserClear +#define radeon_viewport r200_radeon_viewport +#define radeon_window_moved r200_radeon_window_moved +#define rcommonBeginBatch r200_rcommonBeginBatch +#define rcommonDestroyCmdBuf r200_rcommonDestroyCmdBuf +#define rcommonEnsureCmdBufSpace r200_rcommonEnsureCmdBufSpace +#define rcommonFlushCmdBuf r200_rcommonFlushCmdBuf +#define rcommonFlushCmdBufLocked r200_rcommonFlushCmdBufLocked +#define rcommonInitCmdBuf r200_rcommonInitCmdBuf +#define radeonAllocDmaRegion r200_radeonAllocDmaRegion +#define radeonEmitVec12 r200_radeonEmitVec12 +#define radeonEmitVec16 r200_radeonEmitVec16 +#define radeonEmitVec4 r200_radeonEmitVec4 +#define radeonEmitVec8 r200_radeonEmitVec8 +#define radeonFreeDmaRegions r200_radeonFreeDmaRegions +#define radeon_init_dma r200_radeon_init_dma +#define radeonRefillCurrentDmaRegion r200_radeonRefillCurrentDmaRegion +#define radeonReleaseArrays r200_radeonReleaseArrays +#define radeonReleaseDmaRegions r200_radeonReleaseDmaRegions +#define radeonReturnDmaRegion r200_radeonReturnDmaRegion +#define rcommonAllocDmaLowVerts r200_rcommonAllocDmaLowVerts +#define rcommon_emit_vecfog r200_rcommon_emit_vecfog +#define rcommon_emit_vector r200_rcommon_emit_vector +#define rcommon_flush_last_swtcl_prim r200_rcommon_flush_last_swtcl_prim +#define _radeon_debug_add_indent r200__radeon_debug_add_indent +#define _radeon_debug_remove_indent r200__radeon_debug_remove_indent +#define radeon_init_debug r200_radeon_init_debug +#define _radeon_print r200__radeon_print +#define radeon_create_renderbuffer r200_radeon_create_renderbuffer +#define radeon_fbo_init r200_radeon_fbo_init +#define radeon_renderbuffer_set_bo r200_radeon_renderbuffer_set_bo +#define radeonComputeFogBlendFactor r200_radeonComputeFogBlendFactor +#define radeonInitStaticFogData r200_radeonInitStaticFogData +#define get_base_teximage_offset r200_get_base_teximage_offset +#define get_texture_image_row_stride r200_get_texture_image_row_stride +#define get_texture_image_size r200_get_texture_image_size +#define radeon_miptree_create r200_radeon_miptree_create +#define radeon_miptree_image_offset r200_radeon_miptree_image_offset +#define radeon_miptree_matches_image r200_radeon_miptree_matches_image +#define radeon_miptree_reference r200_radeon_miptree_reference +#define radeon_miptree_unreference r200_radeon_miptree_unreference +#define radeon_try_alloc_miptree r200_radeon_try_alloc_miptree +#define radeon_validate_texture_miptree r200_radeon_validate_texture_miptree +#define radeonReadPixels r200_radeonReadPixels +#define radeon_check_query_active r200_radeon_check_query_active +#define radeonEmitQueryEnd r200_radeonEmitQueryEnd +#define radeon_emit_queryobj r200_radeon_emit_queryobj +#define radeonInitQueryObjFunctions r200_radeonInitQueryObjFunctions +#define radeonInitSpanFuncs r200_radeonInitSpanFuncs +#define copy_rows r200_copy_rows +#define radeonChooseTextureFormat r200_radeonChooseTextureFormat +#define radeonChooseTextureFormat_mesa r200_radeonChooseTextureFormat_mesa +#define radeonFreeTextureImageBuffer r200_radeonFreeTextureImageBuffer +#define radeon_image_target_texture_2d r200_radeon_image_target_texture_2d +#define radeon_init_common_texture_funcs r200_radeon_init_common_texture_funcs +#define radeonIsFormatRenderable r200_radeonIsFormatRenderable +#define radeonNewTextureImage r200_radeonNewTextureImage +#define _radeon_texformat_al88 r200__radeon_texformat_al88 +#define _radeon_texformat_argb1555 r200__radeon_texformat_argb1555 +#define _radeon_texformat_argb4444 r200__radeon_texformat_argb4444 +#define _radeon_texformat_argb8888 r200__radeon_texformat_argb8888 +#define _radeon_texformat_rgb565 r200__radeon_texformat_rgb565 +#define _radeon_texformat_rgba8888 r200__radeon_texformat_rgba8888 +#define radeonCopyTexSubImage r200_radeonCopyTexSubImage +#define get_tile_size r200_get_tile_size +#define tile_image r200_tile_image +#define untile_image r200_untile_image +#define set_re_cntl_d3d r200_set_re_cntl_d3d +#define radeonDestroyBuffer r200_radeonDestroyBuffer +#endif + extern void radeonDestroyBuffer(__DRIdrawable *driDrawPriv); +const __DRIextension **__driDriverGetExtensions_radeon(void); +const __DRIextension **__driDriverGetExtensions_r200(void); + #endif /* __RADEON_SCREEN_H__ */ diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c b/src/mesa/drivers/dri/radeon/radeon_tile.c index 403da110106..b95961fc188 100644 --- a/src/mesa/drivers/dri/radeon/radeon_tile.c +++ b/src/mesa/drivers/dri/radeon/radeon_tile.c @@ -25,6 +25,7 @@ * */ +#include "radeon_screen.h" #include "radeon_tile.h" #include -- 2.30.2