From b41251e360b6784b3129d62442f679d60188903b Mon Sep 17 00:00:00 2001 From: stossy11 <69031796+stossy11@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:22:25 +1100 Subject: [PATCH] cool --- MeloNX-XC/MeloNX.xcodeproj/project.pbxproj | 6 + .../UserInterfaceState.xcuserstate | Bin 54873 -> 145368 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + MeloNX-XC/MeloNX/ContentView.swift | 47 ++-- MeloNX-XC/MeloNX/Core/Ryujinx.swift | 29 ++- MeloNX-XC/MeloNX/Info.plist | 5 +- MeloNX-XC/MeloNX/MetalVIew.swift | 210 ++++++++++++++++++ .../Hid/Types/SharedMemory/SharedMemory.cs | 35 +-- src/Ryujinx.HLE/Switch.cs | 1 - 9 files changed, 289 insertions(+), 50 deletions(-) create mode 100644 MeloNX-XC/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 MeloNX-XC/MeloNX/MetalVIew.swift diff --git a/MeloNX-XC/MeloNX.xcodeproj/project.pbxproj b/MeloNX-XC/MeloNX.xcodeproj/project.pbxproj index 33a8f9a80..a55c8e096 100644 --- a/MeloNX-XC/MeloNX.xcodeproj/project.pbxproj +++ b/MeloNX-XC/MeloNX.xcodeproj/project.pbxproj @@ -347,6 +347,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportsDocumentBrowser = YES; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -356,6 +357,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", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; @@ -385,6 +388,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportsDocumentBrowser = YES; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -394,6 +398,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", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; diff --git a/MeloNX-XC/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/MeloNX-XC/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index 9664c52eb5dc434289c3c9ccb73893498e0643ce..db72fd225cbda276b4a9fb3cfb0c80fcc63aa886 100644 GIT binary patch literal 145368 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�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 TrOR($4{7`D>;Hca7ES&SuJVX< literal 54873 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 amb-2J|1^kc)Bcyg-1vVj;{Rh?-TwjosS(To diff --git a/MeloNX-XC/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MeloNX-XC/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 000000000..5d0175364 --- /dev/null +++ b/MeloNX-XC/MeloNX.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/MeloNX-XC/MeloNX/ContentView.swift b/MeloNX-XC/MeloNX/ContentView.swift index a20c1545d..4cc494676 100644 --- a/MeloNX-XC/MeloNX/ContentView.swift +++ b/MeloNX-XC/MeloNX/ContentView.swift @@ -12,24 +12,31 @@ import GameController var theWindow: UIWindow? = nil struct ContentView: View { + @State var device: MTLDevice? = MTLCreateSystemDefaultDevice() @State var gameUrl: URL? @State var showFileImporter: Bool = false + @State var emulationStarted: Bool = false var body: some View { - VStack { - Button { - showFileImporter.toggle() - } label: { - Text("Select Game") - } - if let gameUrl { + ZStack { + + + VStack { + Text("NX iOS") Button { - DispatchQueue.main.async { - showVirtualController(url: gameUrl) - } + showFileImporter.toggle() } label: { - Text("Go!") + Text("Select Game") + } + if let gameUrl { + Button { + emulationStarted = true + gameUrl.startAccessingSecurityScopedResource() + showVirtualController(url: gameUrl) + } label: { + Text("Go!") + } + .padding(8) } - .padding(8) } } .padding() @@ -55,11 +62,9 @@ func startEmulation(game: URL) { enableKeyboard: false, graphicsBackend: "Vulkan" ) - DispatchQueue.main.async { - SDL_SetMainReady() - SDL_iPhoneSetEventPump(SDL_TRUE) - patchMakeKeyAndVisible() - } + patchMakeKeyAndVisible() + SDL_SetMainReady() + SDL_iPhoneSetEventPump(SDL_TRUE) let emulator = RyujinxEmulator() do { try emulator.startWithRunLoop(config: config) @@ -78,14 +83,10 @@ func patchMakeKeyAndVisible() { extension UIWindow { @objc func wdb_makeKeyAndVisible() { print("Making window key and visible...") - if #available(iOS 13.0, *) { - self.windowScene = (UIApplication.shared.connectedScenes.first! as! UIWindowScene) - } + self.windowScene = (UIApplication.shared.connectedScenes.first! as! UIWindowScene) self.wdb_makeKeyAndVisible() theWindow = self - if #available(iOS 15.0, *) { - reconnectVirtualController() - } + reconnectVirtualController() } } diff --git a/MeloNX-XC/MeloNX/Core/Ryujinx.swift b/MeloNX-XC/MeloNX/Core/Ryujinx.swift index 9082f39dc..6bf39257f 100644 --- a/MeloNX-XC/MeloNX/Core/Ryujinx.swift +++ b/MeloNX-XC/MeloNX/Core/Ryujinx.swift @@ -61,13 +61,14 @@ class RyujinxEmulator { ] */ - args.append("ryujinx") - + args.append(config.inputPath) args.append("--graphics-backend") args.append(config.graphicsBackend) - + args.append(contentsOf: ["--memory-manager-mode", "SoftwarePageTable"]) + // args.append(contentsOf: ["--fullscreen", "true"]) + args.append(contentsOf: ["--enable-debug-logs", "true"]) + args.append(contentsOf: ["--enable-trace-logs", "true"]) // args.append("--input-path") - args.append(config.inputPath) args.append(contentsOf: config.additionalArgs) @@ -82,6 +83,7 @@ class RyujinxEmulator { var argvPtrs = cArgs + let result = ryujinxMain(Int32(args.count), &argvPtrs) if result != 0 { @@ -102,16 +104,19 @@ class RyujinxEmulator { let port = Port() runLoop.add(port, forMode: .default) - - do { - try Self.start(with: config) - } catch { - Self.log("Emulation failed to start: \(error)") - self.isRunning = false - return + + DispatchQueue.main.async { + do { + try Self.start(with: config) + } catch { + Self.log("Emulation failed to start: \(error)") + self.isRunning = false + return + } } + while self.isRunning && runLoop.run(mode: .default, before: .distantFuture) { autoreleasepool { } @@ -122,6 +127,8 @@ class RyujinxEmulator { } emulationThread?.name = "RyujinxEmulationThread" + emulationThread?.qualityOfService = .userInteractive + emulationThread?.threadPriority = 0.9 emulationThread?.start() } diff --git a/MeloNX-XC/MeloNX/Info.plist b/MeloNX-XC/MeloNX/Info.plist index 0c67376eb..ff579a6ca 100644 --- a/MeloNX-XC/MeloNX/Info.plist +++ b/MeloNX-XC/MeloNX/Info.plist @@ -1,5 +1,8 @@ - + + UIFileSharingEnabled + + diff --git a/MeloNX-XC/MeloNX/MetalVIew.swift b/MeloNX-XC/MeloNX/MetalVIew.swift new file mode 100644 index 000000000..99603bf91 --- /dev/null +++ b/MeloNX-XC/MeloNX/MetalVIew.swift @@ -0,0 +1,210 @@ +// +// MetalVIew.swift +// MeloNX +// +// Created by Stossy11 on 27/10/2024. +// + +import SwiftUI +import Metal +import MetalKit + +struct MetalView: UIViewRepresentable { + let device: MTLDevice? + let configure: (UIView) -> Void + + func makeUIView(context: Context) -> SudachiScreenView { + let view = SudachiScreenView() + configure(view.primaryScreen) + return view + } + + func updateUIView(_ uiView: SudachiScreenView, context: Context) { + // + } +} + + +class SudachiScreenView: UIView { + var primaryScreen: UIView! + var portraitconstraints = [NSLayoutConstraint]() + var landscapeconstraints = [NSLayoutConstraint]() + var fullscreenconstraints = [NSLayoutConstraint]() + let userDefaults = UserDefaults.standard + + override init(frame: CGRect) { + super.init(frame: frame) + if userDefaults.bool(forKey: "isfullscreen") { + // setupSudachiScreenforcools() + setupSudachiScreen2() + } else if userDefaults.bool(forKey: "isairplay") { + setupSudachiScreen2() + } else if userDefaults.bool(forKey: "169fullscreen") { // this is for the 16/9 aspect ratio full screen + setupSudachiScreenforcools() + } else if UIDevice.current.userInterfaceIdiom == .pad { + setupSudachiScreenforiPad() + } else { + setupSudachiScreen() + } + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + if userDefaults.bool(forKey: "isfullscreen") { + setupSudachiScreen2() + } else if userDefaults.bool(forKey: "isairplay") { + setupSudachiScreen2() + } else if UIDevice.current.userInterfaceIdiom == .pad { + setupSudachiScreenforiPad() + } else { + setupSudachiScreen() + } + + } + + + func setupSudachiScreen2() { + primaryScreen = MTKView(frame: .zero, device: MTLCreateSystemDefaultDevice()) + primaryScreen.translatesAutoresizingMaskIntoConstraints = false + primaryScreen.clipsToBounds = true + addSubview(primaryScreen) + + fullscreenconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: topAnchor), + primaryScreen.leadingAnchor.constraint(equalTo: leadingAnchor), + primaryScreen.trailingAnchor.constraint(equalTo: trailingAnchor), + primaryScreen.bottomAnchor.constraint(equalTo: bottomAnchor) + ] + + addConstraints(fullscreenconstraints) + } + + func setupSudachiScreenforcools() { // oh god this took a long time, im going insane + primaryScreen = MTKView(frame: .zero, device: MTLCreateSystemDefaultDevice()) + primaryScreen.translatesAutoresizingMaskIntoConstraints = false + primaryScreen.clipsToBounds = true + + addSubview(primaryScreen) + + primaryScreen.layer.cornerRadius = 5 + primaryScreen.layer.masksToBounds = true + + + NSLayoutConstraint.activate([ + primaryScreen.centerXAnchor.constraint(equalTo: centerXAnchor), + primaryScreen.centerYAnchor.constraint(equalTo: centerYAnchor), + primaryScreen.widthAnchor.constraint(lessThanOrEqualTo: widthAnchor), + primaryScreen.heightAnchor.constraint(lessThanOrEqualTo: heightAnchor) + ]) + + let aspectRatio: CGFloat = 16.0/9.0 + let aspectRatioConstraint = NSLayoutConstraint( + item: primaryScreen ?? UIView(), + attribute: .width, + relatedBy: .equal, + toItem: primaryScreen, + attribute: .height, + multiplier: aspectRatio, + constant: 0 + ) + aspectRatioConstraint.priority = .required - 1 + primaryScreen.addConstraint(aspectRatioConstraint) + + let heightConstraint = primaryScreen.heightAnchor.constraint(equalTo: heightAnchor) + heightConstraint.priority = .defaultHigh + let widthConstraint = primaryScreen.widthAnchor.constraint(equalTo: widthAnchor) + widthConstraint.priority = .defaultHigh + + NSLayoutConstraint.activate([heightConstraint, widthConstraint]) + + // Make primaryScreen fill container + fullscreenconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: primaryScreen.topAnchor), + primaryScreen.bottomAnchor.constraint(equalTo: primaryScreen.bottomAnchor), + primaryScreen.leadingAnchor.constraint(equalTo: primaryScreen.leadingAnchor), + primaryScreen.trailingAnchor.constraint(equalTo: primaryScreen.trailingAnchor) + ] + + NSLayoutConstraint.activate(fullscreenconstraints) + } + + func setupSudachiScreenforiPad() { + primaryScreen = MTKView(frame: .zero, device: MTLCreateSystemDefaultDevice()) + primaryScreen.translatesAutoresizingMaskIntoConstraints = false + primaryScreen.clipsToBounds = true + primaryScreen.layer.borderColor = UIColor.secondarySystemBackground.cgColor + primaryScreen.layer.borderWidth = 3 + primaryScreen.layer.cornerCurve = .continuous + primaryScreen.layer.cornerRadius = 10 + addSubview(primaryScreen) + + + portraitconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10), + primaryScreen.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 10), + primaryScreen.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor, constant: -10), + primaryScreen.heightAnchor.constraint(equalTo: primaryScreen.widthAnchor, multiplier: 9 / 16), + ] + + landscapeconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 50), + primaryScreen.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -100), + primaryScreen.widthAnchor.constraint(equalTo: primaryScreen.heightAnchor, multiplier: 16 / 9), + primaryScreen.centerXAnchor.constraint(equalTo: safeAreaLayoutGuide.centerXAnchor), + ] + + + updateConstraintsForOrientation() + } + + + + func setupSudachiScreen() { + primaryScreen = MTKView(frame: .zero, device: MTLCreateSystemDefaultDevice()) + primaryScreen.translatesAutoresizingMaskIntoConstraints = false + primaryScreen.clipsToBounds = true + primaryScreen.layer.borderColor = UIColor.secondarySystemBackground.cgColor + primaryScreen.layer.borderWidth = 3 + primaryScreen.layer.cornerCurve = .continuous + primaryScreen.layer.cornerRadius = 10 + addSubview(primaryScreen) + + + portraitconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10), + primaryScreen.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 10), + primaryScreen.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor, constant: -10), + primaryScreen.heightAnchor.constraint(equalTo: primaryScreen.widthAnchor, multiplier: 9 / 16), + ] + + landscapeconstraints = [ + primaryScreen.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10), + primaryScreen.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -10), + primaryScreen.widthAnchor.constraint(equalTo: primaryScreen.heightAnchor, multiplier: 16 / 9), + primaryScreen.centerXAnchor.constraint(equalTo: safeAreaLayoutGuide.centerXAnchor), + ] + + updateConstraintsForOrientation() + } + + override func layoutSubviews() { + super.layoutSubviews() + updateConstraintsForOrientation() + } + + private func updateConstraintsForOrientation() { + + if userDefaults.bool(forKey: "isfullscreen") { + removeConstraints(portraitconstraints) + removeConstraints(landscapeconstraints) + removeConstraints(fullscreenconstraints) + addConstraints(fullscreenconstraints) + } else { + removeConstraints(portraitconstraints) + removeConstraints(landscapeconstraints) + + let isPortrait = UIApplication.shared.statusBarOrientation.isPortrait + addConstraints(isPortrait ? portraitconstraints : landscapeconstraints) + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs index d6283eb57..d6d5a0160 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs @@ -5,56 +5,63 @@ using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory { ///

- /// Represent the shared memory shared between applications for input. + /// Represents the shared memory used for input, shared between applications. /// [StructLayout(LayoutKind.Explicit, Size = 0x40000)] struct SharedMemory { + // Ensure each struct has a defined size and is properly aligned in memory. + /// - /// Debug controller. + /// Debug controller state (size: approximately 0x400). /// [FieldOffset(0)] public RingLifo DebugPad; /// - /// Touchscreen. + /// Touchscreen state (size: approximately 0x3000). /// [FieldOffset(0x400)] public RingLifo TouchScreen; /// - /// Mouse. + /// Mouse state (size: approximately 0x400). /// [FieldOffset(0x3400)] public RingLifo Mouse; /// - /// Keyboard. + /// Keyboard state (size: approximately 0x400). /// [FieldOffset(0x3800)] public RingLifo Keyboard; /// - /// Nintendo Pads. + /// Nintendo Pads (size: approximately 0x800). /// - [FieldOffset(0x9A00)] + [FieldOffset(0x3C00)] public Array10 Npads; + /// + /// Creates a SharedMemory instance with each component initialized. + /// public static SharedMemory Create() { - SharedMemory result = new() - { - DebugPad = RingLifo.Create(), - TouchScreen = RingLifo.Create(), - Mouse = RingLifo.Create(), - Keyboard = RingLifo.Create(), - }; + // Initialize each component separately to avoid potential layout issues. + SharedMemory result = new SharedMemory(); + + result.DebugPad = RingLifo.Create(); + result.TouchScreen = RingLifo.Create(); + result.Mouse = RingLifo.Create(); + result.Keyboard = RingLifo.Create(); + // Initialize each Npad state in a loop for (int i = 0; i < result.Npads.Length; i++) { result.Npads[i] = NpadState.Create(); diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 0c7112c0a..4083328d0 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -52,7 +52,6 @@ namespace Ryujinx.HLE Gpu = new GpuContext(Configuration.GpuRenderer); System = new HOS.Horizon(this); Statistics = new PerformanceStatistics(); - Hid = new Hid(this, System.HidStorage); Processes = new ProcessLoader(this); TamperMachine = new TamperMachine();