diff options
-rw-r--r-- | intern/cycles/CMakeLists.txt | 24 | ||||
-rw-r--r-- | intern/cycles/kernel/CMakeLists.txt | 15 |
2 files changed, 34 insertions, 5 deletions
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index 06a6120f41a..fc80a6ef126 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 f8d2ee60a3a..0b2a5436879 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}) |