diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
index b26fb1dec5..e9fe2be53c 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
@@ -10,7 +10,6 @@ import org.yuzu.yuzu_emu.utils.NativeConfig
enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
AUDIO_MUTED("audio_muted"),
- CPU_DEBUG_MODE("cpu_debug_mode"),
FASTMEM("cpuopt_fastmem"),
FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives"),
CORE_SYNC_CORE_SPEED("sync_core_speed"),
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
index ebc726225a..8c35155e78 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
@@ -764,13 +764,6 @@ abstract class SettingsItem(
descriptionId = R.string.use_auto_stub_description
)
)
- put(
- SwitchSetting(
- BooleanSetting.CPU_DEBUG_MODE,
- titleId = R.string.cpu_debug_mode,
- descriptionId = R.string.cpu_debug_mode_description
- )
- )
val fastmem = object : AbstractBooleanSetting {
override fun getBoolean(needsGlobal: Boolean): Boolean =
@@ -784,7 +777,6 @@ abstract class SettingsItem(
override val key: String = FASTMEM_COMBINED
override val isRuntimeModifiable: Boolean = false
- override val pairedSettingKey = BooleanSetting.CPU_DEBUG_MODE.key
override val defaultValue: Boolean = true
override val isSwitchable: Boolean = true
override var global: Boolean
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 0d882a7f01..d39c0c49bb 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -1158,7 +1158,6 @@ class SettingsFragmentPresenter(
add(IntSetting.CPU_BACKEND.key)
add(IntSetting.CPU_ACCURACY.key)
add(BooleanSetting.USE_AUTO_STUB.key)
- add(BooleanSetting.CPU_DEBUG_MODE.key)
add(SettingsItem.FASTMEM_COMBINED)
add(HeaderSetting(R.string.log))
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 2150d401db..60d4593665 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -333,6 +333,7 @@
- @string/cpu_accuracy_accurate
- @string/cpu_accuracy_unsafe
- @string/cpu_accuracy_paranoid
+ - @string/cpu_accuracy_debugging
@@ -340,6 +341,7 @@
- 1
- 2
- 3
+ - 4
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 00206a5df5..50dc68e000 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -543,8 +543,6 @@
CPU
- CPU Debugging
- Puts the CPU in a slow debugging mode.
Use Auto Stub
Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues.
@@ -1050,6 +1048,7 @@
Accurate
Unsafe
Paranoid
+ Debugging
D-pad
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index b849d7cb6a..e817acc36e 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -163,11 +163,11 @@ bool IsDMALevelSafe() {
}
bool IsFastmemEnabled() {
- if (values.cpu_debug_mode) {
- return static_cast(values.cpuopt_fastmem);
+ if (values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Debugging) {
+ return bool(values.cpuopt_fastmem);
}
if (values.cpu_accuracy.GetValue() == CpuAccuracy::Unsafe) {
- return static_cast(values.cpuopt_unsafe_host_mmu);
+ return bool(values.cpuopt_unsafe_host_mmu);
}
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
return false;
diff --git a/src/common/settings.h b/src/common/settings.h
index 22602a8afd..4eea9cf265 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -275,9 +275,6 @@ struct Values {
true,
true,
&use_custom_cpu_ticks};
-
- SwitchableSetting cpu_debug_mode{linkage, false, "cpu_debug_mode", Category::CpuDebug};
-
Setting cpuopt_page_tables{linkage, true, "cpuopt_page_tables", Category::CpuDebug};
Setting cpuopt_block_linking{linkage, true, "cpuopt_block_linking", Category::CpuDebug};
Setting cpuopt_return_stack_buffer{linkage, true, "cpuopt_return_stack_buffer",
diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h
index ccf6f1cfb2..c8a5fc7bd9 100644
--- a/src/common/settings_enums.h
+++ b/src/common/settings_enums.h
@@ -136,7 +136,7 @@ ENUM(ShaderBackend, Glsl, Glasm, SpirV);
ENUM(GpuAccuracy, Normal, High, Extreme);
ENUM(DmaAccuracy, Default, Unsafe, Safe);
ENUM(CpuBackend, Dynarmic, Nce);
-ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid);
+ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid, Debugging);
ENUM(CpuClock, Boost, Fast)
ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb);
ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never);
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index d2035d0fe0..3c72ab2396 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -229,7 +229,8 @@ std::shared_ptr ArmDynarmic32::MakeJit(Common::PageTable* pa
}
// Safe optimizations
- if (Settings::values.cpu_debug_mode) {
+ switch (Settings::values.cpu_accuracy.GetValue()) {
+ case Settings::CpuAccuracy::Debugging:
if (!Settings::values.cpuopt_page_tables) {
config.page_table = nullptr;
}
@@ -267,51 +268,51 @@ std::shared_ptr ArmDynarmic32::MakeJit(Common::PageTable* pa
if (!Settings::values.cpuopt_ignore_memory_aborts) {
config.check_halt_on_memory_access = true;
}
- } else {
- // Unsafe optimizations
- if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
- config.unsafe_optimizations = true;
- if (!Settings::values.cpuopt_unsafe_host_mmu) {
- config.fastmem_pointer = std::nullopt;
- config.fastmem_exclusive_access = false;
- }
- if (Settings::values.cpuopt_unsafe_unfuse_fma) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
- }
- if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
- }
- if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
- }
- if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
- }
- if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
- }
- }
-
- // Curated optimizations
- if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) {
- config.unsafe_optimizations = true;
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
+ break;
+ // Unsafe optimizations
+ case Settings::CpuAccuracy::Unsafe:
+ config.unsafe_optimizations = true;
+ if (!Settings::values.cpuopt_unsafe_host_mmu) {
config.fastmem_pointer = std::nullopt;
config.fastmem_exclusive_access = false;
-#endif
+ }
+ if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
+ }
+ if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
+ }
+ if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
+ }
+ if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
+ }
+ if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
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;
- }
+ break;
+ // Curated optimizations
+ case Settings::CpuAccuracy::Auto:
+ config.unsafe_optimizations = true;
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
+ config.fastmem_pointer = std::nullopt;
+ config.fastmem_exclusive_access = false;
+#endif
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
+ break;
+ // Paranoia mode for debugging optimizations
+ case Settings::CpuAccuracy::Paranoid:
+ config.unsafe_optimizations = false;
+ config.optimizations = Dynarmic::no_optimizations;
+ break;
+ case Settings::CpuAccuracy::Accurate:
+ default:
+ break;
}
-
return std::make_unique(config);
}
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 438b7b691c..707d51d2a2 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -287,8 +287,9 @@ std::shared_ptr ArmDynarmic64::MakeJit(Common::PageTable* pa
config.code_cache_size = std::uint32_t(8_MiB);
}
- // Safe optimizations
- if (Settings::values.cpu_debug_mode) {
+ switch (Settings::values.cpu_accuracy.GetValue()) {
+ // Debug mode
+ case Settings::CpuAccuracy::Debugging:
if (!Settings::values.cpuopt_page_tables) {
config.page_table = nullptr;
}
@@ -326,50 +327,50 @@ std::shared_ptr ArmDynarmic64::MakeJit(Common::PageTable* pa
if (!Settings::values.cpuopt_ignore_memory_aborts) {
config.check_halt_on_memory_access = true;
}
- } else {
- // Unsafe optimizations
- if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
- config.unsafe_optimizations = true;
- if (!Settings::values.cpuopt_unsafe_host_mmu) {
- config.fastmem_pointer = std::nullopt;
- config.fastmem_exclusive_access = false;
- }
- if (Settings::values.cpuopt_unsafe_unfuse_fma) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
- }
- if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
- }
- if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
- }
- if (Settings::values.cpuopt_unsafe_fastmem_check) {
- config.fastmem_address_space_bits = 64;
- }
- if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
- config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
- }
- }
-
- // Curated optimizations
- if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) {
- config.unsafe_optimizations = true;
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
+ break;
+ // Unsafe optimizations
+ case Settings::CpuAccuracy::Unsafe:
+ config.unsafe_optimizations = true;
+ if (!Settings::values.cpuopt_unsafe_host_mmu) {
config.fastmem_pointer = std::nullopt;
config.fastmem_exclusive_access = false;
-#endif
+ }
+ if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
+ }
+ if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
+ }
+ if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
+ }
+ if (Settings::values.cpuopt_unsafe_fastmem_check) {
config.fastmem_address_space_bits = 64;
+ }
+ if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
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;
- }
+ break;
+ // Safe optimisations
+ case Settings::CpuAccuracy::Auto:
+ config.unsafe_optimizations = true;
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
+ config.fastmem_pointer = std::nullopt;
+ config.fastmem_exclusive_access = false;
+#endif
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
+ config.fastmem_address_space_bits = 64;
+ config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
+ break;
+ // Paranoia mode for debugging optimizations
+ case Settings::CpuAccuracy::Paranoid:
+ config.unsafe_optimizations = false;
+ config.optimizations = Dynarmic::no_optimizations;
+ break;
+ case Settings::CpuAccuracy::Accurate:
+ default:
+ break;
}
-
return std::make_shared(config);
}
diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp
index 9bd2fa6868..1957614208 100644
--- a/src/qt_common/config/shared_translation.cpp
+++ b/src/qt_common/config/shared_translation.cpp
@@ -510,6 +510,7 @@ std::unique_ptr ComboboxEnumeration(QObject* parent)
PAIR(CpuAccuracy, Accurate, tr("Accurate")),
PAIR(CpuAccuracy, Unsafe, tr("Unsafe")),
PAIR(CpuAccuracy, Paranoid, tr("Paranoid (disables most optimizations)")),
+ PAIR(CpuAccuracy, Debugging, tr("Debugging")),
}});
translations->insert({Settings::EnumMetadata::Index(),
{
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index 0ee82853fc..70fd90734f 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -61,8 +61,6 @@ void ConfigureDebug::SetConfiguration() {
ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug.GetValue());
ui->enable_shader_feedback->setEnabled(runtime_lock);
ui->enable_shader_feedback->setChecked(Settings::values.renderer_shader_feedback.GetValue());
- ui->enable_cpu_debugging->setEnabled(runtime_lock);
- ui->enable_cpu_debugging->setChecked(Settings::values.cpu_debug_mode.GetValue());
ui->enable_nsight_aftermath->setEnabled(runtime_lock);
ui->enable_nsight_aftermath->setChecked(Settings::values.enable_nsight_aftermath.GetValue());
ui->dump_shaders->setEnabled(runtime_lock);
@@ -103,7 +101,6 @@ void ConfigureDebug::ApplyConfiguration() {
Settings::values.enable_renderdoc_hotkey = ui->enable_renderdoc_hotkey->isChecked();
Settings::values.disable_buffer_reorder = ui->disable_buffer_reorder->isChecked();
Settings::values.renderer_shader_feedback = ui->enable_shader_feedback->isChecked();
- Settings::values.cpu_debug_mode = ui->enable_cpu_debugging->isChecked();
Settings::values.enable_nsight_aftermath = ui->enable_nsight_aftermath->isChecked();
Settings::values.dump_shaders = ui->dump_shaders->isChecked();
Settings::values.dump_macros = ui->dump_macros->isChecked();
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui
index bd7125712c..1f302bf118 100644
--- a/src/yuzu/configuration/configure_debug.ui
+++ b/src/yuzu/configuration/configure_debug.ui
@@ -435,13 +435,6 @@
- -
-
-
- Enable CPU Debugging
-
-
-
-
@@ -582,7 +575,6 @@
fs_access_log
reporting_services
quest_flag
- enable_cpu_debugging
use_debug_asserts