diff --git a/src/ARMeilleure/Translation/Cache/JitCache.cs b/src/ARMeilleure/Translation/Cache/JitCache.cs index 1845f199d..486e860a3 100644 --- a/src/ARMeilleure/Translation/Cache/JitCache.cs +++ b/src/ARMeilleure/Translation/Cache/JitCache.cs @@ -15,7 +15,7 @@ namespace ARMeilleure.Translation.Cache static partial class JitCache { private static readonly int _pageSize = (int)MemoryBlock.GetPageSize(); - private static readonly int _pageMask = _pageSize - 2; + private static readonly int _pageMask = _pageSize - 8; private const int CodeAlignment = 4; // Bytes. private const int CacheSize = 2047 * 1024 * 1024; diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index 21717bbdf..ac89abc3d 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -90,6 +90,9 @@ 5650564D2D2A75B300C8BB1E /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = { isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet; attributesByRelativePath = { + "Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib" = ( + CodeSignOnCopy, + ); "Dependencies/Dynamic Libraries/SoftwareKeyboard.framework" = ( CodeSignOnCopy, RemoveHeadersOnCopy, @@ -149,6 +152,7 @@ "Dependencies/Dynamic Libraries/libavcodec.dylib", "Dependencies/Dynamic Libraries/libavutil.dylib", "Dependencies/Dynamic Libraries/libMoltenVK.dylib", + "Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib", "Dependencies/Dynamic Libraries/SoftwareKeyboard.framework", Dependencies/XCFrameworks/libavcodec.xcframework, Dependencies/XCFrameworks/libavfilter.xcframework, diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index ff54f4ed2..cc7354a9f 100644 Binary files a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index bf8cccbc8..70244900a 100644 --- a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -36,5 +36,21 @@ landmarkType = "7"> + + + + diff --git a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcschemes/xcschememanagement.plist b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcschemes/xcschememanagement.plist index 8ff6cf524..62375ba69 100644 --- a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcschemes/xcschememanagement.plist @@ -12,12 +12,12 @@ Ryujinx.xcscheme_^#shared#^_ orderHint - 2 + 1 com.Stossy11.MeloNX.RyujinxAg.xcscheme_^#shared#^_ orderHint - 1 + 2 SuppressBuildableAutocreation diff --git a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift index 204afd17f..31e01b6f1 100644 --- a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift +++ b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift @@ -97,7 +97,7 @@ class Ryujinx { isRunning = true - RunLoop.current.perform { + DispatchQueue.main.async { let url = URL(string: config.gamepath)! do { @@ -152,10 +152,11 @@ class Ryujinx { args.append(contentsOf: ["--memory-manager-mode", config.memoryManagerMode]) - args.append(contentsOf: ["--exclusive-fullscreen", String(true)]) - args.append(contentsOf: ["--exclusive-fullscreen-width", "\(Int(UIScreen.main.bounds.width))"]) - args.append(contentsOf: ["--exclusive-fullscreen-height", "\(Int(UIScreen.main.bounds.height))"]) + // args.append(contentsOf: ["--exclusive-fullscreen", String(true)]) + // args.append(contentsOf: ["--exclusive-fullscreen-width", "\(Int(UIScreen.main.bounds.width))"]) + // args.append(contentsOf: ["--exclusive-fullscreen-height", "\(Int(UIScreen.main.bounds.height))"]) // We don't need this. Ryujinx should handle it fine :3 + // this also causes crashes in some games :3 if config.fullscreen { args.append(contentsOf: ["--aspect-ratio", "Stretched"]) @@ -167,7 +168,7 @@ class Ryujinx { } - args.append("--disable-vsync") + // args.append("--disable-vsync") if config.resscale != 1.0 { diff --git a/src/MeloNX/MeloNX/App/Views/ContentView.swift b/src/MeloNX/MeloNX/App/Views/ContentView.swift index b6603d4c5..d78eef9fd 100644 --- a/src/MeloNX/MeloNX/App/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/App/Views/ContentView.swift @@ -48,8 +48,11 @@ struct ContentView: View { _config = State(initialValue: defaultConfig) let defaultSettings: [MoltenVKSettings] = [ - MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_PRIVATE_API", value: "1"), - MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1") + // MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "1"), + // MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "2"), + // MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "0"), + // MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1"), + // MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_PRIVATE_API", value: "0") ] _settings = State(initialValue: defaultSettings) @@ -61,7 +64,7 @@ struct ContentView: View { // MARK: - Body var body: some View { - if let game, quits == false { + if game != nil, quits == false { if isLoading { emulationView .onAppear() { @@ -80,7 +83,7 @@ struct ContentView: View { } .onAppear() { - isAnimating = false + isAnimating = false } } } else { @@ -259,15 +262,11 @@ struct ContentView: View { config.gamepath = game.fileURL.path config.inputids = Array(Set(currentControllers.map(\.id))) - var setting: MoltenVKSettings - if game.titleName.lowercased() != "super mario odyssey" { - setting = (MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "0")) - } else { - setting = (MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "1")) + if game.titleName.lowercased() == "super mario odyssey" { + let setting = MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "1") + setenv(setting.string, setting.value, 1) } - setenv(setting.string, setting.value, 1) - if config.inputids.isEmpty { diff --git a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift index 838f227fc..aea9adb64 100644 --- a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift +++ b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift @@ -39,6 +39,7 @@ struct SettingsView: View { return memoryManagerModes.filter { $0.1.localizedCaseInsensitiveContains(searchText) } } + var body: some View { iOSNav { List { @@ -65,6 +66,8 @@ struct SettingsView: View { labelWithIcon("Docked Mode", iconName: "dock.rectangle") } .tint(.blue) + + VStack(alignment: .leading, spacing: 10) { HStack { diff --git a/src/MeloNX/MeloNX/MeloNX.entitlements b/src/MeloNX/MeloNX/MeloNX.entitlements index caa3d5839..99f471672 100644 --- a/src/MeloNX/MeloNX/MeloNX.entitlements +++ b/src/MeloNX/MeloNX/MeloNX.entitlements @@ -2,8 +2,6 @@ - com.apple.developer.kernel.extended-virtual-addressing - com.apple.developer.kernel.increased-memory-limit diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs index 7395291dd..fadfc66dd 100644 --- a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Graphics.Vulkan.MoltenVK config.UseMetalArgumentBuffers = true; config.SemaphoreSupportStyle = MVKVkSemaphoreSupportStyle.MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE; - // config.SynchronousQueueSubmits = false; + config.SynchronousQueueSubmits = false; config.ResumeLostDevice = true;