[Bf-blender-cvs] [86f207f4fdc] mac_arm64: macOS: Enabled Embree on arm64.
Stefan Werner
noreply at git.blender.org
Tue Jul 14 10:59:56 CEST 2020
Commit: 86f207f4fdc17fa5ed6b600c1df9f8ed2e44d569
Author: Stefan Werner
Date: Tue Jul 14 10:56:29 2020 +0200
Branches: mac_arm64
https://developer.blender.org/rB86f207f4fdc17fa5ed6b600c1df9f8ed2e44d569
macOS: Enabled Embree on arm64.
This is using the arm port of Embree:
https://github.com/lighttransport/embree-aarch64
Since that repository does not have releases, I created a fork
on my personal github account:
https://github.com/skwerner/embree-aarch64
We could move this to the Blender github account instead.
===================================================================
M build_files/build_environment/CMakeLists.txt
M build_files/build_environment/cmake/embree.cmake
M build_files/build_environment/cmake/harvest.cmake
M build_files/build_environment/cmake/versions.cmake
M build_files/cmake/Modules/FindEmbree.cmake
M build_files/cmake/platform/platform_apple.cmake
M intern/cycles/bvh/bvh_embree.cpp
M intern/cycles/util/util_defines.h
===================================================================
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 276311fe2d8..05f3c7853fd 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -89,6 +89,7 @@ include(cmake/python_site_packages.cmake)
include(cmake/package_python.cmake)
include(cmake/numpy.cmake)
include(cmake/usd.cmake)
+ include(cmake/embree.cmake)
if(UNIX)
# Rely on PugiXML compiled with OpenImageIO
else()
@@ -97,7 +98,6 @@ endif()
if((NOT APPLE) OR ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
include(cmake/ispc.cmake)
include(cmake/openimagedenoise.cmake)
- include(cmake/embree.cmake)
endif()
if(NOT APPLE)
include(cmake/xr_openxr.cmake)
diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake
index 66a86cd5dbd..f4e70bb41ee 100644
--- a/build_files/build_environment/cmake/embree.cmake
+++ b/build_files/build_environment/cmake/embree.cmake
@@ -19,6 +19,12 @@
# Note the utility apps may use png/tiff/gif system libraries, but the
# library itself does not depend on them, so should give no problems.
+if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
+ set(EMBREE_MAX_ISA SSE2)
+else()
+ set(EMBREE_MAX_ISA AVX2)
+endif()
+
set(EMBREE_EXTRA_ARGS
-DEMBREE_ISPC_SUPPORT=OFF
-DEMBREE_TUTORIALS=OFF
@@ -26,7 +32,7 @@ set(EMBREE_EXTRA_ARGS
-DEMBREE_RAY_MASK=ON
-DEMBREE_FILTER_FUNCTION=ON
-DEMBREE_BACKFACE_CULLING=OFF
- -DEMBREE_MAX_ISA=AVX2
+ -DEMBREE_MAX_ISA=${EMBREE_MAX_ISA}
-DEMBREE_TASKING_SYSTEM=TBB
-DEMBREE_TBB_ROOT=${LIBDIR}/tbb
-DTBB_STATIC_LIB=${TBB_STATIC_LIBRARY}
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index f860778a6a1..3d2d7e9a451 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -135,9 +135,9 @@ harvest(openimageio/lib openimageio/lib "*.a")
if((NOT APPLE) OR ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
harvest(openimagedenoise/include openimagedenoise/include "*")
harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
- harvest(embree/include embree/include "*.h")
- harvest(embree/lib embree/lib "*.a")
endif()
+harvest(embree/include embree/include "*.h")
+harvest(embree/lib embree/lib "*.a")
harvest(openjpeg/include/openjpeg-2.3 openjpeg/include "*.h")
harvest(openjpeg/lib openjpeg/lib "*.a")
harvest(opensubdiv/include opensubdiv/include "*.h")
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index ce2a1191f17..59a876e9668 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -286,8 +286,13 @@ set(SQLITE_URI https://www.sqlite.org/2018/sqlite-src-3240000.zip)
set(SQLITE_HASH fb558c49ee21a837713c4f1e7e413309aabdd9c7)
set(EMBREE_VERSION 3.10.0)
-set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
-set(EMBREE_HASH 4bbe29e7eaa46417efc75fc5f1e8eb87)
+if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
+ set(EMBREE_URI https://github.com/skwerner/embree-aarch64/archive/v${EMBREE_VERSION}.zip)
+ set(EMBREE_HASH 49da93253d03512c8ddba2de3b74e257)
+else()
+ set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
+ set(EMBREE_HASH 4bbe29e7eaa46417efc75fc5f1e8eb87)
+endif()
set(USD_VERSION 20.05)
set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz)
diff --git a/build_files/cmake/Modules/FindEmbree.cmake b/build_files/cmake/Modules/FindEmbree.cmake
index fa613f62308..1e39d6f5913 100644
--- a/build_files/cmake/Modules/FindEmbree.cmake
+++ b/build_files/cmake/Modules/FindEmbree.cmake
@@ -41,18 +41,29 @@ FIND_PATH(EMBREE_INCLUDE_DIR
include
)
+if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
SET(_embree_FIND_COMPONENTS
- embree3
- embree_avx
- embree_avx2
- embree_sse42
- lexers
- math
- simd
- sys
- tasking
+ embree3
+ lexers
+ math
+ simd
+ sys
+ tasking
)
+else()
+ SET(_embree_FIND_COMPONENTS
+ embree3
+ embree_avx
+ embree_avx2
+ embree_sse42
+ lexers
+ math
+ simd
+ sys
+ tasking
+ )
+endif()
SET(_embree_LIBRARIES)
FOREACH(COMPONENT ${_embree_FIND_COMPONENTS})
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index a80b0b56901..b80c66ebf36 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -383,7 +383,6 @@ if(WITH_CYCLES_OSL)
endif()
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
- set(WITH_CYCLES_EMBREE OFF)
set(WITH_OPENIMAGEDENOISE OFF)
set(WITH_CPU_SSE OFF)
endif()
diff --git a/intern/cycles/bvh/bvh_embree.cpp b/intern/cycles/bvh/bvh_embree.cpp
index 17e1f86a589..35f233a2cbf 100644
--- a/intern/cycles/bvh/bvh_embree.cpp
+++ b/intern/cycles/bvh/bvh_embree.cpp
@@ -31,8 +31,10 @@
#ifdef WITH_EMBREE
# include <embree3/rtcore_geometry.h>
-# include <pmmintrin.h>
-# include <xmmintrin.h>
+# ifdef __SSE2__
+# include <pmmintrin.h>
+# include <xmmintrin.h>
+# endif
# include "bvh/bvh_embree.h"
@@ -326,8 +328,10 @@ BVHEmbree::BVHEmbree(const BVHParams ¶ms_,
build_quality(RTC_BUILD_QUALITY_REFIT),
dynamic_scene(true)
{
+# ifdef __SSE2__
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
+# endif
thread_scoped_lock lock(rtc_shared_mutex);
if (rtc_shared_users == 0) {
rtc_shared_device = rtcNewDevice("verbose=0");
diff --git a/intern/cycles/util/util_defines.h b/intern/cycles/util/util_defines.h
index e8e414587fb..0a239a944a5 100644
--- a/intern/cycles/util/util_defines.h
+++ b/intern/cycles/util/util_defines.h
@@ -26,7 +26,7 @@
/* Bitness */
#if defined(__ppc64__) || defined(__PPC64__) || defined(__x86_64__) || defined(__ia64__) || \
- defined(_M_X64)
+ defined(_M_X64) || defined(__aarch64__)
# define __KERNEL_64_BIT__
#endif
More information about the Bf-blender-cvs
mailing list