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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 z10&0421b@|42ǥ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 delta 28744 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 + + 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();