diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index b9cdd4b14..13e35880a 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -54,6 +54,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 4E50F49E2D5CC28B0080F1D1 /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; 4E80AA092CD6FAA800029585 /* Embed Libraries */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -269,6 +279,7 @@ 4E80A98A2CD6F54500029585 /* Frameworks */, 4E80A98B2CD6F54500029585 /* Resources */, 4E80AA092CD6FAA800029585 /* Embed Libraries */, + 4E50F49E2D5CC28B0080F1D1 /* Embed Watch Content */, ); buildRules = ( ); @@ -339,7 +350,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1610; + LastSwiftUpdateCheck = 1620; LastUpgradeCheck = 1610; TargetAttributes = { 4E80A98C2CD6F54500029585 = { @@ -641,6 +652,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = fast; GENERATE_INFOPLIST_FILE = YES; @@ -687,6 +700,10 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; @@ -728,6 +745,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = fast; GENERATE_INFOPLIST_FILE = YES; @@ -774,6 +793,10 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; 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 67e0b687b..dc73d422c 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/xcschemes/xcschememanagement.plist b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcschemes/xcschememanagement.plist index 62375ba69..19b8e18b3 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 - 1 + 4 com.Stossy11.MeloNX.RyujinxAg.xcscheme_^#shared#^_ orderHint - 2 + 3 SuppressBuildableAutocreation diff --git a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift index 7ed6c80ec..a168f5d84 100644 --- a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift +++ b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift @@ -91,6 +91,7 @@ class Ryujinx { var ignoreMissingServices: Bool var expandRam: Bool var dfsIntegrityChecks: Bool + var disablePTC: Bool init(gamepath: String, @@ -112,7 +113,8 @@ class Ryujinx { ignoreMissingServices: Bool = false, hypervisor: Bool = false, expandRam: Bool = false, - dfsIntegrityChecks: Bool = false + dfsIntegrityChecks: Bool = false, + disablePTC: Bool = false ) { self.gamepath = gamepath self.inputids = inputids @@ -134,6 +136,7 @@ class Ryujinx { self.ignoreMissingServices = ignoreMissingServices self.hypervisor = hypervisor self.dfsIntegrityChecks = dfsIntegrityChecks + self.disablePTC = disablePTC } } @@ -261,8 +264,9 @@ class Ryujinx { args.append("--correct-controller") } - - // args.append("--disable-vsync") + if config.disablePTC { + args.append("--disable-ptc") + } if config.hypervisor { args.append("--use-hypervisor") diff --git a/src/MeloNX/MeloNX/App/Views/ContentView.swift b/src/MeloNX/MeloNX/App/Views/ContentView.swift index 3747ef73d..6ee4d3f7d 100644 --- a/src/MeloNX/MeloNX/App/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/App/Views/ContentView.swift @@ -42,6 +42,7 @@ struct ContentView: View { @AppStorage("quit") var quit: Bool = false @State var quits: Bool = false @AppStorage("MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS") var mVKPreFillBuffer: Bool = true + @AppStorage("MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS") var syncqsubmits: Bool = false // Loading Animation @State private var clumpOffset: CGFloat = -100 @@ -62,6 +63,7 @@ struct ContentView: View { MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "1"), MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_PRIVATE_API", value: "1"), MoltenVKSettings(string: "MVK_DEBUG", value: "0"), + MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "0"), // MoltenVKSettings(string: "MVK_CONFIG_LOG_LEVEL", value: "0"), // MVK_CONFIG_LOG_LEVEL //MVK_DEBUG @@ -354,6 +356,11 @@ struct ContentView: View { setenv(setting.string, setting.value, 1) } + if syncqsubmits { + let setting = MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "2") + setenv(setting.string, setting.value, 1) + } + if config.inputids.isEmpty { config.inputids.append("0") } diff --git a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift index 5f70532c7..374767c2a 100644 --- a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift +++ b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift @@ -34,6 +34,7 @@ struct SettingsView: View { @AppStorage("showScreenShotButton") var ssb: Bool = false @AppStorage("MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS") var mVKPreFillBuffer: Bool = false + @AppStorage("MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS") var syncqsubmits: Bool = false @AppStorage("performacehud") var performacehud: Bool = false @@ -85,8 +86,7 @@ struct SettingsView: View { Toggle(isOn: $config.macroHLE) { labelWithIcon("Macro HLE", iconName: "gearshape") }.tint(.blue) - - + VStack(alignment: .leading, spacing: 10) { HStack { @@ -302,8 +302,12 @@ struct SettingsView: View { } } + Toggle(isOn: $config.disablePTC) { + labelWithIcon("Disable PTC", iconName: "cpu") + }.tint(.blue) + if let cpuInfo = getCPUInfo(), cpuInfo.hasPrefix("Apple M") { - if #available (iOS 16.4, *), getEntitlementValue("com.apple.private.hypervisor") { + if #available (iOS 16.4, *) { Toggle(isOn: .constant(false)) { labelWithIcon("Hypervisor", iconName: "bolt.fill") } @@ -312,19 +316,18 @@ struct SettingsView: View { .onAppear() { print("CPU Info: \(cpuInfo)") } - } else { + } else if getEntitlementValue("com.apple.private.hypervisor") { Toggle(isOn: $config.hypervisor) { labelWithIcon("Hypervisor", iconName: "bolt.fill") } .tint(.blue) .onAppear() { print("CPU Info: \(cpuInfo)") - } } } } header: { - Text("CPU Mode") + Text("CPU") .font(.title3.weight(.semibold)) .textCase(nil) .headerProminence(.increased) @@ -391,6 +394,24 @@ struct SettingsView: View { .tint(.blue) } + Toggle(isOn: $syncqsubmits) { + labelWithIcon("MVK: Synchronous Queue Submits", iconName: "line.diagonal") + }.tint(.blue) + .contextMenu() { + Button { + if let mainWindow = UIApplication.shared.windows.last { + let alertController = UIAlertController(title: "About MVK: Synchronous Queue Submits", message: "Enable this option if Mario Kart 8 is crashing at Grand Prix mode.", preferredStyle: .alert) + + let doneButton = UIAlertAction(title: "OK", style: .cancel, handler: nil) + alertController.addAction(doneButton) + + mainWindow.rootViewController?.present(alertController, animated: true) + } + } label: { + Text("About") + } + } + DisclosureGroup { Toggle(isOn: $config.debuglogs) { labelWithIcon("Debug Logs", iconName: "exclamationmark.bubble") diff --git a/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/RyujinxKeyboard.framework/RyujinxKeyboard b/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/RyujinxKeyboard.framework/RyujinxKeyboard index 9e0dcd8c4..a1ba63ade 100755 Binary files a/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/RyujinxKeyboard.framework/RyujinxKeyboard and b/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/RyujinxKeyboard.framework/RyujinxKeyboard differ diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs index e9963d45a..f973746fa 100644 --- a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs @@ -23,13 +23,9 @@ namespace Ryujinx.Graphics.Vulkan.MoltenVK config.UseMetalArgumentBuffers = true; - if (OperatingSystem.IsIOSVersionAtLeast(17)) { - config.SemaphoreSupportStyle = MVKVkSemaphoreSupportStyle.MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE; - } + config.SemaphoreSupportStyle = MVKVkSemaphoreSupportStyle.MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE; config.MaxActiveMetalCommandBuffersPerQueue = 1024; - - config.SynchronousQueueSubmits = false; config.ResumeLostDevice = true;