[D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
AC_SUBST([D3D_DRIVER_INSTALL_DIR])
+dnl Architectures to build SWR library for
+
+AC_ARG_WITH([swr-archs],
+ [AS_HELP_STRING([--with-swr-archs@<:@=DIRS...@:>@],
+ [comma delimited swr architectures list, e.g.
+ "avx,avx2" @<:@default="avx,avx2"@:>@])],
+ [with_swr_archs="$withval"],
+ [with_swr_archs="avx,avx2"])
+
dnl
dnl r300 doesn't strictly require LLVM, but for performance reasons we
dnl highly recommend LLVM usage. So require it at least on x86 and x86_64
SWR_AVX_CXXFLAGS
AC_SUBST([SWR_AVX_CXXFLAGS])
- swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \
- ",-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2" \
- SWR_AVX2_CXXFLAGS
- AC_SUBST([SWR_AVX2_CXXFLAGS])
+ swr_archs=`IFS=', '; echo $with_swr_archs`
+ for arch in $swr_archs; do
+ case "x$arch" in
+ xavx)
+ HAVE_SWR_AVX=yes
+ ;;
+ xavx2)
+ swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \
+ ",-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2" \
+ SWR_AVX2_CXXFLAGS
+ AC_SUBST([SWR_AVX2_CXXFLAGS])
+ HAVE_SWR_AVX2=yes
+ ;;
+ *)
+ AC_MSG_ERROR([unknown SWR build architecture '$arch'])
+ ;;
+ esac
+ done
+
+ if test "x$HAVE_SWR_AVX" != xyes -a \
+ "x$HAVE_SWR_AVX2" != xyes; then
+ AC_MSG_ERROR([swr enabled but no swr architectures selected])
+ fi
HAVE_GALLIUM_SWR=yes
;;
llvm_add_default_components "gallium"
fi
+AM_CONDITIONAL(HAVE_SWR_AVX, test "x$HAVE_SWR_AVX" = xyes)
+AM_CONDITIONAL(HAVE_SWR_AVX2, test "x$HAVE_SWR_AVX2" = xyes)
+
dnl We need to validate some needed dependencies for renderonly drivers.
if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" = xyes ; then
echo " HUD lmsensors: yes"
fi
+echo ""
+if test "x$HAVE_GALLIUM_SWR" != x; then
+ echo " SWR archs: $swr_archs"
+fi
+
dnl Libraries
echo ""
echo " Shared libs: $enable_shared"
$(SWR_AVX_CXXFLAGS) \
$(COMMON_CXXFLAGS)
+if HAVE_SWR_AVX
+libmesaswr_la_CXXFLAGS += -DHAVE_SWR_AVX
+endif
+
+if HAVE_SWR_AVX2
+libmesaswr_la_CXXFLAGS += -DHAVE_SWR_AVX2
+endif
+
COMMON_SOURCES = \
$(ARCHRAST_CXX_SOURCES) \
$(COMMON_CXX_SOURCES) \
$(GC_SECTIONS) \
$(NO_UNDEFINED)
-lib_LTLIBRARIES = libswrAVX.la libswrAVX2.la
+lib_LTLIBRARIES =
+
+if HAVE_SWR_AVX
+lib_LTLIBRARIES += libswrAVX.la
libswrAVX_la_CXXFLAGS = \
$(SWR_AVX_CXXFLAGS) \
libswrAVX_la_LDFLAGS = \
$(COMMON_LDFLAGS)
+endif
+if HAVE_SWR_AVX2
+lib_LTLIBRARIES += libswrAVX2.la
libswrAVX2_la_CXXFLAGS = \
$(SWR_AVX2_CXXFLAGS) \
-DKNOB_ARCH=KNOB_ARCH_AVX2 \
libswrAVX2_la_LDFLAGS = \
$(COMMON_LDFLAGS)
+endif
include $(top_srcdir)/install-gallium-links.mk
struct pipe_screen *
swr_create_screen(struct sw_winsys *winsys)
{
- char filename[256];
+ char filename[256] = { 0 };
fprintf(stderr, "SWR detected ");
util_dl_library *pLibrary = nullptr;
util_cpu_detect();
- if (util_cpu_caps.has_avx2) {
- fprintf(stderr, "AVX2\n");
+
+ if (!strlen(filename) && util_cpu_caps.has_avx2) {
+#if HAVE_SWR_AVX2
+ fprintf(stderr, "AVX2 ");
sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX2", UTIL_DL_EXT);
- } else if (util_cpu_caps.has_avx) {
- fprintf(stderr, "AVX\n");
+#else
+ fprintf(stderr, "AVX2 (not built) ");
+#endif
+ }
+
+ if (!strlen(filename) && util_cpu_caps.has_avx) {
+#if HAVE_SWR_AVX
+ fprintf(stderr, "AVX ");
sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX", UTIL_DL_EXT);
- } else {
- fprintf(stderr, "no AVX/AVX2 support. Aborting!\n");
+#else
+ fprintf(stderr, "AVX (not built) ");
+#endif
+ }
+
+ if (!strlen(filename)) {
+ fprintf(stderr, "- no appropriate swr architecture library. Aborting!\n");
exit(-1);
+ } else {
+ fprintf(stderr, "\n");
}
+
pLibrary = util_dl_open(filename);
if (!pLibrary) {