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
This commit is contained in:
@@ -956,22 +956,12 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Vulkan
|
# Vulkan
|
||||||
option(WITH_VULKAN_BACKEND "Enable Vulkan as graphics backend (experimental)" ON)
|
if(NOT APPLE)
|
||||||
|
option(WITH_VULKAN_BACKEND "Enable Vulkan as graphics backend" ON)
|
||||||
mark_as_advanced(WITH_VULKAN_BACKEND)
|
mark_as_advanced(WITH_VULKAN_BACKEND)
|
||||||
if(APPLE)
|
else()
|
||||||
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)
|
|
||||||
set(WITH_VULKAN_BACKEND OFF)
|
set(WITH_VULKAN_BACKEND OFF)
|
||||||
endif()
|
endif()
|
||||||
if(NOT WITH_EXPERIMENTAL_FEATURES)
|
|
||||||
if(APPLE)
|
|
||||||
set(WITH_VULKAN_MOLTENVK OFF)
|
|
||||||
set(WITH_VULKAN_BACKEND OFF)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Metal
|
# Metal
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
# - Find ShaderC libraries
|
# - Find ShaderC libraries
|
||||||
# Find the ShaderC includes and libraries
|
# Find the ShaderC includes and libraries
|
||||||
# This module defines
|
# 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_INCLUDE_DIR is found.
|
||||||
# SHADERC_LIBRARIES, libraries to link against to use ShaderC.
|
# SHADERC_LIBRARIES, libraries to link against to use ShaderC.
|
||||||
# SHADERC_ROOT_DIR, The base directory to search for ShaderC.
|
# SHADERC_ROOT_DIR, The base directory to search for ShaderC.
|
||||||
|
|||||||
@@ -108,12 +108,6 @@ if(WITH_OPENSUBDIV)
|
|||||||
endif()
|
endif()
|
||||||
add_bundled_libraries(opensubdiv/lib)
|
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)
|
if(WITH_CODEC_SNDFILE)
|
||||||
find_package(SndFile)
|
find_package(SndFile)
|
||||||
find_library(_sndfile_FLAC_LIBRARY NAMES flac HINTS ${LIBDIR}/sndfile/lib)
|
find_library(_sndfile_FLAC_LIBRARY NAMES flac HINTS ${LIBDIR}/sndfile/lib)
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ set(INC_SYS
|
|||||||
${VULKAN_INCLUDE_DIRS}
|
${VULKAN_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(APPLE)
|
|
||||||
list(APPEND INC_SYS
|
|
||||||
${MOLTENVK_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(SRC
|
set(SRC
|
||||||
vk_mem_alloc_impl.cc
|
vk_mem_alloc_impl.cc
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,7 @@
|
|||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
# include <MoltenVK/vk_mvk_moltenvk.h>
|
|
||||||
#else
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#define VMA_IMPLEMENTATION
|
#define VMA_IMPLEMENTATION
|
||||||
|
|
||||||
|
|||||||
@@ -90,16 +90,6 @@ if(WITH_OPENGL_BACKEND)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_VULKAN_BACKEND)
|
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
|
list(APPEND SRC
|
||||||
intern/GHOST_ContextVK.cc
|
intern/GHOST_ContextVK.cc
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifdef WITH_VULKAN_BACKEND
|
#ifdef WITH_VULKAN_BACKEND
|
||||||
# ifdef __APPLE__
|
|
||||||
# include <MoltenVK/vk_mvk_moltenvk.h>
|
|
||||||
# else
|
|
||||||
# include <vulkan/vulkan_core.h>
|
# include <vulkan/vulkan_core.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is used by `GHOST_C-api.h` too, cannot use C++ conventions. */
|
/* This is used by `GHOST_C-api.h` too, cannot use C++ conventions. */
|
||||||
// NOLINTBEGIN: modernize-use-using
|
// NOLINTBEGIN: modernize-use-using
|
||||||
|
|||||||
@@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include <vulkan/vulkan_win32.h>
|
# include <vulkan/vulkan_win32.h>
|
||||||
#elif defined(__APPLE__)
|
|
||||||
# include <MoltenVK/vk_mvk_moltenvk.h>
|
|
||||||
#else /* X11/WAYLAND. */
|
#else /* X11/WAYLAND. */
|
||||||
# ifdef WITH_GHOST_X11
|
# ifdef WITH_GHOST_X11
|
||||||
# include <vulkan/vulkan_xlib.h>
|
# include <vulkan/vulkan_xlib.h>
|
||||||
@@ -279,11 +277,8 @@ class GHOST_DeviceVK {
|
|||||||
queue_create_infos.push_back(graphic_queue_create_info);
|
queue_create_infos.push_back(graphic_queue_create_info);
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures device_features = {};
|
VkPhysicalDeviceFeatures device_features = {};
|
||||||
#ifndef __APPLE__
|
|
||||||
device_features.geometryShader = VK_TRUE;
|
device_features.geometryShader = VK_TRUE;
|
||||||
/* MoltenVK supports logicOp, needs to be build with MVK_USE_METAL_PRIVATE_API. */
|
|
||||||
device_features.logicOp = VK_TRUE;
|
device_features.logicOp = VK_TRUE;
|
||||||
#endif
|
|
||||||
device_features.dualSrcBlend = VK_TRUE;
|
device_features.dualSrcBlend = VK_TRUE;
|
||||||
device_features.imageCubeArray = VK_TRUE;
|
device_features.imageCubeArray = VK_TRUE;
|
||||||
device_features.multiDrawIndirect = VK_TRUE;
|
device_features.multiDrawIndirect = VK_TRUE;
|
||||||
|
|||||||
@@ -809,11 +809,6 @@ if(WITH_GTESTS)
|
|||||||
list(APPEND INC_SYS
|
list(APPEND INC_SYS
|
||||||
PUBLIC ${VULKAN_INCLUDE_DIRS}
|
PUBLIC ${VULKAN_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
if(APPLE)
|
|
||||||
list(APPEND INC_SYS
|
|
||||||
${MOLTENVK_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -421,16 +421,6 @@ endif()
|
|||||||
|
|
||||||
|
|
||||||
if(WITH_VULKAN_BACKEND)
|
if(WITH_VULKAN_BACKEND)
|
||||||
if(APPLE)
|
|
||||||
list(APPEND INC_SYS
|
|
||||||
${MOLTENVK_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
list(APPEND LIB
|
|
||||||
${MOLTENVK_LIBRARIES}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND INC
|
list(APPEND INC
|
||||||
../../../extern/vulkan_memory_allocator
|
../../../extern/vulkan_memory_allocator
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -501,15 +501,6 @@ void VKBackend::detect_workarounds(VKDevice &device)
|
|||||||
workarounds.vertex_formats.r8g8b8 = (format_properties.bufferFeatures &
|
workarounds.vertex_formats.r8g8b8 = (format_properties.bufferFeatures &
|
||||||
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) == 0;
|
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.workarounds_ = workarounds;
|
||||||
device.extensions_ = extensions;
|
device.extensions_ = extensions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,14 +14,10 @@
|
|||||||
# include "BLI_winstuff.h"
|
# include "BLI_winstuff.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
# include <MoltenVK/vk_mvk_moltenvk.h>
|
|
||||||
#else
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include <vulkan/vulkan_win32.h>
|
# include <vulkan/vulkan_win32.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(_WIN32) or defined(_M_ARM64)
|
#if !defined(_WIN32) or defined(_M_ARM64)
|
||||||
/* Silence compilation warning on non-windows x64 systems. */
|
/* Silence compilation warning on non-windows x64 systems. */
|
||||||
|
|||||||
@@ -1672,7 +1672,7 @@ elseif(APPLE)
|
|||||||
|
|
||||||
if(WITH_VULKAN_BACKEND)
|
if(WITH_VULKAN_BACKEND)
|
||||||
install(
|
install(
|
||||||
FILES ${VULKAN_LIBRARY} ${MOLTENVK_LIBRARY}
|
FILES ${VULKAN_LIBRARY}
|
||||||
DESTINATION ${TARGETDIR_LIB}
|
DESTINATION ${TARGETDIR_LIB}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user