mirror of
https://git.citron-emu.org/citron/emulator
synced 2025-12-19 02:33:32 +00:00
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:
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user