diff options
author | Feng Chen <chen.feng@glority.cn> | 2023-08-17 03:17:56 +0200 |
---|---|---|
committer | Feng Chen <vonchenplus@gmail.com> | 2023-08-22 04:22:28 +0200 |
commit | 87022a4833fd693274275e1153d80d2e56fe0b11 (patch) | |
tree | 331327060ac062ec1584a0c86c7adbd5ccf436f1 /src | |
parent | Merge pull request #11287 from liamwhite/replaced-bytes (diff) | |
download | yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar.gz yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar.bz2 yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar.lz yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar.xz yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.tar.zst yuzu-87022a4833fd693274275e1153d80d2e56fe0b11.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/video_core/vulkan_common/vulkan_instance.cpp | 8 | ||||
-rw-r--r-- | src/video_core/vulkan_common/vulkan_library.cpp | 16 | ||||
-rw-r--r-- | src/yuzu/CMakeLists.txt | 12 |
3 files changed, 27 insertions, 9 deletions
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 { bool enable_validation) { std::vector<const char*> extensions; extensions.reserve(6); -#ifdef __APPLE__ - extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); -#endif switch (window_type) { case Core::Frontend::WindowSystemType::Headless: break; @@ -74,6 +71,11 @@ namespace { if (window_type != Core::Frontend::WindowSystemType::Headless) { extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); } +#ifdef __APPLE__ + if (AreExtensionsSupported(dld, std::array{VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME})) { + extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); + } +#endif if (enable_validation) { const bool debug_utils = 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( #else auto library = std::make_shared<Common::DynamicLibrary>(); #ifdef __APPLE__ + const auto libvulkan_filename = + Common::FS::GetBundleDirectory() / "Contents/Frameworks/libvulkan.1.dylib"; + const auto libmoltenvk_filename = + Common::FS::GetBundleDirectory() / "Contents/Frameworks/libMoltenVK.dylib"; + const char* library_paths[] = {std::getenv("LIBVULKAN_PATH"), libvulkan_filename.c_str(), + libmoltenvk_filename.c_str()}; // Check if a path to a specific Vulkan library has been specified. - char* const libvulkan_env = std::getenv("LIBVULKAN_PATH"); - if (!libvulkan_env || !library->Open(libvulkan_env)) { - // Use the libvulkan.dylib from the application bundle. - const auto filename = - Common::FS::GetBundleDirectory() / "Contents/Frameworks/libvulkan.dylib"; - void(library->Open(Common::FS::PathToUTF8String(filename).c_str())); + for (const auto& library_path : library_paths) { + if (library_path && library->Open(library_path)) { + break; + } } #else 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) target_sources(yuzu PRIVATE ${MACOSX_ICON}) set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE) set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) + + if (NOT USE_SYSTEM_MOLTENVK) + set(MOLTENVK_PLATFORM "macOS") + set(MOLTENVK_VERSION "v1.2.5") + download_moltenvk_external(${MOLTENVK_PLATFORM} ${MOLTENVK_VERSION}) + endif() + find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) + message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.") + set_source_files_properties(${MOLTENVK_LIBRARY} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks + XCODE_FILE_ATTRIBUTES "CodeSignOnCopy") + target_sources(yuzu PRIVATE ${MOLTENVK_LIBRARY}) + elseif(WIN32) # compile as a win32 gui application instead of a console application if (QT_VERSION VERSION_GREATER_EQUAL 6) |