[Bf-blender-cvs] [0815e2fdb15] blender-v2.92-release: Fix automated tests when building with GCC and march=native

Sebastian Parborg noreply at git.blender.org
Thu Jan 14 17:37:49 CET 2021


Commit: 0815e2fdb15f27e4b62196d7b2725b0b235c9c6b
Author: Sebastian Parborg
Date:   Thu Jan 14 17:32:21 2021 +0100
Branches: blender-v2.92-release
https://developer.blender.org/rB0815e2fdb15f27e4b62196d7b2725b0b235c9c6b

Fix automated tests when building with GCC and march=native

When building with more aggressive optimization flags, GCC will add FMA
(Fused Multiply Add) instructions that will slightly alter the floating
point operation results.

This causes some automated tests to fail in blender.

In clang and the intel compiler ffp-contract is set to off per default
it seems from my research.  (They do not have the exact same setting,
but the default seems to match the off behavior)

Reviewed By: Brecht

Differential Revision: http://developer.blender.org/D9047

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

M	build_files/cmake/platform/platform_unix.cmake
M	intern/cycles/CMakeLists.txt

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

diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index b304e89d74f..abacd0500e5 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -610,7 +610,13 @@ endif()
 
 # GNU Compiler
 if(CMAKE_COMPILER_IS_GNUCC)
-  set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
+  # ffp-contract=off:
+  # Automatically turned on when building with "-march=native". This is
+  # explicitly turned off here as it will make floating point math give a bit
+  # different results. This will lead to automated test failures. So disable
+  # this until we support it. Seems to default to off in clang and the intel
+  # compiler.
+  set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing -ffp-contract=off")
 
   # `maybe-uninitialized` is unreliable in release builds, but fine in debug builds.
   set(GCC_EXTRA_FLAGS_RELEASE "-Wno-maybe-uninitialized")
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index b1bb1d3654d..8167576a177 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -379,6 +379,9 @@ endif()
 # Subdirectories
 
 if(WITH_CYCLES_BLENDER)
+  # Not needed to make cycles automated tests pass with -march=native.
+  # However Blender itself needs this flag.
+  remove_cc_flag("-ffp-contract=off")
   add_definitions(-DWITH_BLENDER_GUARDEDALLOC)
   add_subdirectory(blender)
 endif()



More information about the Bf-blender-cvs mailing list