Merge pull request #137 from phuang/master
changes for fixing problems on mac
diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index a880c10..5a1f2da 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -3943,7 +3943,7 @@
#if defined(__ANDROID_API__) && (__ANDROID_API__ < 16)
#include <cstdlib>
-void *aligned_alloc(size_t alignment, size_t size)
+void *vma_aligned_alloc(size_t alignment, size_t size)
{
// alignment must be >= sizeof(void*)
if(alignment < sizeof(void*))
@@ -3955,8 +3955,25 @@
}
#elif defined(__APPLE__) || defined(__ANDROID__) || (defined(__linux__) && defined(__GLIBCXX__) && !defined(_GLIBCXX_HAVE_ALIGNED_ALLOC))
#include <cstdlib>
-void *aligned_alloc(size_t alignment, size_t size)
+
+#if defined(__APPLE__)
+#include <AvailabilityMacros.h>
+#endif
+
+void *vma_aligned_alloc(size_t alignment, size_t size)
{
+#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0
+ // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only
+ // with the MacOSX11.0 SDK in Xcode 12 (which is what adds
+ // MAC_OS_X_VERSION_10_16), even though the function is marked
+ // availabe for 10.15. That's why the preprocessor checks for 10.16 but
+ // the __builtin_available checks for 10.15.
+ // People who use C++17 could call aligned_alloc with the 10.15 SDK already.
+ if (__builtin_available(macOS 10.15, iOS 13, *))
+ return aligned_alloc(alignment, size);
+#endif
+#endif
// alignment must be >= sizeof(void*)
if(alignment < sizeof(void*))
{
@@ -3968,6 +3985,16 @@
return pointer;
return VMA_NULL;
}
+#elif defined(_WIN32)
+void *vma_aligned_alloc(size_t alignment, size_t size)
+{
+ return _aligned_malloc(size, alignment);
+}
+#else
+void *vma_aligned_alloc(size_t alignment, size_t size)
+{
+ return aligned_alloc(alignment, size);
+}
#endif
// If your compiler is not compatible with C++11 and definition of
@@ -3999,11 +4026,7 @@
#endif
#ifndef VMA_SYSTEM_ALIGNED_MALLOC
- #if defined(_WIN32)
- #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment) (_aligned_malloc((size), (alignment)))
- #else
- #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment) (aligned_alloc((alignment), (size) ))
- #endif
+ #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment) vma_aligned_alloc((alignment), (size))
#endif
#ifndef VMA_SYSTEM_FREE