summaryrefslogtreecommitdiffstats
path: root/thirdparty
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2024-06-19 21:22:10 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2024-06-20 15:52:04 +0300
commit04d70c11fcf55c8b0fe17590d254e06b5cdd4a05 (patch)
tree49f2344760a17d85d90a5bcc43176c7bb82c0b69 /thirdparty
parentb75f0485ba15951b87f1d9a2d8dd0fcd55e178e4 (diff)
downloadredot-engine-04d70c11fcf55c8b0fe17590d254e06b5cdd4a05.tar.gz
[Windows/ARM64] Fix raycast/embree ARM64 build with LLVM/MinGW.
Diffstat (limited to 'thirdparty')
-rw-r--r--thirdparty/embree/common/simd/arm/sse2neon.h18
-rw-r--r--thirdparty/embree/patches/mingw-llvm-arm64.diff46
2 files changed, 63 insertions, 1 deletions
diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h
index b18d41e783..76579f9497 100644
--- a/thirdparty/embree/common/simd/arm/sse2neon.h
+++ b/thirdparty/embree/common/simd/arm/sse2neon.h
@@ -102,7 +102,9 @@
#include <stdint.h>
#include <stdlib.h>
-#if defined(_WIN32)
+// -- GODOT start --
+#if defined(_WIN32) && !defined(__MINGW32__)
+// -- GODOT end --
/* Definitions for _mm_{malloc,free} are provided by <malloc.h>
* from both MinGW-w64 and MSVC.
*/
@@ -1888,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b)
#if !defined(SSE2NEON_ALLOC_DEFINED)
FORCE_INLINE void _mm_free(void *addr)
{
+// -- GODOT start --
+#if defined(_WIN32)
+ _aligned_free(addr);
+#else
free(addr);
+#endif
+// -- GODOT end --
}
#endif
@@ -2080,8 +2088,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align)
return malloc(size);
if (align == 2 || (sizeof(void *) == 8 && align == 4))
align = sizeof(void *);
+// -- GODOT start --
+#if defined(_WIN32)
+ ptr = _aligned_malloc(size, align);
+ if (ptr)
+ return ptr;
+#else
if (!posix_memalign(&ptr, align, size))
return ptr;
+#endif
+// -- GODOT end --
return NULL;
}
#endif
diff --git a/thirdparty/embree/patches/mingw-llvm-arm64.diff b/thirdparty/embree/patches/mingw-llvm-arm64.diff
new file mode 100644
index 0000000000..c2ad4fb1dc
--- /dev/null
+++ b/thirdparty/embree/patches/mingw-llvm-arm64.diff
@@ -0,0 +1,46 @@
+diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h
+index b18d41e783..c54d0b7951 100644
+--- a/thirdparty/embree/common/simd/arm/sse2neon.h
++++ b/thirdparty/embree/common/simd/arm/sse2neon.h
+@@ -102,7 +102,9 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+
+-#if defined(_WIN32)
++// -- GODOT start --
++#if defined(_WIN32) && !defined(__MINGW32__)
++// -- GODOT end --
+ /* Definitions for _mm_{malloc,free} are provided by <malloc.h>
+ * from both MinGW-w64 and MSVC.
+ */
+@@ -2080,8 +2082,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align)
+ return malloc(size);
+ if (align == 2 || (sizeof(void *) == 8 && align == 4))
+ align = sizeof(void *);
+- if (!posix_memalign(&ptr, align, size))
++// -- GODOT start --
++#if defined(_WIN32)
++ ptr = _aligned_malloc(size, align);
++ if (ptr)
+ return ptr;
++#else
++ if (!posix_memalign(&ptr, align, size))
++ return ptr;
++#endif
++// -- GODOT end --
+ return NULL;
+ }
+ #endif
+@@ -1890,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b)
+ #if !defined(SSE2NEON_ALLOC_DEFINED)
+ FORCE_INLINE void _mm_free(void *addr)
+ {
++// -- GODOT start --
++#if defined(_WIN32)
++ _aligned_free(addr);
++#else
+ free(addr);
++#endif
++// -- GODOT end --
+ }
+ #endif