diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts
index c10f863b7c..158b719bcb 100644
--- a/src/android/app/build.gradle.kts
+++ b/src/android/app/build.gradle.kts
@@ -170,7 +170,7 @@ android {
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
)
- abiFilters("arm64-v8a", "x86_64")
+ abiFilters("arm64-v8a")
}
}
}
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 554b693313..44db90b853 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
@@ -12,6 +12,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives"),
CORE_SYNC_CORE_SPEED("sync_core_speed"),
RENDERER_USE_SPEED_LIMIT("use_speed_limit"),
+ USE_FAST_CPU_TIME("use_fast_cpu_time"),
USE_DOCKED_MODE("use_docked_mode"),
USE_AUTO_STUB("use_auto_stub"),
RENDERER_USE_DISK_SHADER_CACHE("use_disk_shader_cache"),
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
index 8e71f13d25..added60e6c 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
@@ -35,6 +35,9 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
PERF_OVERLAY_POSITION("perf_overlay_position"),
MEMORY_LAYOUT("memory_layout_mode"),
FSR_SHARPENING_SLIDER("fsr_sharpening_slider"),
+ FAST_CPU_TIME("fast_cpu_time"),
+ FAST_GPU_TIME("fast_gpu_time"),
+
CABINET_APPLET("cabinet_applet_mode"),
CONTROLLER_APPLET("controller_applet_mode"),
DATA_ERASE_APPLET("data_erase_applet_mode"),
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 efe5de5291..b0944c5f18 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
@@ -496,6 +496,31 @@ abstract class SettingsItem(
descriptionId = R.string.use_fast_gpu_time_description
)
)
+ put(
+ SingleChoiceSetting(
+ IntSetting.FAST_GPU_TIME,
+ titleId = R.string.fast_gpu_time,
+ descriptionId = R.string.fast_gpu_time_description,
+ choicesId = R.array.gpuEntries,
+ valuesId = R.array.gpuValues
+ )
+ )
+ put(
+ SwitchSetting(
+ BooleanSetting.USE_FAST_CPU_TIME,
+ titleId = R.string.use_fast_cpu_time,
+ descriptionId = R.string.use_fast_cpu_time_description
+ )
+ )
+ put(
+ SingleChoiceSetting(
+ IntSetting.FAST_CPU_TIME,
+ titleId = R.string.fast_cpu_time,
+ descriptionId = R.string.fast_cpu_time_description,
+ choicesId = R.array.clockNames,
+ valuesId = R.array.clockValues
+ )
+ )
put(
SwitchSetting(
BooleanSetting.RENDERER_REACTIVE_FLUSHING,
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 1a67dd7ebe..4bfe503b1d 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
@@ -403,6 +403,7 @@ class SettingsFragmentPresenter(
add(HeaderSetting(R.string.veil_renderer))
add(BooleanSetting.FRAME_INTERPOLATION.key)
add(BooleanSetting.RENDERER_FAST_GPU.key)
+ add(IntSetting.FAST_GPU_TIME.key)
add(IntSetting.RENDERER_SHADER_BACKEND.key)
add(IntSetting.RENDERER_NVDEC_EMULATION.key)
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
@@ -411,6 +412,8 @@ class SettingsFragmentPresenter(
add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key)
add(HeaderSetting(R.string.veil_misc))
+ add(BooleanSetting.USE_FAST_CPU_TIME.key)
+ add(IntSetting.FAST_CPU_TIME.key)
add(BooleanSetting.USE_LRU_CACHE.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
add(IntSetting.MEMORY_LAYOUT.key)
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index e1db50c54e..39dffd13c2 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -33,6 +33,18 @@
- 2
+
+ - @string/clock_base
+ - @string/clock_boost
+ - @string/clock_fast
+
+
+
+ - 0
+ - 1
+ - 2
+
+
- @string/language_brazilian_portuguese
- @string/language_british_english
@@ -441,4 +453,16 @@
- 0
- 1
+
+
+ - @string/gpu_low
+ - @string/gpu_medium
+ - @string/gpu_high
+
+
+
+ - 0
+ - 1
+ - 2
+
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 138957257c..1385c4124f 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -74,6 +74,10 @@
Synchronize the core tick speed to the maximum speed percentage to improve performance without altering the game\'s actual speed.
Enable LRU Cache
Enable or disable the Least Recently Used (LRU) cache, increasing performance by saving CPU process usage. Some games have issue with it, notably TotK 1.2.1, so disable if the game doesn\'t boot or crashes randomly.
+ Fast CPU Time
+ Forces the emulated CPU to run at a higher clock, reducing certain FPS limiters. This option is hacky and may cause issues, and weaker CPUs may see reduced performance.
+ CPU Clock
+ Use Boost (1700MHz) to run at the Switch\'s highest native clock, or Fast (2000MHz) to run at 2x clock.
Memory Layout
(EXPERIMENTAL) Change the emulated memory layout. This setting will not increase performance, but may help with games utilizing high resolutions via mods. Do not use on phones with 8GB of RAM or less.
@@ -408,6 +412,8 @@
Compiles shaders asynchronously. This may reduce stutters but may also introduce glitches.
Use Fast GPU Time
Forces most games to run at their highest native resolution. This option is hacky and may cause issues.
+ GPU Overclock Factor
+ Use 128 for maximal performance and 512 for maximal graphics fidelity.
Use reactive flushing
Improves rendering accuracy in some games at the cost of performance.
Disk shader cache
@@ -704,6 +710,16 @@
6GB (Unsafe)
8GB (Unsafe)
+
+ Base (1000MHz)
+ Boost (1700MHz)
+ Fast (2000MHz)
+
+
+ Low (128)
+ Medium (256)
+ High (512)
+
日本語
English
diff --git a/src/common/settings.h b/src/common/settings.h
index 5e0efab8e6..8c62716ba7 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -238,6 +238,23 @@ struct Values {
SwitchableSetting cpu_accuracy{linkage, CpuAccuracy::Auto,
CpuAccuracy::Auto, CpuAccuracy::Paranoid,
"cpu_accuracy", Category::Cpu};
+
+ SwitchableSetting use_fast_cpu_time{linkage,
+ false,
+ "use_fast_cpu_time",
+ Category::Cpu,
+ Specialization::Paired,
+ true,
+ true};
+ SwitchableSetting fast_cpu_time{linkage,
+ CpuClock::Boost,
+ "fast_cpu_time",
+ Category::Cpu,
+ Specialization::Default,
+ true,
+ true,
+ &use_fast_cpu_time};
+
SwitchableSetting cpu_debug_mode{linkage, false, "cpu_debug_mode", Category::CpuDebug};
Setting cpuopt_page_tables{linkage, true, "cpuopt_page_tables", Category::CpuDebug};
@@ -428,9 +445,23 @@ struct Values {
Category::RendererAdvanced};
SwitchableSetting use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders",
Category::RendererAdvanced};
- SwitchableSetting use_fast_gpu_time{
- linkage, true, "use_fast_gpu_time", Category::RendererAdvanced, Specialization::Default,
- true, true};
+ SwitchableSetting use_fast_gpu_time{linkage,
+ true,
+ "use_fast_gpu_time",
+ Category::RendererAdvanced,
+ Specialization::Paired,
+ true,
+ true};
+
+ SwitchableSetting fast_gpu_time{linkage,
+ GpuOverclock::Medium,
+ "fast_gpu_time",
+ Category::RendererAdvanced,
+ Specialization::Default,
+ true,
+ true,
+ &use_fast_gpu_time};
+
SwitchableSetting use_vulkan_driver_pipeline_cache{linkage,
true,
"use_vulkan_driver_pipeline_cache",
diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h
index 43abe150f8..c9b6a54ba6 100644
--- a/src/common/settings_enums.h
+++ b/src/common/settings_enums.h
@@ -134,6 +134,8 @@ ENUM(CpuBackend, Dynarmic, Nce);
ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid);
+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);
@@ -157,6 +159,8 @@ ENUM(AppletMode, HLE, LLE);
ENUM(SpirvOptimizeMode, Never, OnLoad, Always);
+ENUM(GpuOverclock, Low, Medium, High)
+
template
inline std::string CanonicalizeEnum(Type id) {
const auto group = EnumMetadata::Canonicalizations();
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index 3d67ab9f5c..a8ffdb3cb7 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -192,13 +192,18 @@ u64 CoreTiming::GetClockTicks() const {
fres = Common::WallClock::CPUTickToCNTPCT(cpu_ticks);
}
+ if (Settings::values.use_fast_cpu_time) {
+ fres = (u64) ((double) fres
+ * (1.7 + 0.3 * (u32) Settings::values.fast_cpu_time.GetValue()));
+ }
+
if (Settings::values.sync_core_speed.GetValue()) {
const double ticks = static_cast(fres);
const double speed_limit = static_cast(Settings::values.speed_limit.GetValue())*0.01;
return static_cast(ticks/speed_limit);
} else {
return fres;
- }
+ }
}
u64 CoreTiming::GetGPUTicks() const {
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp
index c816f47fec..7c34005a12 100644
--- a/src/video_core/gpu.cpp
+++ b/src/video_core/gpu.cpp
@@ -200,7 +200,10 @@ struct GPU::Impl {
u64 gpu_tick = system.CoreTiming().GetGPUTicks();
if (Settings::values.use_fast_gpu_time.GetValue()) {
- gpu_tick /= 256;
+ gpu_tick /= (u64) (128
+ * std::pow(2,
+ static_cast(
+ Settings::values.fast_gpu_time.GetValue())));
}
return gpu_tick;
diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp
index 7e16cf17d4..31112e3aa7 100644
--- a/src/yuzu/configuration/configure_cpu.cpp
+++ b/src/yuzu/configuration/configure_cpu.cpp
@@ -73,6 +73,9 @@ void ConfigureCpu::Setup(const ConfigurationShared::Builder& builder) {
} else if (setting->Id() == Settings::values.cpu_backend.Id()) {
backend_layout->addWidget(widget);
backend_combobox = widget->combobox;
+ } else if (setting->Id() == Settings::values.fast_cpu_time.Id()
+ || setting->Id() == Settings::values.use_fast_cpu_time.Id()) {
+ ui->general_layout->addWidget(widget);
} else {
// Presently, all other settings here are unsafe checkboxes
unsafe_hold.insert({setting->Id(), widget});
diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui
index 13fd43605a..90eeba6978 100644
--- a/src/yuzu/configuration/configure_cpu.ui
+++ b/src/yuzu/configuration/configure_cpu.ui
@@ -27,7 +27,7 @@
General
-
+
-
@@ -61,6 +61,9 @@
-
+
+ false
+
CPU Backend
@@ -84,9 +87,6 @@
-
- false
-
-
@@ -129,10 +129,10 @@
-
- Qt::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::Expanding
+ QSizePolicy::Policy::Expanding
diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp
index 53ab0aa797..868cef3763 100644
--- a/src/yuzu/configuration/shared_translation.cpp
+++ b/src/yuzu/configuration/shared_translation.cpp
@@ -3,10 +3,6 @@
#include "yuzu/configuration/shared_translation.h"
-#include