Browse Source
Merge pull request #8089 from merryhime/paranoia
configuration: Add Paranoid CPU accuracy level
pull/15/merge
bunnei
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
63 additions and
45 deletions
-
src/common/settings.h
-
src/core/arm/dynarmic/arm_dynarmic_32.cpp
-
src/core/arm/dynarmic/arm_dynarmic_64.cpp
-
src/yuzu/configuration/configure_cpu.ui
|
|
|
@ -38,6 +38,7 @@ enum class CPUAccuracy : u32 { |
|
|
|
Auto = 0, |
|
|
|
Accurate = 1, |
|
|
|
Unsafe = 2, |
|
|
|
Paranoid = 3, |
|
|
|
}; |
|
|
|
|
|
|
|
enum class FullscreenMode : u32 { |
|
|
|
@ -470,7 +471,7 @@ struct Values { |
|
|
|
|
|
|
|
// Cpu |
|
|
|
RangedSetting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, CPUAccuracy::Auto, |
|
|
|
CPUAccuracy::Unsafe, "cpu_accuracy"}; |
|
|
|
CPUAccuracy::Paranoid, "cpu_accuracy"}; |
|
|
|
// TODO: remove cpu_accuracy_first_time, migration setting added 8 July 2021 |
|
|
|
BasicSetting<bool> cpu_accuracy_first_time{true, "cpu_accuracy_first_time"}; |
|
|
|
BasicSetting<bool> cpu_debug_mode{false, "cpu_debug_mode"}; |
|
|
|
|
|
|
|
@ -186,8 +186,7 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* |
|
|
|
if (!Settings::values.cpuopt_recompile_exclusives) { |
|
|
|
config.recompile_on_exclusive_fastmem_failure = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
// Unsafe optimizations
|
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { |
|
|
|
config.unsafe_optimizations = true; |
|
|
|
@ -217,6 +216,13 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* |
|
|
|
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; |
|
|
|
} |
|
|
|
|
|
|
|
// Paranoia mode for debugging optimizations
|
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Paranoid) { |
|
|
|
config.unsafe_optimizations = false; |
|
|
|
config.optimizations = Dynarmic::no_optimizations; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return std::make_unique<Dynarmic::A32::Jit>(config); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -248,8 +248,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* |
|
|
|
if (!Settings::values.cpuopt_recompile_exclusives) { |
|
|
|
config.recompile_on_exclusive_fastmem_failure = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
// Unsafe optimizations
|
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { |
|
|
|
config.unsafe_optimizations = true; |
|
|
|
@ -279,6 +278,13 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* |
|
|
|
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; |
|
|
|
} |
|
|
|
|
|
|
|
// Paranoia mode for debugging optimizations
|
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Paranoid) { |
|
|
|
config.unsafe_optimizations = false; |
|
|
|
config.optimizations = Dynarmic::no_optimizations; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return std::make_shared<Dynarmic::A64::Jit>(config); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -52,6 +52,11 @@ |
|
|
|
<string>Unsafe</string> |
|
|
|
</property> |
|
|
|
</item> |
|
|
|
<item> |
|
|
|
<property name="text"> |
|
|
|
<string>Paranoid (disables most optimizations)</string> |
|
|
|
</property> |
|
|
|
</item> |
|
|
|
</widget> |
|
|
|
</item> |
|
|
|
</layout> |
|
|
|
|