diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake index 494b6f925..2753fd76a 100644 --- a/CMakeModules/DownloadExternals.cmake +++ b/CMakeModules/DownloadExternals.cmake @@ -44,12 +44,12 @@ endfunction() function(download_moltenvk_external platform version) set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK") set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar") - # MoltenVK release asset filenames use lowercase platform names (e.g., 'macos', 'ios'), - # but the extracted directory structure uses mixed case (e.g., 'macOS', 'iOS'). + # Use Ryujinx MoltenVK build which is compiled with an older Metal SDK + # This avoids MSL 3.2 bugs with thread_scope_subgroup and fixes text rendering issues string(TOLOWER "${platform}" MOLTENVK_ASSET_PLATFORM) if (NOT EXISTS ${MOLTENVK_DIR}) if (NOT EXISTS ${MOLTENVK_TAR}) - file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${MOLTENVK_ASSET_PLATFORM}.tar + file(DOWNLOAD https://github.com/V380-Ori/Ryujinx.MoltenVK/releases/download/${version}-ryujinx/MoltenVK-${MOLTENVK_ASSET_PLATFORM}.tar ${MOLTENVK_TAR} SHOW_PROGRESS) endif() diff --git a/src/citron/CMakeLists.txt b/src/citron/CMakeLists.txt index e7b481cec..2feb192e2 100644 --- a/src/citron/CMakeLists.txt +++ b/src/citron/CMakeLists.txt @@ -396,7 +396,7 @@ if (APPLE) if (NOT USE_SYSTEM_MOLTENVK) set(MOLTENVK_PLATFORM "macOS") - set(MOLTENVK_VERSION "v1.4.0-rc1") + set(MOLTENVK_VERSION "v1.4.0") download_moltenvk_external(${MOLTENVK_PLATFORM} ${MOLTENVK_VERSION}) endif() find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) @@ -421,7 +421,7 @@ elseif(WIN32) endif() # Robust static linking and linker selection under GCC LTO -if (NOT MSVC) +if (NOT MSVC AND NOT APPLE) # Use GNU ld.bfd for GCC LTO plugin-aware archive resolution target_link_options(citron PRIVATE -fuse-ld=bfd) diff --git a/src/citron_cmd/CMakeLists.txt b/src/citron_cmd/CMakeLists.txt index a49dfedd1..c44c0b172 100644 --- a/src/citron_cmd/CMakeLists.txt +++ b/src/citron_cmd/CMakeLists.txt @@ -29,7 +29,7 @@ add_executable(citron-cmd ) # Robust static linking and linker selection under GCC LTO -if (NOT MSVC) +if (NOT MSVC AND NOT APPLE) # Use GNU ld.bfd for GCC LTO plugin-aware archive resolution target_link_options(citron-cmd PRIVATE -fuse-ld=bfd) diff --git a/src/dedicated_room/CMakeLists.txt b/src/dedicated_room/CMakeLists.txt index 431674992..13aab79da 100644 --- a/src/dedicated_room/CMakeLists.txt +++ b/src/dedicated_room/CMakeLists.txt @@ -8,7 +8,7 @@ add_executable(citron-room ) # Robust static linking order using GNU ld group to resolve cycles -if (NOT MSVC) +if (NOT MSVC AND NOT APPLE) # Use GNU ld.bfd for GCC LTO archives (ld.lld cannot consume GCC LTO plugin objects) target_link_options(citron-room PRIVATE -fuse-ld=bfd) diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index f1aa45551..d6ac53148 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp @@ -565,6 +565,7 @@ DescriptorSets DescriptorPool::Allocate(const VkDescriptorSetAllocateInfo& ai) c case VK_SUCCESS: return DescriptorSets(std::move(sets), num, owner, handle, *dld); case VK_ERROR_OUT_OF_POOL_MEMORY: + case VK_ERROR_FRAGMENTED_POOL: return {}; default: throw Exception(result);