summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2023-08-22 13:10:26 -0400
committerGravatar GitHub2023-08-22 13:10:26 -0400
commitbc4ad5e62d6d9a8e81a56ce70b33dd3e8ae7bd5d (patch)
tree7b3354dd90ada7fabb5efa93a5f2a8c8892c6da8
parentMerge pull request #11303 from lat9nq/screenshots-configurable (diff)
parentAdd macos moltenvk bundle, Add copy moltevk dylib script (diff)
downloadyuzu-bc4ad5e62d6d9a8e81a56ce70b33dd3e8ae7bd5d.tar.gz
yuzu-bc4ad5e62d6d9a8e81a56ce70b33dd3e8ae7bd5d.tar.xz
yuzu-bc4ad5e62d6d9a8e81a56ce70b33dd3e8ae7bd5d.zip
Merge pull request #11302 from vonchenplus/vulkan_macos
Add macos moltenvk bundle, Add copy moltevk dylib script
-rw-r--r--CMakeLists.txt4
-rw-r--r--CMakeModules/DownloadExternals.cmake18
-rw-r--r--src/video_core/vulkan_common/vulkan_instance.cpp8
-rw-r--r--src/video_core/vulkan_common/vulkan_library.cpp16
-rw-r--r--src/yuzu/CMakeLists.txt12
5 files changed, 48 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index af9f394f1..7858d0450 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,7 +49,7 @@ option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
49 49
50option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) 50option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
51 51
52cmake_dependent_option(YUZU_ROOM "Compile LDN room server" ON "NOT ANDROID" OFF) 52CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Compile LDN room server" ON "NOT ANDROID" OFF)
53 53
54CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF) 54CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF)
55 55
@@ -63,6 +63,8 @@ option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" OFF)
63 63
64CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF) 64CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
65 65
66CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF)
67
66set(DEFAULT_ENABLE_OPENSSL ON) 68set(DEFAULT_ENABLE_OPENSSL ON)
67if (ANDROID OR WIN32 OR APPLE) 69if (ANDROID OR WIN32 OR APPLE)
68 # - Windows defaults to the Schannel backend. 70 # - Windows defaults to the Schannel backend.
diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake
index 972f5ca74..a52148bd8 100644
--- a/CMakeModules/DownloadExternals.cmake
+++ b/CMakeModules/DownloadExternals.cmake
@@ -36,3 +36,21 @@ endif()
36message(STATUS "Using bundled binaries at ${prefix}") 36message(STATUS "Using bundled binaries at ${prefix}")
37set(${prefix_var} "${prefix}" PARENT_SCOPE) 37set(${prefix_var} "${prefix}" PARENT_SCOPE)
38endfunction() 38endfunction()
39
40function(download_moltenvk_external platform version)
41 set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
42 set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
43 if (NOT EXISTS ${MOLTENVK_DIR})
44 if (NOT EXISTS ${MOLTENVK_TAR})
45 file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar
46 ${MOLTENVK_TAR} SHOW_PROGRESS)
47 endif()
48
49 execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
50 WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
51 endif()
52
53 # Add the MoltenVK library path to the prefix so find_library can locate it.
54 list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
55 set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
56endfunction()
diff --git a/src/video_core/vulkan_common/vulkan_instance.cpp b/src/video_core/vulkan_common/vulkan_instance.cpp
index 72aedb8d8..bc16145be 100644
--- a/src/video_core/vulkan_common/vulkan_instance.cpp
+++ b/src/video_core/vulkan_common/vulkan_instance.cpp
@@ -41,9 +41,6 @@ namespace {
41 bool enable_validation) { 41 bool enable_validation) {
42 std::vector<const char*> extensions; 42 std::vector<const char*> extensions;
43 extensions.reserve(6); 43 extensions.reserve(6);
44#ifdef __APPLE__
45 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
46#endif
47 switch (window_type) { 44 switch (window_type) {
48 case Core::Frontend::WindowSystemType::Headless: 45 case Core::Frontend::WindowSystemType::Headless:
49 break; 46 break;
@@ -74,6 +71,11 @@ namespace {
74 if (window_type != Core::Frontend::WindowSystemType::Headless) { 71 if (window_type != Core::Frontend::WindowSystemType::Headless) {
75 extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); 72 extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
76 } 73 }
74#ifdef __APPLE__
75 if (AreExtensionsSupported(dld, std::array{VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME})) {
76 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
77 }
78#endif
77 if (enable_validation) { 79 if (enable_validation) {
78 const bool debug_utils = 80 const bool debug_utils =
79 AreExtensionsSupported(dld, std::array{VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); 81 AreExtensionsSupported(dld, std::array{VK_EXT_DEBUG_UTILS_EXTENSION_NAME});
diff --git a/src/video_core/vulkan_common/vulkan_library.cpp b/src/video_core/vulkan_common/vulkan_library.cpp
index 47f6f2a03..0130f6a0d 100644
--- a/src/video_core/vulkan_common/vulkan_library.cpp
+++ b/src/video_core/vulkan_common/vulkan_library.cpp
@@ -19,13 +19,17 @@ std::shared_ptr<Common::DynamicLibrary> OpenLibrary(
19#else 19#else
20 auto library = std::make_shared<Common::DynamicLibrary>(); 20 auto library = std::make_shared<Common::DynamicLibrary>();
21#ifdef __APPLE__ 21#ifdef __APPLE__
22 const auto libvulkan_filename =
23 Common::FS::GetBundleDirectory() / "Contents/Frameworks/libvulkan.1.dylib";
24 const auto libmoltenvk_filename =
25 Common::FS::GetBundleDirectory() / "Contents/Frameworks/libMoltenVK.dylib";
26 const char* library_paths[] = {std::getenv("LIBVULKAN_PATH"), libvulkan_filename.c_str(),
27 libmoltenvk_filename.c_str()};
22 // Check if a path to a specific Vulkan library has been specified. 28 // Check if a path to a specific Vulkan library has been specified.
23 char* const libvulkan_env = std::getenv("LIBVULKAN_PATH"); 29 for (const auto& library_path : library_paths) {
24 if (!libvulkan_env || !library->Open(libvulkan_env)) { 30 if (library_path && library->Open(library_path)) {
25 // Use the libvulkan.dylib from the application bundle. 31 break;
26 const auto filename = 32 }
27 Common::FS::GetBundleDirectory() / "Contents/Frameworks/libvulkan.dylib";
28 void(library->Open(Common::FS::PathToUTF8String(filename).c_str()));
29 } 33 }
30#else 34#else
31 std::string filename = Common::DynamicLibrary::GetVersionedFilename("vulkan", 1); 35 std::string filename = Common::DynamicLibrary::GetVersionedFilename("vulkan", 1);
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 2e4da696c..8f86a1553 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -313,6 +313,18 @@ if (APPLE)
313 target_sources(yuzu PRIVATE ${MACOSX_ICON}) 313 target_sources(yuzu PRIVATE ${MACOSX_ICON})
314 set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE) 314 set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE)
315 set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) 315 set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
316
317 if (NOT USE_SYSTEM_MOLTENVK)
318 set(MOLTENVK_PLATFORM "macOS")
319 set(MOLTENVK_VERSION "v1.2.5")
320 download_moltenvk_external(${MOLTENVK_PLATFORM} ${MOLTENVK_VERSION})
321 endif()
322 find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
323 message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
324 set_source_files_properties(${MOLTENVK_LIBRARY} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks
325 XCODE_FILE_ATTRIBUTES "CodeSignOnCopy")
326 target_sources(yuzu PRIVATE ${MOLTENVK_LIBRARY})
327
316elseif(WIN32) 328elseif(WIN32)
317 # compile as a win32 gui application instead of a console application 329 # compile as a win32 gui application instead of a console application
318 if (QT_VERSION VERSION_GREATER_EQUAL 6) 330 if (QT_VERSION VERSION_GREATER_EQUAL 6)