summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-09-27 16:32:40 -0700
committerEric Anholt <[email protected]>2013-10-24 14:13:09 -0700
commit86d50c2f1567eebd193ac797a49c58c969646787 (patch)
treeea4c6298494f67b5feeff2c32652c42689303753
parent6665b71b22c265a318ff76178cc27732512791a8 (diff)
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 <[email protected]> (v2) Reviewed-by: Emil Velikov <[email protected]>
-rw-r--r--configure.ac2
-rw-r--r--src/mesa/drivers/dri/Makefile.am8
-rw-r--r--src/mesa/drivers/dri/r200/Makefile.am20
-rw-r--r--src/mesa/drivers/dri/radeon/Makefile.am20
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_buffer_objects.c3
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_common_context.h2
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_debug.c2
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_fog.c1
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_pixel_read.c2
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_screen.c26
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_screen.h98
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_tile.c1
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 <stdarg.h>
#include <stdio.h>
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 <stdint.h>