swr: relax c++ requirement from c++14 to c++11
authorTim Rowley <timothy.o.rowley@intel.com>
Thu, 8 Jun 2017 15:38:52 +0000 (10:38 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Thu, 8 Jun 2017 23:07:52 +0000 (18:07 -0500)
Remove c++14 generic lambda to keep compiler requirement at c++11.

No regressions on piglit or vtk test suites.

Tested-by: Chuck Atkins <chuck.atkins@kitware.com>
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
CC: mesa-stable@lists.freedesktop.org
configure.ac
src/gallium/drivers/swr/Makefile.am
src/gallium/drivers/swr/SConscript
src/gallium/drivers/swr/rasterizer/core/state.h

index 5caf316089aac684e0ab72f73fa00a584bf67bda..82a1bd6cd1d2bee7d749d04965a4710da3205aa3 100644 (file)
@@ -2472,10 +2472,10 @@ if test -n "$with_gallium_drivers"; then
         xswr)
             llvm_require_version $LLVM_REQUIRED_SWR "swr"
 
-            swr_require_cxx_feature_flags "C++14" "__cplusplus >= 201402L" \
-                "-std=c++14" \
-                SWR_CXX14_CXXFLAGS
-            AC_SUBST([SWR_CXX14_CXXFLAGS])
+            swr_require_cxx_feature_flags "C++11" "__cplusplus >= 201103L" \
+                ",-std=c++11" \
+                SWR_CXX11_CXXFLAGS
+            AC_SUBST([SWR_CXX11_CXXFLAGS])
 
             swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \
                 ",-mavx,-march=core-avx" \
index 7b2da07416277835f460d06b52e2f7f11dd879cb..6650abda5ae4e65931d22de0e473744b1f2fd366 100644 (file)
@@ -22,7 +22,7 @@
 include Makefile.sources
 include $(top_srcdir)/src/gallium/Automake.inc
 
-AM_CXXFLAGS = $(GALLIUM_DRIVER_CFLAGS) $(SWR_CXX14_CXXFLAGS)
+AM_CXXFLAGS = $(GALLIUM_DRIVER_CFLAGS) $(SWR_CXX11_CXXFLAGS)
 
 noinst_LTLIBRARIES = libmesaswr.la
 
@@ -32,7 +32,7 @@ COMMON_CXXFLAGS = \
        -fno-strict-aliasing \
        $(GALLIUM_DRIVER_CFLAGS) \
        $(LLVM_CXXFLAGS) \
-       $(SWR_CXX14_CXXFLAGS) \
+       $(SWR_CXX11_CXXFLAGS) \
        -I$(builddir)/rasterizer/codegen \
        -I$(builddir)/rasterizer/jitter \
        -I$(builddir)/rasterizer/archrast \
index 5e3784b51f472002c46c6482b4b3310306a121e9..cdb85e2cad458061191686156b4c1e7cc5353438 100644 (file)
@@ -38,7 +38,7 @@ loadersource = env.ParseSourceList('Makefile.sources', [
 
 if not env['msvc'] :
     env.Append(CCFLAGS = [
-        '-std=c++14',
+        '-std=c++11',
     ])
 
 swrroot = '#src/gallium/drivers/swr/'
index 364a898c2807b747d3d55940eb0630e54b28fe36..3db637036cd61d01af5e639bbe406a53b369c0bb 100644 (file)
@@ -971,26 +971,27 @@ public:
 
 
 private:
+    template <typename MaskT>
+    INLINE __m128i expandThenBlend4(uint32_t* min, uint32_t* max) // @llvm_func_start
+    {
+        __m128i vMin = _mm_set1_epi32(*min);
+        __m128i vMax = _mm_set1_epi32(*max);
+        return _simd_blend4_epi32<MaskT::value>(vMin, vMax);
+    }  // @llvm_func_end
+
     INLINE void CalcTileSampleOffsets(int numSamples)   // @llvm_func_start
-    {                                                                      
-        auto expandThenBlend4 = [](uint32_t* min, uint32_t* max, auto mask)
-        {
-            __m128i vMin = _mm_set1_epi32(*min);
-            __m128i vMax = _mm_set1_epi32(*max);
-            return _simd_blend4_epi32<decltype(mask)::value>(vMin, vMax);
-        };
-                                                                           
+    {
         auto minXi = std::min_element(std::begin(_xi), &_xi[numSamples]);
         auto maxXi = std::max_element(std::begin(_xi), &_xi[numSamples]);
-        std::integral_constant<int, 0xA> xMask;
+        using xMask = std::integral_constant<int, 0xA>;
         // BR(max),    BL(min),    UR(max),    UL(min)
-        tileSampleOffsetsX = expandThenBlend4(minXi, maxXi, xMask);
-        
+        tileSampleOffsetsX = expandThenBlend4<xMask>(minXi, maxXi);
+
         auto minYi = std::min_element(std::begin(_yi), &_yi[numSamples]);
         auto maxYi = std::max_element(std::begin(_yi), &_yi[numSamples]);
-        std::integral_constant<int, 0xC> yMask;
+        using yMask = std::integral_constant<int, 0xC>;
         // BR(max),    BL(min),    UR(max),    UL(min)
-        tileSampleOffsetsY = expandThenBlend4(minYi, maxYi, yMask);
+        tileSampleOffsetsY = expandThenBlend4<yMask>(minYi, maxYi);
     };  // @llvm_func_end
     // scalar sample values
     uint32_t _xi[SWR_MAX_NUM_MULTISAMPLES];