Merge pull request #8089 from merryhime/paranoia
configuration: Add Paranoid CPU accuracy level
This commit is contained in:
commit
f114436120
4 changed files with 63 additions and 45 deletions
|
@ -38,6 +38,7 @@ enum class CPUAccuracy : u32 {
|
||||||
Auto = 0,
|
Auto = 0,
|
||||||
Accurate = 1,
|
Accurate = 1,
|
||||||
Unsafe = 2,
|
Unsafe = 2,
|
||||||
|
Paranoid = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class FullscreenMode : u32 {
|
enum class FullscreenMode : u32 {
|
||||||
|
@ -470,7 +471,7 @@ struct Values {
|
||||||
|
|
||||||
// Cpu
|
// Cpu
|
||||||
RangedSetting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, CPUAccuracy::Auto,
|
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
|
// 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_accuracy_first_time{true, "cpu_accuracy_first_time"};
|
||||||
BasicSetting<bool> cpu_debug_mode{false, "cpu_debug_mode"};
|
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) {
|
if (!Settings::values.cpuopt_recompile_exclusives) {
|
||||||
config.recompile_on_exclusive_fastmem_failure = false;
|
config.recompile_on_exclusive_fastmem_failure = false;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// Unsafe optimizations
|
// Unsafe optimizations
|
||||||
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
|
||||||
config.unsafe_optimizations = true;
|
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;
|
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);
|
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) {
|
if (!Settings::values.cpuopt_recompile_exclusives) {
|
||||||
config.recompile_on_exclusive_fastmem_failure = false;
|
config.recompile_on_exclusive_fastmem_failure = false;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// Unsafe optimizations
|
// Unsafe optimizations
|
||||||
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
|
||||||
config.unsafe_optimizations = true;
|
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;
|
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);
|
return std::make_shared<Dynarmic::A64::Jit>(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,11 @@
|
||||||
<string>Unsafe</string>
|
<string>Unsafe</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Paranoid (disables most optimizations)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
Loading…
Reference in a new issue