Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build_files/build_environment/CMakeLists.txt12
-rw-r--r--build_files/build_environment/cmake/embree.cmake30
-rw-r--r--build_files/build_environment/cmake/harvest.cmake13
-rw-r--r--build_files/build_environment/cmake/ispc.cmake16
-rw-r--r--build_files/build_environment/cmake/llvm.cmake2
-rw-r--r--build_files/build_environment/cmake/openimagedenoise.cmake1
-rw-r--r--build_files/build_environment/cmake/sse2neon.cmake30
-rw-r--r--build_files/build_environment/cmake/versions.cmake51
-rw-r--r--build_files/build_environment/patches/oidn.diff40
-rw-r--r--build_files/cmake/Modules/FindEmbree.cmake11
-rw-r--r--build_files/cmake/Modules/Findsse2neon.cmake49
-rw-r--r--build_files/cmake/platform/platform_apple.cmake13
-rw-r--r--intern/cycles/util/util_openimagedenoise.h5
-rw-r--r--source/blender/compositor/operations/COM_DenoiseOperation.cpp6
14 files changed, 230 insertions, 49 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 10dbc41bef4..b2f16508bb5 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -100,11 +100,9 @@ include(cmake/haru.cmake)
# Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed.
include(cmake/boost.cmake)
include(cmake/pugixml.cmake)
-if((NOT APPLE) OR ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
- include(cmake/ispc.cmake)
- include(cmake/openimagedenoise.cmake)
- include(cmake/embree.cmake)
-endif()
+include(cmake/ispc.cmake)
+include(cmake/openimagedenoise.cmake)
+include(cmake/embree.cmake)
if(NOT APPLE)
include(cmake/xr_openxr.cmake)
endif()
@@ -114,6 +112,10 @@ include(cmake/expat.cmake)
include(cmake/yamlcpp.cmake)
include(cmake/opencolorio.cmake)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+ include(cmake/sse2neon.cmake)
+endif()
+
if(WITH_WEBP)
include(cmake/webp.cmake)
endif()
diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake
index 66a86cd5dbd..86b8256f98f 100644
--- a/build_files/build_environment/cmake/embree.cmake
+++ b/build_files/build_environment/cmake/embree.cmake
@@ -29,6 +29,7 @@ set(EMBREE_EXTRA_ARGS
-DEMBREE_MAX_ISA=AVX2
-DEMBREE_TASKING_SYSTEM=TBB
-DEMBREE_TBB_ROOT=${LIBDIR}/tbb
+ -DTBB_ROOT=${LIBDIR}/tbb
-DTBB_STATIC_LIB=${TBB_STATIC_LIBRARY}
)
@@ -46,15 +47,26 @@ else()
set(EMBREE_BUILD_DIR)
endif()
-ExternalProject_Add(external_embree
- URL ${EMBREE_URI}
- DOWNLOAD_DIR ${DOWNLOAD_DIR}
- URL_HASH MD5=${EMBREE_HASH}
- PREFIX ${BUILD_DIR}/embree
- PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/embree/src/external_embree < ${PATCH_DIR}/embree.diff
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
- INSTALL_DIR ${LIBDIR}/embree
-)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+ ExternalProject_Add(external_embree
+ GIT_REPOSITORY ${EMBREE_ARM_GIT}
+ GIT_TAG "blender-arm"
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/embree
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/embree
+ )
+else()
+ ExternalProject_Add(external_embree
+ URL ${EMBREE_URI}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH MD5=${EMBREE_HASH}
+ PREFIX ${BUILD_DIR}/embree
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/embree/src/external_embree < ${PATCH_DIR}/embree.diff
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/embree
+ )
+endif()
add_dependencies(
external_embree
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 308cb77144c..93e6fbbf393 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -109,6 +109,9 @@ harvest(llvm/lib llvm/lib "libLLVM*.a")
if(APPLE)
harvest(openmp/lib openmp/lib "*")
harvest(openmp/include openmp/include "*.h")
+ if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
+ harvest(sse2neon sse2neon "*.h")
+ endif()
endif()
harvest(ogg/lib ffmpeg/lib "*.a")
harvest(openal/include openal/include "*.h")
@@ -139,12 +142,10 @@ harvest(openimageio/bin openimageio/bin "maketx")
harvest(openimageio/bin openimageio/bin "oiiotool")
harvest(openimageio/include openimageio/include "*")
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(openimagedenoise/include openimagedenoise/include "*")
+harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
+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/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake
index 56c3cecae17..440f6e5bace 100644
--- a/build_files/build_environment/cmake/ispc.cmake
+++ b/build_files/build_environment/cmake/ispc.cmake
@@ -21,27 +21,31 @@ if(WIN32)
-DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe
-DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe
-DM4_EXECUTABLE=${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe
+ -DARM_ENABLED=Off
)
elseif(APPLE)
# Use bison installed via Homebrew.
# The one which comes which Xcode toolset is too old.
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
- set(HOMEBREW_LOCATION "/opt/homebrew")
+ set(ISPC_EXTRA_ARGS_APPLE
+ -DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison
+ -DARM_ENABLED=On
+ )
else()
- set(HOMEBREW_LOCATION "/usr/local")
+ set(ISPC_EXTRA_ARGS_APPLE
+ -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
+ -DARM_ENABLED=Off
+ )
endif()
- set(ISPC_EXTRA_ARGS_APPLE
- -DBISON_EXECUTABLE=${HOMEBREW_LOCATION}/opt/bison/bin/bison
- )
elseif(UNIX)
set(ISPC_EXTRA_ARGS_UNIX
-DCMAKE_C_COMPILER=${LIBDIR}/clang/bin/clang
-DCMAKE_CXX_COMPILER=${LIBDIR}/clang/bin/clang++
+ -DARM_ENABLED=Off
)
endif()
set(ISPC_EXTRA_ARGS
- -DARM_ENABLED=Off
-DISPC_NO_DUMPS=On
-DISPC_INCLUDE_EXAMPLES=Off
-DISPC_INCLUDE_TESTS=Off
diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake
index 8c9a6076068..a4c7ccd9e27 100644
--- a/build_files/build_environment/cmake/llvm.cmake
+++ b/build_files/build_environment/cmake/llvm.cmake
@@ -17,7 +17,7 @@
# ***** END GPL LICENSE BLOCK *****
if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
- set(LLVM_TARGETS AArch64)
+ set(LLVM_TARGETS AArch64$<SEMICOLON>ARM)
else()
set(LLVM_TARGETS X86)
endif()
diff --git a/build_files/build_environment/cmake/openimagedenoise.cmake b/build_files/build_environment/cmake/openimagedenoise.cmake
index 65f12199952..7947fc31470 100644
--- a/build_files/build_environment/cmake/openimagedenoise.cmake
+++ b/build_files/build_environment/cmake/openimagedenoise.cmake
@@ -45,6 +45,7 @@ ExternalProject_Add(external_openimagedenoise
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH MD5=${OIDN_HASH}
PREFIX ${BUILD_DIR}/openimagedenoise
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < ${PATCH_DIR}/oidn.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise ${DEFAULT_CMAKE_FLAGS} ${OIDN_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openimagedenoise
)
diff --git a/build_files/build_environment/cmake/sse2neon.cmake b/build_files/build_environment/cmake/sse2neon.cmake
new file mode 100644
index 00000000000..dca2d94f913
--- /dev/null
+++ b/build_files/build_environment/cmake/sse2neon.cmake
@@ -0,0 +1,30 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+ ExternalProject_Add(external_sse2neon
+ GIT_REPOSITORY ${SSE2NEON_GIT}
+ GIT_TAG ${SSE2NEON_GIT_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/sse2neon
+ CONFIGURE_COMMAND echo sse2neon - Nothing to configure
+ BUILD_COMMAND echo sse2neon - nothing to build
+ INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon
+ INSTALL_DIR ${LIBDIR}/sse2neon
+ )
+endif()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 4a879c793a1..361c9fd9843 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -113,18 +113,35 @@ set(OPENCOLORIO_VERSION 2.0.0)
set(OPENCOLORIO_URI https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v${OPENCOLORIO_VERSION}.tar.gz)
set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
-set(LLVM_VERSION 9.0.1)
-set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz)
-set(LLVM_HASH 31eb9ce73dd2a0f8dcab8319fb03f8fc)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+ # Newer version required by ISPC with arm support.
+ set(LLVM_VERSION 11.0.1)
+ set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz)
+ set(LLVM_HASH 6ec7ae9fd43da9b87cda15b3ab9cc7af)
-set(CLANG_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz)
-set(CLANG_HASH 13468e4a44940efef1b75e8641752f90)
+ set(CLANG_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz)
+ set(CLANG_HASH b4cb0b74b1f3292a89c9720f3e1e2934)
-set(CLANG_TOOLS_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-tools-extra-${LLVM_VERSION}.src.tar.xz)
-set(CLANG_TOOLS_HASH c76293870b564c6a7968622b475b7646)
+ set(CLANG_TOOLS_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-tools-extra-${LLVM_VERSION}.src.tar.xz)
+ set(CLANG_TOOLS_HASH 1e577a85948a0f07483b7c405e59a0ca)
-set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz)
-set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
+ set(OPENMP_VERSION 9.0.1)
+ set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${OPENMP_VERSION}/openmp-${OPENMP_VERSION}.src.tar.xz)
+ set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
+else()
+ set(LLVM_VERSION 9.0.1)
+ set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz)
+ set(LLVM_HASH 31eb9ce73dd2a0f8dcab8319fb03f8fc)
+
+ set(CLANG_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz)
+ set(CLANG_HASH 13468e4a44940efef1b75e8641752f90)
+
+ set(CLANG_TOOLS_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-tools-extra-${LLVM_VERSION}.src.tar.xz)
+ set(CLANG_TOOLS_HASH c76293870b564c6a7968622b475b7646)
+
+ set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz)
+ set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
+endif()
set(OPENIMAGEIO_VERSION 2.1.15.0)
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
@@ -296,6 +313,7 @@ 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)
+set(EMBREE_ARM_GIT https://github.com/brechtvl/embree.git)
set(USD_VERSION 21.02)
set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz)
@@ -321,9 +339,15 @@ set(XR_OPENXR_SDK_VERSION 1.0.14)
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
set(XR_OPENXR_SDK_HASH 0df6b2fd6045423451a77ff6bc3e1a75)
-set(ISPC_VERSION v1.14.1)
-set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
-set(ISPC_HASH 968fbc8dfd16a60ba4e32d2e0e03ea7a)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+ # Unreleased version with macOS arm support.
+ set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
+ set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d)
+else()
+ set(ISPC_VERSION v1.14.1)
+ set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
+ set(ISPC_HASH 968fbc8dfd16a60ba4e32d2e0e03ea7a)
+endif()
set(GMP_VERSION 6.2.0)
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
@@ -336,3 +360,6 @@ set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)
set(HARU_VERSION 2_3_0)
set(HARU_URI https://github.com/libharu/libharu/archive/RELEASE_${HARU_VERSION}.tar.gz)
set(HARU_HASH 4f916aa49c3069b3a10850013c507460)
+
+set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
+set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
diff --git a/build_files/build_environment/patches/oidn.diff b/build_files/build_environment/patches/oidn.diff
new file mode 100644
index 00000000000..10d21d7764b
--- /dev/null
+++ b/build_files/build_environment/patches/oidn.diff
@@ -0,0 +1,40 @@
+diff -Naur oidn-1.3.0/cmake/FindTBB.cmake external_openimagedenoise/cmake/FindTBB.cmake
+--- oidn-1.3.0/cmake/FindTBB.cmake 2021-02-04 16:20:26 -0700
++++ external_openimagedenoise/cmake/FindTBB.cmake 2021-02-12 09:35:53 -0700
+@@ -332,20 +332,22 @@
+ ${TBB_ROOT}/lib/${TBB_ARCH}/${TBB_VCVER}
+ ${TBB_ROOT}/lib
+ )
+-
+ # On Windows, also search the DLL so that the client may install it.
+ file(GLOB DLL_NAMES
+ ${TBB_ROOT}/bin/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
+ ${TBB_ROOT}/bin/${LIB_NAME}.dll
++ ${TBB_ROOT}/lib/${LIB_NAME}.dll
+ ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
+ ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB1}.dll
+ ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB2}.dll
+ ${TBB_ROOT}/../redist/${TBB_ARCH}/tbb/${TBB_VCVER}/${LIB_NAME}.dll
+ ${TBB_ROOT}/../redist/${TBB_ARCH}_win/tbb/${TBB_VCVER}/${LIB_NAME}.dll
+ )
+- list(GET DLL_NAMES 0 DLL_NAME)
+- get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
+- set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
++ if (DLL_NAMES)
++ list(GET DLL_NAMES 0 DLL_NAME)
++ get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
++ set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
++ endif()
+ elseif(APPLE)
+ set(LIB_PATHS ${TBB_ROOT}/lib)
+ else()
+--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
++++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
+@@ -98,7 +98,7 @@
+ elseif(OIDN_ARCH STREQUAL "ARM64")
+ set(ISPC_ARCHITECTURE "aarch64")
+ if(APPLE)
+- set(ISPC_TARGET_OS "--target-os=ios")
++ set(ISPC_TARGET_OS "--target-os=macos")
+ endif()
+ endif()
diff --git a/build_files/cmake/Modules/FindEmbree.cmake b/build_files/cmake/Modules/FindEmbree.cmake
index af545cee00c..7f7f2ae0fb3 100644
--- a/build_files/cmake/Modules/FindEmbree.cmake
+++ b/build_files/cmake/Modules/FindEmbree.cmake
@@ -34,12 +34,17 @@ FIND_PATH(EMBREE_INCLUDE_DIR
include
)
+IF(NOT (APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")))
+ SET(_embree_SIMD_COMPONENTS
+ embree_sse42
+ embree_avx
+ embree_avx2
+ )
+ENDIF()
SET(_embree_FIND_COMPONENTS
embree3
- embree_sse42
- embree_avx
- embree_avx2
+ ${_embree_SIMD_COMPONENTS}
lexers
math
simd
diff --git a/build_files/cmake/Modules/Findsse2neon.cmake b/build_files/cmake/Modules/Findsse2neon.cmake
new file mode 100644
index 00000000000..2159dfac114
--- /dev/null
+++ b/build_files/cmake/Modules/Findsse2neon.cmake
@@ -0,0 +1,49 @@
+# - Find sse2neon library
+# Find the native sse2neon includes and library
+# This module defines
+# SSE2NEON_INCLUDE_DIRS, where to find sse2neon.h, Set when
+# SSE2NEON_INCLUDE_DIR is found.
+# SSE2NEON_ROOT_DIR, The base directory to search for sse2neon.
+# This can also be an environment variable.
+# SSE2NEON_FOUND, If false, do not try to use sse2neon.
+
+#=============================================================================
+# Copyright 2020 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD 3-Clause License,
+# see accompanying file BSD-3-Clause-license.txt for details.
+#=============================================================================
+
+# If SSE2NEON_ROOT_DIR was defined in the environment, use it.
+IF(NOT SSE2NEON_ROOT_DIR AND NOT $ENV{SSE2NEON_ROOT_DIR} STREQUAL "")
+ SET(SSE2NEON_ROOT_DIR $ENV{SSE2NEON_ROOT_DIR})
+ENDIF()
+
+SET(_sse2neon_SEARCH_DIRS
+ ${SSE2NEON_ROOT_DIR}
+)
+
+FIND_PATH(SSE2NEON_INCLUDE_DIR
+ NAMES
+ sse2neon.h
+ HINTS
+ ${_sse2neon_SEARCH_DIRS}
+ PATH_SUFFIXES
+ include
+)
+
+# handle the QUIETLY and REQUIRED arguments and set SSE2NEON_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(sse2neon DEFAULT_MSG
+ SSE2NEON_INCLUDE_DIR)
+
+IF(SSE2NEON_FOUND)
+ SET(SSE2NEON_INCLUDE_DIRS ${SSE2NEON_INCLUDE_DIR})
+ENDIF(SSE2NEON_FOUND)
+
+MARK_AS_ADVANCED(
+ SSE2NEON_INCLUDE_DIR
+)
+
+UNSET(_sse2neon_SEARCH_DIRS)
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index b95b21da946..5203ba10863 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -206,6 +206,13 @@ set(PLATFORM_LINKFLAGS
list(APPEND PLATFORM_LINKLIBS c++)
+if(WITH_OPENIMAGEDENOISE)
+ if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
+ # OpenImageDenoise uses BNNS from the Accelerate framework.
+ string(APPEND PLATFORM_LINKFLAGS " -framework Accelerate")
+ endif()
+endif()
+
if(WITH_JACK)
string(APPEND PLATFORM_LINKFLAGS " -F/Library/Frameworks -weak_framework jackmp")
endif()
@@ -345,12 +352,6 @@ if(WITH_CYCLES_OSL)
endif()
endif()
-if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
- set(WITH_CYCLES_EMBREE OFF)
- set(WITH_OPENIMAGEDENOISE OFF)
- set(WITH_CPU_SSE OFF)
-endif()
-
if(WITH_CYCLES_EMBREE)
find_package(Embree 3.8.0 REQUIRED)
# Increase stack size for Embree, only works for executables.
diff --git a/intern/cycles/util/util_openimagedenoise.h b/intern/cycles/util/util_openimagedenoise.h
index aafa69cb530..898c634141e 100644
--- a/intern/cycles/util/util_openimagedenoise.h
+++ b/intern/cycles/util/util_openimagedenoise.h
@@ -28,7 +28,12 @@ CCL_NAMESPACE_BEGIN
static inline bool openimagedenoise_supported()
{
#ifdef WITH_OPENIMAGEDENOISE
+# ifdef __APPLE__
+ /* Always supported through Accelerate framework BNNS. */
+ return true;
+# else
return system_cpu_support_sse41();
+# endif
#else
return false;
#endif
diff --git a/source/blender/compositor/operations/COM_DenoiseOperation.cpp b/source/blender/compositor/operations/COM_DenoiseOperation.cpp
index bc33e5f75c4..d08f238c4c1 100644
--- a/source/blender/compositor/operations/COM_DenoiseOperation.cpp
+++ b/source/blender/compositor/operations/COM_DenoiseOperation.cpp
@@ -94,7 +94,11 @@ void DenoiseOperation::generateDenoise(float *data,
return;
}
#ifdef WITH_OPENIMAGEDENOISE
- if (BLI_cpu_support_sse41()) {
+ /* Always supported through Accelerate framework BNNS on macOS. */
+# ifndef __APPLE__
+ if (BLI_cpu_support_sse41())
+# endif
+ {
oidn::DeviceRef device = oidn::newDevice();
device.commit();