[Mesa-dev] [PATCH 13/15] radeon: Build the driver into the shared mesa_dri_drivers.so.

Eric Anholt eric at anholt.net
Sat Oct 12 03:03:44 CEST 2013


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 <mattst88 at gmail.com> (v2)
---
 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 +----
 .../drivers/dri/radeon/radeon_buffer_objects.c     |  3 +-
 .../drivers/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 +
 src/mesa/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 8f9ee15..514f542 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1035,7 +1035,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 8a28a4f..97355ef 100644
--- a/src/mesa/drivers/dri/Makefile.am
+++ b/src/mesa/drivers/dri/Makefile.am
@@ -34,11 +34,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 6635265..3a31fcb 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 eaee1a8..26bfbc1 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 5abc52b..40a16c3 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 8437f34..ab55071 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 dd0afb8..7ddba1a 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 bd2642b..8b69570 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 db5e01d..0aa00bd 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 b0cc2d7..15bf5f8 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 dd618f5..03abb2a 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 403da11..b95961f 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>
-- 
1.8.4.rc3



More information about the mesa-dev mailing list