Răsfoiți Sursa

Disable FP contraction.

bruvzg 1 an în urmă
părinte
comite
52a2836861

+ 2 - 0
platform/android/detect.py

@@ -190,6 +190,8 @@ def configure(env: "SConsEnvironment"):
         env.Append(CCFLAGS=["-mfix-cortex-a53-835769"])
         env.Append(CCFLAGS=["-mfix-cortex-a53-835769"])
         env.Append(CPPDEFINES=["__ARM_ARCH_8A__"])
         env.Append(CPPDEFINES=["__ARM_ARCH_8A__"])
 
 
+    env.Append(CCFLAGS=["-ffp-contract=off"])
+
     # Link flags
     # Link flags
 
 
     env.Append(LINKFLAGS="-Wl,--gc-sections -Wl,--no-undefined -Wl,-z,now".split())
     env.Append(LINKFLAGS="-Wl,--gc-sections -Wl,--no-undefined -Wl,-z,now".split())

+ 2 - 0
platform/linuxbsd/detect.py

@@ -179,6 +179,8 @@ def configure(env: "SConsEnvironment"):
             env.Append(CCFLAGS=["-fsanitize-recover=memory"])
             env.Append(CCFLAGS=["-fsanitize-recover=memory"])
             env.Append(LINKFLAGS=["-fsanitize=memory"])
             env.Append(LINKFLAGS=["-fsanitize=memory"])
 
 
+    env.Append(CCFLAGS=["-ffp-contract=off"])
+
     # LTO
     # LTO
 
 
     if env["lto"] == "auto":  # Full LTO for production.
     if env["lto"] == "auto":  # Full LTO for production.

+ 2 - 0
platform/macos/detect.py

@@ -96,6 +96,8 @@ def configure(env: "SConsEnvironment"):
         env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
         env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
         env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
         env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
 
 
+    env.Append(CCFLAGS=["-ffp-contract=off"])
+
     cc_version = get_compiler_version(env)
     cc_version = get_compiler_version(env)
     cc_version_major = cc_version["apple_major"]
     cc_version_major = cc_version["apple_major"]
     cc_version_minor = cc_version["apple_minor"]
     cc_version_minor = cc_version["apple_minor"]

+ 4 - 0
platform/windows/detect.py

@@ -467,6 +467,8 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config):
     if env["arch"] == "x86_32":
     if env["arch"] == "x86_32":
         env["x86_libtheora_opt_vc"] = True
         env["x86_libtheora_opt_vc"] = True
 
 
+    env.Append(CCFLAGS=["/fp:strict"])
+
     env.AppendUnique(CCFLAGS=["/Gd", "/GR", "/nologo"])
     env.AppendUnique(CCFLAGS=["/Gd", "/GR", "/nologo"])
     env.AppendUnique(CCFLAGS=["/utf-8"])  # Force to use Unicode encoding.
     env.AppendUnique(CCFLAGS=["/utf-8"])  # Force to use Unicode encoding.
     env.AppendUnique(CXXFLAGS=["/TP"])  # assume all sources are C++
     env.AppendUnique(CXXFLAGS=["/TP"])  # assume all sources are C++
@@ -675,6 +677,8 @@ def configure_mingw(env: "SConsEnvironment"):
     if env["arch"] in ["x86_32", "x86_64"]:
     if env["arch"] in ["x86_32", "x86_64"]:
         env["x86_libtheora_opt_gcc"] = True
         env["x86_libtheora_opt_gcc"] = True
 
 
+    env.Append(CCFLAGS=["-ffp-contract=off"])
+
     mingw_bin_prefix = get_mingw_bin_prefix(env["mingw_prefix"], env["arch"])
     mingw_bin_prefix = get_mingw_bin_prefix(env["mingw_prefix"], env["arch"])
 
 
     if env["use_llvm"]:
     if env["use_llvm"]:

+ 18 - 0
thirdparty/libwebp/patches/godot-msvc-arm64-fpstrict-fix.patch

@@ -0,0 +1,18 @@
+diff --git a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c
+index 09028428ac..3184e2b80f 100644
+--- a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c
++++ b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c
+@@ -26,7 +26,13 @@ static uint32_t kGammaToLinearTabS[GAMMA_TO_LINEAR_TAB_SIZE + 2];
+ #define LINEAR_TO_GAMMA_TAB_SIZE (1 << LINEAR_TO_GAMMA_TAB_BITS)
+ static uint32_t kLinearToGammaTabS[LINEAR_TO_GAMMA_TAB_SIZE + 2];
+ 
++// -- GODOT start --
++#if defined(_MSC_VER)
++static const double kGammaF = 2.222222222222222;
++#else
+ static const double kGammaF = 1. / 0.45;
++#endif
++// -- GODOT end --
+ #define GAMMA_TO_LINEAR_BITS 16
+ 
+ static volatile int kGammaTablesSOk = 0;

+ 6 - 0
thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c

@@ -26,7 +26,13 @@ static uint32_t kGammaToLinearTabS[GAMMA_TO_LINEAR_TAB_SIZE + 2];
 #define LINEAR_TO_GAMMA_TAB_SIZE (1 << LINEAR_TO_GAMMA_TAB_BITS)
 #define LINEAR_TO_GAMMA_TAB_SIZE (1 << LINEAR_TO_GAMMA_TAB_BITS)
 static uint32_t kLinearToGammaTabS[LINEAR_TO_GAMMA_TAB_SIZE + 2];
 static uint32_t kLinearToGammaTabS[LINEAR_TO_GAMMA_TAB_SIZE + 2];
 
 
+// -- GODOT start --
+#if defined(_MSC_VER)
+static const double kGammaF = 2.222222222222222;
+#else
 static const double kGammaF = 1. / 0.45;
 static const double kGammaF = 1. / 0.45;
+#endif
+// -- GODOT end --
 #define GAMMA_TO_LINEAR_BITS 16
 #define GAMMA_TO_LINEAR_BITS 16
 
 
 static volatile int kGammaTablesSOk = 0;
 static volatile int kGammaTablesSOk = 0;