fix(macos): macOS build fixes and MoltenVK improvements

- Switch to Ryujinx MoltenVK build compiled with older Metal SDK to avoid
  MSL 3.2 thread_scope_subgroup bugs that cause text rendering issues
- Exclude Apple from GNU ld.bfd linker option (macOS uses different linker)
- Handle VK_ERROR_FRAGMENTED_POOL in Vulkan descriptor pool allocation
This commit is contained in:
sylveondeko
2025-12-12 10:57:23 -05:00
parent 6afb4e5370
commit 3b35c2eeb9
5 changed files with 8 additions and 7 deletions

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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);