[Bf-blender-cvs] [2382c8d] master: Cycles: Fix compilation error with compilers which doesn't support AVX

Sergey Sharybin noreply at git.blender.org
Wed Dec 31 21:32:54 CET 2014


Commit: 2382c8decd6585274d077a5acb7d9e321163e939
Author: Sergey Sharybin
Date:   Sun Dec 7 15:22:05 2014 +0500
Branches: master
https://developer.blender.org/rB2382c8decd6585274d077a5acb7d9e321163e939

Cycles: Fix compilation error with compilers which doesn't support AVX

For SSE checks still could be decoupled to be able to compile SSE2
kernel and not SSE4 depending on the CPU or so.

===================================================================

M	intern/cycles/CMakeLists.txt
M	intern/cycles/kernel/CMakeLists.txt

===================================================================

diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index 06a6120..fc80a6e 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -18,6 +18,8 @@ if(NOT WITH_CPU_SSE)
 	set(CXX_HAS_SSE FALSE)
 elseif(WIN32 AND MSVC)
 	set(CXX_HAS_SSE TRUE)
+	set(CXX_HAS_AVX TRUE)
+	set(CXX_HAS_AVX2 TRUE)
 
 	# /arch:AVX for VC2012 and above
 	if(NOT MSVC_VERSION LESS 1700)
@@ -49,21 +51,33 @@ elseif(WIN32 AND MSVC)
 	set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Ox")
 elseif(CMAKE_COMPILER_IS_GNUCC)
 	check_cxx_compiler_flag(-msse CXX_HAS_SSE)
+	check_cxx_compiler_flag(-mavx CXX_HAS_AVX)
+	check_cxx_compiler_flag(-mavx2 CXX_HAS_AVX2)
 	if(CXX_HAS_SSE)
 		set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2 -mfpmath=sse")
 		set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse")
 		set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mfpmath=sse")
+	endif()
+	if(CXX_HAS_AVX)
 		set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mfpmath=sse")
+	endif()
+	if(CXX_HAS_AVX2)
 		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mlzcnt -mbmi -mbmi2 -mfpmath=sse")
 	endif()
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
 	check_cxx_compiler_flag(-msse CXX_HAS_SSE)
+	check_cxx_compiler_flag(-mavx CXX_HAS_AVX)
+	check_cxx_compiler_flag(-mavx2 CXX_HAS_AVX2)
 	if(CXX_HAS_SSE)
 		set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2")
 		set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3")
 		set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1")
+	endif()
+	if(CXX_HAS_AVX)
 		set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx")
+	endif()
+	if(CXX_HAS_AVX2)
 		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
 	endif()
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
@@ -74,11 +88,17 @@ if(CXX_HAS_SSE)
 		-DWITH_KERNEL_SSE2
 		-DWITH_KERNEL_SSE3
 		-DWITH_KERNEL_SSE41
-		-DWITH_KERNEL_AVX
-		-DWITH_KERNEL_AVX2
 	)
 endif()
 
+if(CXX_HAS_AVX)
+	add_definitions(-DWITH_KERNEL_AVX)
+endif()
+
+if(CXX_HAS_AVX2)
+	add_definitions(-DWITH_KERNEL_AVX2)
+endif()
+
 if(WITH_CYCLES_OSL)
 	if(WIN32 AND MSVC)
 		set(RTTI_DISABLE_FLAGS "/GR- -DBOOST_NO_RTTI -DBOOST_NO_TYPEID")
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index f8d2ee6..0b2a543 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -242,17 +242,26 @@ if(CXX_HAS_SSE)
 		kernel_sse2.cpp
 		kernel_sse3.cpp
 		kernel_sse41.cpp
-		kernel_avx.cpp
-		kernel_avx2.cpp
 	)
 
 	set_source_files_properties(kernel_sse2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS}")
 	set_source_files_properties(kernel_sse3.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS}")
 	set_source_files_properties(kernel_sse41.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS}")
+endif()
+
+if(CXX_HAS_AVX)
+	list(APPEND SRC
+		kernel_avx.cpp
+	)
 	set_source_files_properties(kernel_avx.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}")
-	set_source_files_properties(kernel_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}")
 endif()
 
+if(CXX_HAS_AVX2)
+	list(APPEND SRC
+		kernel_avx2.cpp
+	)
+	set_source_files_properties(kernel_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}")
+endif()
 
 add_library(cycles_kernel ${SRC} ${SRC_HEADERS} ${SRC_CLOSURE_HEADERS} ${SRC_SVM_HEADERS} ${SRC_GEOM_HEADERS})




More information about the Bf-blender-cvs mailing list