[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 &params_,
       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