From 1f1098c4987e68fcd4113a696cf14794be763d66 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 15 Aug 2025 09:36:38 +0200 Subject: [PATCH] Vulkan: Remove MoltenVK Blender had some support for using MoltenVK. However there are some key issues why MotlenVK cannot be used. Bugs have been reported up-stream. As it doesn't work and holds back regular developments it will be removed from the main branch. Any efforts on making Vulkan run on Apple (including KosmicKrisp) is considered a community effort and can be done in a development branch. Pull Request: https://projects.blender.org/blender/blender/pulls/144602 --- CMakeLists.txt | 18 ++--- build_files/cmake/Modules/FindMoltenVK.cmake | 68 ------------------- build_files/cmake/Modules/FindShaderC.cmake | 2 +- .../cmake/platform/platform_apple.cmake | 6 -- extern/vulkan_memory_allocator/CMakeLists.txt | 6 -- .../vk_mem_alloc_impl.cc | 6 +- intern/ghost/CMakeLists.txt | 10 --- intern/ghost/GHOST_Types.h | 6 +- intern/ghost/intern/GHOST_ContextVK.cc | 5 -- source/blender/draw/CMakeLists.txt | 5 -- source/blender/gpu/CMakeLists.txt | 10 --- source/blender/gpu/vulkan/vk_backend.cc | 9 --- source/blender/gpu/vulkan/vk_common.hh | 10 +-- source/creator/CMakeLists.txt | 2 +- 14 files changed, 11 insertions(+), 152 deletions(-) delete mode 100644 build_files/cmake/Modules/FindMoltenVK.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e33020df78..64b8fb71c97 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -956,22 +956,12 @@ else() endif() # Vulkan -option(WITH_VULKAN_BACKEND "Enable Vulkan as graphics backend (experimental)" ON) -mark_as_advanced(WITH_VULKAN_BACKEND) -if(APPLE) - option(WITH_VULKAN_MOLTENVK "Enable Vulkan over MoltenVK (development option)" OFF) - mark_as_advanced(WITH_VULKAN_MOLTENVK) -endif() - -if(APPLE AND NOT WITH_VULKAN_MOLTENVK) +if(NOT APPLE) + option(WITH_VULKAN_BACKEND "Enable Vulkan as graphics backend" ON) + mark_as_advanced(WITH_VULKAN_BACKEND) +else() set(WITH_VULKAN_BACKEND OFF) endif() -if(NOT WITH_EXPERIMENTAL_FEATURES) - if(APPLE) - set(WITH_VULKAN_MOLTENVK OFF) - set(WITH_VULKAN_BACKEND OFF) - endif() -endif() # Metal if(APPLE) diff --git a/build_files/cmake/Modules/FindMoltenVK.cmake b/build_files/cmake/Modules/FindMoltenVK.cmake deleted file mode 100644 index 528d969eb19..00000000000 --- a/build_files/cmake/Modules/FindMoltenVK.cmake +++ /dev/null @@ -1,68 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Blender Authors -# -# SPDX-License-Identifier: BSD-3-Clause - -# - Find MoltenVK libraries -# Find the MoltenVK includes and libraries -# This module defines -# MOLTENVK_INCLUDE_DIRS, where to find MoltenVK headers, Set when -# MOLTENVK_INCLUDE_DIR is found. -# MOLTENVK_LIBRARIES, libraries to link against to use MoltenVK. -# MOLTENVK_ROOT_DIR, The base directory to search for MoltenVK. -# This can also be an environment variable. -# MOLTENVK_FOUND, If false, do not try to use MoltenVK. -# - -# If `MOLTENVK_ROOT_DIR` was defined in the environment, use it. -if(DEFINED MOLTENVK_ROOT_DIR) - # Pass. -elseif(DEFINED ENV{MOLTENVK_ROOT_DIR}) - set(MOLTENVK_ROOT_DIR $ENV{MOLTENVK_ROOT_DIR}) -else() - set(MOLTENVK_ROOT_DIR "") -endif() - -set(_moltenvk_SEARCH_DIRS - ${MOLTENVK_ROOT_DIR} -) - -# FIXME: These finder modules typically don't use LIBDIR, -# this should be set by `./build_files/cmake/platform/` instead. -if(DEFINED LIBDIR) - set(_moltenvk_SEARCH_DIRS ${_moltenvk_SEARCH_DIRS} ${LIBDIR}/moltenvk) -endif() - -find_path(MOLTENVK_INCLUDE_DIR - NAMES - MoltenVK/vk_mvk_moltenvk.h - HINTS - ${_moltenvk_SEARCH_DIRS} - PATH_SUFFIXES - include -) - -find_library(MOLTENVK_LIBRARY - NAMES - libMoltenVK.dylib - HINTS - ${_moltenvk_SEARCH_DIRS} - PATH_SUFFIXES - dynamic/dylib/macOS -) - -# handle the QUIETLY and REQUIRED arguments and set MOLTENVK_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MoltenVK DEFAULT_MSG MOLTENVK_LIBRARY MOLTENVK_INCLUDE_DIR) - -if(MOLTENVK_FOUND) - set(MOLTENVK_LIBRARIES ${MOLTENVK_LIBRARY}) - set(MOLTENVK_INCLUDE_DIRS ${MOLTENVK_INCLUDE_DIR}) -endif() - -mark_as_advanced( - MOLTENVK_INCLUDE_DIR - MOLTENVK_LIBRARY -) - -unset(_moltenvk_SEARCH_DIRS) diff --git a/build_files/cmake/Modules/FindShaderC.cmake b/build_files/cmake/Modules/FindShaderC.cmake index 32784ec3af7..03e5f83a225 100644 --- a/build_files/cmake/Modules/FindShaderC.cmake +++ b/build_files/cmake/Modules/FindShaderC.cmake @@ -5,7 +5,7 @@ # - Find ShaderC libraries # Find the ShaderC includes and libraries # This module defines -# SHADERC_INCLUDE_DIRS, where to find MoltenVK headers, Set when +# SHADERC_INCLUDE_DIRS, where to find ShaderC headers, Set when # SHADERC_INCLUDE_DIR is found. # SHADERC_LIBRARIES, libraries to link against to use ShaderC. # SHADERC_ROOT_DIR, The base directory to search for ShaderC. diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index ad7c52dbd32..be8a8470032 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -108,12 +108,6 @@ if(WITH_OPENSUBDIV) endif() add_bundled_libraries(opensubdiv/lib) -if(WITH_VULKAN_BACKEND) - find_package(MoltenVK REQUIRED) - find_package(ShaderC REQUIRED) - find_package(Vulkan REQUIRED) -endif() - if(WITH_CODEC_SNDFILE) find_package(SndFile) find_library(_sndfile_FLAC_LIBRARY NAMES flac HINTS ${LIBDIR}/sndfile/lib) diff --git a/extern/vulkan_memory_allocator/CMakeLists.txt b/extern/vulkan_memory_allocator/CMakeLists.txt index cc3220695e0..b28ab0b570e 100644 --- a/extern/vulkan_memory_allocator/CMakeLists.txt +++ b/extern/vulkan_memory_allocator/CMakeLists.txt @@ -10,12 +10,6 @@ set(INC_SYS ${VULKAN_INCLUDE_DIRS} ) -if(APPLE) - list(APPEND INC_SYS - ${MOLTENVK_INCLUDE_DIRS} - ) -endif() - set(SRC vk_mem_alloc_impl.cc diff --git a/extern/vulkan_memory_allocator/vk_mem_alloc_impl.cc b/extern/vulkan_memory_allocator/vk_mem_alloc_impl.cc index e05a9ff75a2..dbf5bb2dfc4 100644 --- a/extern/vulkan_memory_allocator/vk_mem_alloc_impl.cc +++ b/extern/vulkan_memory_allocator/vk_mem_alloc_impl.cc @@ -4,11 +4,7 @@ #include -#ifdef __APPLE__ -# include -#else -# include -#endif +#include #define VMA_IMPLEMENTATION diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt index 1a47a7d980b..5208095a16d 100644 --- a/intern/ghost/CMakeLists.txt +++ b/intern/ghost/CMakeLists.txt @@ -90,16 +90,6 @@ if(WITH_OPENGL_BACKEND) endif() if(WITH_VULKAN_BACKEND) - if(WITH_VULKAN_MOLTENVK) - list(APPEND INC_SYS - PUBLIC ${MOLTENVK_INCLUDE_DIRS} - ) - - list(APPEND LIB - ${MOLTENVK_LIBRARIES} - ) - endif() - list(APPEND SRC intern/GHOST_ContextVK.cc diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h index 67915bd5651..187394a3ba3 100644 --- a/intern/ghost/GHOST_Types.h +++ b/intern/ghost/GHOST_Types.h @@ -12,11 +12,7 @@ #include #ifdef WITH_VULKAN_BACKEND -# ifdef __APPLE__ -# include -# else -# include -# endif +# include #endif /* This is used by `GHOST_C-api.h` too, cannot use C++ conventions. */ diff --git a/intern/ghost/intern/GHOST_ContextVK.cc b/intern/ghost/intern/GHOST_ContextVK.cc index 3acbe5a1e05..ec1b1ebdb61 100644 --- a/intern/ghost/intern/GHOST_ContextVK.cc +++ b/intern/ghost/intern/GHOST_ContextVK.cc @@ -10,8 +10,6 @@ #ifdef _WIN32 # include -#elif defined(__APPLE__) -# include #else /* X11/WAYLAND. */ # ifdef WITH_GHOST_X11 # include @@ -279,11 +277,8 @@ class GHOST_DeviceVK { queue_create_infos.push_back(graphic_queue_create_info); VkPhysicalDeviceFeatures device_features = {}; -#ifndef __APPLE__ device_features.geometryShader = VK_TRUE; - /* MoltenVK supports logicOp, needs to be build with MVK_USE_METAL_PRIVATE_API. */ device_features.logicOp = VK_TRUE; -#endif device_features.dualSrcBlend = VK_TRUE; device_features.imageCubeArray = VK_TRUE; device_features.multiDrawIndirect = VK_TRUE; diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 73651d825e9..85e14c4c5c6 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -809,11 +809,6 @@ if(WITH_GTESTS) list(APPEND INC_SYS PUBLIC ${VULKAN_INCLUDE_DIRS} ) - if(APPLE) - list(APPEND INC_SYS - ${MOLTENVK_INCLUDE_DIRS} - ) - endif() endif() endif() endif() diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index a48de476170..b9d14cea1c0 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -421,16 +421,6 @@ endif() if(WITH_VULKAN_BACKEND) - if(APPLE) - list(APPEND INC_SYS - ${MOLTENVK_INCLUDE_DIRS} - ) - - list(APPEND LIB - ${MOLTENVK_LIBRARIES} - ) - endif() - list(APPEND INC ../../../extern/vulkan_memory_allocator ) diff --git a/source/blender/gpu/vulkan/vk_backend.cc b/source/blender/gpu/vulkan/vk_backend.cc index 83c6ad54a1d..0de0bc0d032 100644 --- a/source/blender/gpu/vulkan/vk_backend.cc +++ b/source/blender/gpu/vulkan/vk_backend.cc @@ -501,15 +501,6 @@ void VKBackend::detect_workarounds(VKDevice &device) workarounds.vertex_formats.r8g8b8 = (format_properties.bufferFeatures & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) == 0; -#ifdef __APPLE__ - /* Due to a limitation in MoltenVK, attachments should be sequential even when using - * dynamic rendering. MoltenVK internally uses render passes to simulate dynamic rendering and - * same limitations apply. */ - if (GPU_type_matches(GPU_DEVICE_APPLE, GPU_OS_MAC, GPU_DRIVER_ANY)) { - GCaps.render_pass_workaround = true; - } -#endif - device.workarounds_ = workarounds; device.extensions_ = extensions; } diff --git a/source/blender/gpu/vulkan/vk_common.hh b/source/blender/gpu/vulkan/vk_common.hh index 88b5841b43f..a8e87e8c69e 100644 --- a/source/blender/gpu/vulkan/vk_common.hh +++ b/source/blender/gpu/vulkan/vk_common.hh @@ -14,13 +14,9 @@ # include "BLI_winstuff.h" #endif -#ifdef __APPLE__ -# include -#else -# include -# ifdef _WIN32 -# include -# endif +#include +#ifdef _WIN32 +# include #endif #if !defined(_WIN32) or defined(_M_ARM64) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index f756f922cca..395e6b30044 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -1672,7 +1672,7 @@ elseif(APPLE) if(WITH_VULKAN_BACKEND) install( - FILES ${VULKAN_LIBRARY} ${MOLTENVK_LIBRARY} + FILES ${VULKAN_LIBRARY} DESTINATION ${TARGETDIR_LIB} ) endif()