diff options
Diffstat (limited to 'source/creator')
-rw-r--r-- | source/creator/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/creator/creator.c | 39 |
2 files changed, 41 insertions, 0 deletions
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 519b3781103..39bf2f1e32d 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -116,6 +116,7 @@ if(WITH_XR_OPENXR) endif() if(WITH_GMP) + blender_include_dirs(${GMP_INCLUDE_DIRS}) add_definitions(-DWITH_GMP) endif() @@ -909,6 +910,7 @@ elseif(WIN32) DESTINATION "." CONFIGURATIONS Debug ) + list(APPEND LIB ${TBB_MALLOC_LIBRARIES}) endif() if(WITH_CODEC_SNDFILE) diff --git a/source/creator/creator.c b/source/creator/creator.c index 51efadf5e56..8fbbdb685d3 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -210,6 +210,41 @@ char **environ = NULL; /** \} */ /* -------------------------------------------------------------------- */ +/** \name GMP Allocator Workaround + * \{ */ + +#if (defined(WITH_TBB_MALLOC) && defined(_MSC_VER) && defined(NDEBUG) && defined(WITH_GMP)) || \ + defined(DOXYGEN) +# include "gmp.h" +# include "tbb/scalable_allocator.h" + +void *gmp_alloc(size_t size) +{ + return scalable_malloc(size); +} +void *gmp_realloc(void *ptr, size_t old_size, size_t new_size) +{ + return scalable_realloc(ptr, new_size); +} + +void gmp_free(void *ptr, size_t size) +{ + scalable_free(ptr); +} +/** + * Use TBB's scalable_allocator on Windows. + * TBBmalloc correctly captures all allocations already, + * however, GMP is built with mingw since it doesn't build with msvc, + * which TBB has issues hooking into automatically. + */ +void gmp_blender_init_allocator() +{ + mp_set_memory_functions(gmp_alloc, gmp_realloc, gmp_free); +} +#endif +/** \} */ + +/* -------------------------------------------------------------------- */ /** \name Main Function * \{ */ @@ -342,6 +377,10 @@ int main(int argc, CCL_init_logging(argv[0]); #endif +#if defined(WITH_TBB_MALLOC) && defined(_MSC_VER) && defined(NDEBUG) && defined(WITH_GMP) + gmp_blender_init_allocator(); +#endif + main_callback_setup(); #if defined(__APPLE__) && !defined(WITH_PYTHON_MODULE) && !defined(WITH_HEADLESS) |