From d0823b1acb80994ba89503831b8c9bd77c7bc3a8 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 11 Jan 2021 14:12:44 -0600 Subject: [PATCH] Raises MelonDSDeltaCore maximum Fast Forward speed to 3x --- Delta/Emulation/GameViewController.swift | 15 ++++++--------- Delta/Extensions/UIDevice+Processor.swift | 8 ++++++++ Delta/Systems/DeltaCoreProtocol+Delta.swift | 18 ++++++++++-------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 5ee2560..c3b199b 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -409,20 +409,17 @@ extension GameViewController self.pausingGameController = gameController } + if self.emulatorCore?.deltaCore.supportedRates.upperBound == 1 + { + pauseViewController.fastForwardItem = nil + } + switch self.game?.type { - case .n64? where !UIDevice.current.hasA9ProcessorOrBetter: - // A8 processors and earlier aren't powerful enough to run N64 games faster than 1x speed. - pauseViewController.fastForwardItem = nil - case .ds? where self.emulatorCore?.deltaCore == DS.core: // Cheats are not supported by DeSmuME core. pauseViewController.cheatCodesItem = nil - - case .ds? where !UIDevice.current.hasA9ProcessorOrBetter: - // A8 processors and earlier aren't powerful enough to run DS games faster than 1x speed. - pauseViewController.fastForwardItem = nil - + default: break } diff --git a/Delta/Extensions/UIDevice+Processor.swift b/Delta/Extensions/UIDevice+Processor.swift index 4ff4bce..c6f6933 100644 --- a/Delta/Extensions/UIDevice+Processor.swift +++ b/Delta/Extensions/UIDevice+Processor.swift @@ -8,15 +8,23 @@ import UIKit import ARKit +import Metal extension UIDevice { + private static var mtlDevice: MTLDevice? = MTLCreateSystemDefaultDevice() + var hasA9ProcessorOrBetter: Bool { // ARKit is only supported by devices with an A9 processor or better, according to the documentation. // https://developer.apple.com/documentation/arkit/arconfiguration/2923553-issupported return ARConfiguration.isSupported } + var hasA11ProcessorOrBetter: Bool { + guard let mtlDevice = UIDevice.mtlDevice else { return false } + return mtlDevice.supportsFeatureSet(.iOS_GPUFamily4_v1) // iOS GPU Family 4 = A11 GPU + } + var supportsJIT: Bool { guard #available(iOS 14.2, *) else { return false } diff --git a/Delta/Systems/DeltaCoreProtocol+Delta.swift b/Delta/Systems/DeltaCoreProtocol+Delta.swift index bad62a5..57c76eb 100644 --- a/Delta/Systems/DeltaCoreProtocol+Delta.swift +++ b/Delta/Systems/DeltaCoreProtocol+Delta.swift @@ -60,16 +60,18 @@ struct DeltaCoreMetadata extension DeltaCoreProtocol { var supportedRates: ClosedRange { + return 1...self.maximumFastForwardSpeed + } + + private var maximumFastForwardSpeed: Double { switch self { - case NES.core: return 1...4 - case SNES.core: return 1...4 - case GBC.core: return 1...4 - case GBA.core: return 1...3 - case N64.core: return 1...3 - case DS.core: return 1...3 - case MelonDS.core: return 1...2 - default: return 1...2 + case NES.core, SNES.core, GBC.core: return 4 + case GBA.core: return 3 + case N64.core where UIDevice.current.hasA9ProcessorOrBetter: return 3 + case DS.core where UIDevice.current.supportsJIT: return 3 + case DS.core where UIDevice.current.hasA11ProcessorOrBetter: return 2 + default: return 1 } }