swr: (autoconf) allow a single swr architecture to be builtin

Part 1 of 2 (part 1 is autoconf changes, part 2 is C++ changes)

When only a single SWR architecture is being used, this allows that
architecture to be builtin rather than as a separate libswrARCH.so that
gets loaded via dlopen.  Since there are now several different code
paths for each detected CPU architecture, the log output is also
adjusted to convey where the backend is getting loaded from.

This allows SWR to be used for static mesa builds which are still
important for large HPC environments where shared libraries can impose
unacceptable application startup times as hundreds of thousands of copies
of the libs are loaded from a shared parallel filesystem.

Based on an initial implementation by Tim Rowley.

v2: Fix comment placement pointed out by Bruce C.

Signed-off-by: Chuck Atkins <chuck.atkins@kitware.com>
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
CC: Tim Rowley <timothy.o.rowley@intel.com>
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
Chuck Atkins 2018-01-18 14:57:57 -05:00 committed by George Kyriazis
parent 8ff8c82630
commit 2ed8b6f827
2 changed files with 50 additions and 12 deletions

View File

@ -2640,6 +2640,11 @@ if test -n "$with_gallium_drivers"; then
AC_MSG_ERROR([swr enabled but no swr architectures selected])
fi
# test if more than one swr arch configured
if test `echo $swr_archs | wc -w` -eq 1; then
HAVE_SWR_BUILTIN=yes
fi
HAVE_GALLIUM_SWR=yes
;;
xvc4)
@ -2689,6 +2694,7 @@ AM_CONDITIONAL(HAVE_SWR_AVX, test "x$HAVE_SWR_AVX" = xyes)
AM_CONDITIONAL(HAVE_SWR_AVX2, test "x$HAVE_SWR_AVX2" = xyes)
AM_CONDITIONAL(HAVE_SWR_KNL, test "x$HAVE_SWR_KNL" = xyes)
AM_CONDITIONAL(HAVE_SWR_SKX, test "x$HAVE_SWR_SKX" = xyes)
AM_CONDITIONAL(HAVE_SWR_BUILTIN, test "x$HAVE_SWR_BUILTIN" = xyes)
dnl We need to validate some needed dependencies for renderonly drivers.
@ -3153,7 +3159,11 @@ fi
echo ""
if test "x$HAVE_GALLIUM_SWR" != x; then
echo " SWR archs: $swr_archs"
if test "x$HAVE_SWR_BUILTIN" = xyes; then
echo " SWR archs: $swr_archs (builtin)"
else
echo " SWR archs: $swr_archs"
fi
fi
dnl Libraries

View File

@ -26,13 +26,9 @@ AM_CXXFLAGS = $(GALLIUM_DRIVER_CFLAGS) $(CXX11_CXXFLAGS)
noinst_LTLIBRARIES = libmesaswr.la
# gen_knobs.* included here to provide driver access to swr configuration
libmesaswr_la_SOURCES = \
$(CXX_SOURCES) \
$(COMMON_CXX_SOURCES) \
$(JITTER_CXX_SOURCES) \
rasterizer/codegen/gen_knobs.cpp \
rasterizer/codegen/gen_knobs.h \
$(LOADER_SOURCES)
COMMON_CXXFLAGS = \
@ -243,8 +239,6 @@ COMMON_LDFLAGS = \
lib_LTLIBRARIES =
if HAVE_SWR_AVX
lib_LTLIBRARIES += libswrAVX.la
libswrAVX_la_CXXFLAGS = \
$(PTHREAD_CFLAGS) \
$(SWR_AVX_CXXFLAGS) \
@ -262,7 +256,6 @@ libswrAVX_la_LDFLAGS = \
endif
if HAVE_SWR_AVX2
lib_LTLIBRARIES += libswrAVX2.la
libswrAVX2_la_CXXFLAGS = \
$(PTHREAD_CFLAGS) \
$(SWR_AVX2_CXXFLAGS) \
@ -280,8 +273,6 @@ libswrAVX2_la_LDFLAGS = \
endif
if HAVE_SWR_KNL
lib_LTLIBRARIES += libswrKNL.la
libswrKNL_la_CXXFLAGS = \
$(PTHREAD_CFLAGS) \
$(SWR_KNL_CXXFLAGS) \
@ -299,8 +290,6 @@ libswrKNL_la_LDFLAGS = \
endif
if HAVE_SWR_SKX
lib_LTLIBRARIES += libswrSKX.la
libswrSKX_la_CXXFLAGS = \
$(PTHREAD_CFLAGS) \
$(SWR_SKX_CXXFLAGS) \
@ -317,6 +306,45 @@ libswrSKX_la_LDFLAGS = \
$(COMMON_LDFLAGS)
endif
if HAVE_SWR_BUILTIN
libmesaswr_la_CXXFLAGS += -DHAVE_SWR_BUILTIN
libmesaswr_la_LIBADD =
if HAVE_SWR_AVX
noinst_LTLIBRARIES += libswrAVX.la
libmesaswr_la_LIBADD += libswrAVX.la
endif
if HAVE_SWR_AVX2
noinst_LTLIBRARIES += libswrAVX2.la
libmesaswr_la_LIBADD += libswrAVX2.la
endif
if HAVE_SWR_KNL
noinst_LTLIBRARIES += libswrKNL.la
libmesaswr_la_LIBADD += libswrKNL.la
endif
if HAVE_SWR_SKX
noinst_LTLIBRARIES += libswrSKX.la
libmesaswr_la_LIBADD += libswrSKX.la
endif
else # !HAVE_SWR_BUILTIN
# gen_knobs.* included here to provide driver access to swr configuration
libmesaswr_la_SOURCES += \
$(COMMON_CXX_SOURCES) \
rasterizer/codegen/gen_knobs.cpp \
rasterizer/codegen/gen_knobs.h
if HAVE_SWR_AVX
lib_LTLIBRARIES += libswrAVX.la
endif
if HAVE_SWR_AVX2
lib_LTLIBRARIES += libswrAVX2.la
endif
if HAVE_SWR_KNL
lib_LTLIBRARIES += libswrKNL.la
endif
if HAVE_SWR_SKX
lib_LTLIBRARIES += libswrSKX.la
endif
endif
include $(top_srcdir)/install-gallium-links.mk
# Generated gen_builder.hpp is not backwards compatible. So ship only one