[Bf-blender-cvs] [3f96555123d] master: Cycles: enable Metal GPU rendering

Brecht Van Lommel noreply at git.blender.org
Mon Dec 13 13:57:45 CET 2021


Commit: 3f96555123db2b48047c40a45a6b78d6cd760dc4
Author: Brecht Van Lommel
Date:   Mon Dec 13 13:48:36 2021 +0100
Branches: master
https://developer.blender.org/rB3f96555123db2b48047c40a45a6b78d6cd760dc4

Cycles: enable Metal GPU rendering

This adds the remaining bits to enable Metal on macOS. There are still
performance optimizations and other improvements planned, but it should
now be ready for early testing.

This is currently only enabled on in Arm builds for M1 GPUs. It is not
yet working on AMD or Intel GPUs.

Ref T92212

Differential Revision: https://developer.blender.org/D13503

===================================================================

M	CMakeLists.txt
M	build_files/cmake/config/blender_release.cmake
M	intern/cycles/cmake/external_libs.cmake
M	release/scripts/startup/bl_ui/space_userpref.py

===================================================================

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 59d07fd1a74..5c5b5eb317e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -463,6 +463,11 @@ if(NOT APPLE)
   mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
 endif()
 
+# Apple Metal
+if(APPLE)
+  option(WITH_CYCLES_DEVICE_METAL       "Enable Cycles Apple Metal compute support" ON)
+endif()
+
 # Draw Manager
 option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
 mark_as_advanced(WITH_DRAW_DEBUG)
diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake
index 04074db688d..da8724071b7 100644
--- a/build_files/cmake/config/blender_release.cmake
+++ b/build_files/cmake/config/blender_release.cmake
@@ -61,6 +61,7 @@ set(WITH_MEM_JEMALLOC          ON  CACHE BOOL "" FORCE)
 # platform dependent options
 if(APPLE)
   set(WITH_COREAUDIO           ON  CACHE BOOL "" FORCE)
+  set(WITH_CYCLES_DEVICE_METAL ON  CACHE BOOL "" FORCE)
 endif()
 if(NOT WIN32)
   set(WITH_JACK                ON  CACHE BOOL "" FORCE)
diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake
index 9967a775184..f46d18a4926 100644
--- a/intern/cycles/cmake/external_libs.cmake
+++ b/intern/cycles/cmake/external_libs.cmake
@@ -556,12 +556,17 @@ endif()
 ###########################################################################
 
 if(WITH_CYCLES_DEVICE_METAL)
-  FIND_LIBRARY(METAL_LIBRARY Metal)
-  if (METAL_LIBRARY)
-    message(STATUS "Found Metal: ${METAL_LIBRARY}")
-  else()
+  find_library(METAL_LIBRARY Metal)
+
+  # This file was added in the 12.0 SDK, use it as a way to detect the version.
+  if (METAL_LIBRARY AND NOT EXISTS "${METAL_LIBRARY}/Headers/MTLFunctionStitching.h")
+    message(STATUS "Metal version too old, must be SDK 12.0 or newer, disabling WITH_CYCLES_DEVICE_METAL")
+    set(WITH_CYCLES_DEVICE_METAL OFF)
+  elseif (NOT METAL_LIBRARY)
     message(STATUS "Metal not found, disabling WITH_CYCLES_DEVICE_METAL")
     set(WITH_CYCLES_DEVICE_METAL OFF)
+  else()
+    message(STATUS "Found Metal: ${METAL_LIBRARY}")
   endif()
 endif()
 
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 4976834dd87..6dbb964e771 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -596,9 +596,11 @@ class USERPREF_PT_system_cycles_devices(SystemPanel, CenterAlignMixIn, Panel):
 
     @classmethod
     def poll(cls, _context):
-        # No GPU rendering on macOS currently.
+        # No GPU rendering on macOS x86_64 currently.
+        import platform
         import sys
-        return bpy.app.build_options.cycles and sys.platform != "darwin"
+        return bpy.app.build_options.cycles and \
+               (sys.platform != "darwin" or platform.machine() == "arm64")
 
     def draw_centered(self, context, layout):
         prefs = context.preferences



More information about the Bf-blender-cvs mailing list