diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-06-19 21:22:10 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-06-20 15:52:04 +0300 |
commit | 04d70c11fcf55c8b0fe17590d254e06b5cdd4a05 (patch) | |
tree | 49f2344760a17d85d90a5bcc43176c7bb82c0b69 /thirdparty | |
parent | b75f0485ba15951b87f1d9a2d8dd0fcd55e178e4 (diff) | |
download | redot-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.h | 18 | ||||
-rw-r--r-- | thirdparty/embree/patches/mingw-llvm-arm64.diff | 46 |
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 |