Added option to synchronize core tick speed to max speed percentage

This commit is contained in:
spectranator 2024-04-27 14:57:06 +02:00
parent d37c170663
commit 2ad113f22c
3 changed files with 19 additions and 2 deletions

View file

@ -210,6 +210,7 @@ struct Values {
true,
true,
&use_speed_limit};
SwitchableSetting<bool> sync_core_speed{linkage, false, "sync_core_speed", Category::Core, Specialization::Default};
// Cpu
SwitchableSetting<CpuBackend, true> cpu_backend{linkage,

View file

@ -14,6 +14,7 @@
#include "common/x64/cpu_wait.h"
#endif
#include "common/settings.h"
#include "common/microprofile.h"
#include "core/core_timing.h"
#include "core/hardware_properties.h"
@ -184,10 +185,20 @@ void CoreTiming::ResetTicks() {
}
u64 CoreTiming::GetClockTicks() const {
u64 fres;
if (is_multicore) [[likely]] {
return clock->GetCNTPCT();
fres = clock->GetCNTPCT();
} else {
fres = Common::WallClock::CPUTickToCNTPCT(cpu_ticks);
}
if (Settings::values.sync_core_speed.GetValue()) {
const double ticks = static_cast<double>(fres);
const double speed_limit = static_cast<double>(Settings::values.speed_limit.GetValue())*0.01;
return static_cast<u64>(ticks/speed_limit);
} else {
return fres;
}
return Common::WallClock::CPUTickToCNTPCT(cpu_ticks);
}
u64 CoreTiming::GetGPUTicks() const {

View file

@ -71,6 +71,11 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) {
"faster or not.\n200% for a 30 FPS game is 60 FPS, and for a "
"60 FPS game it will be 120 FPS.\nDisabling it means unlocking the framerate to the "
"maximum your PC can reach."));
INSERT(Settings, sync_core_speed, tr("Synchronize core speed"),
tr("Synchronizes CPU core speed to game's maximum rendering speed, which can be useful to "
"increase FPS without increasing the actual speed of the game (animations, physics, etc.)\n"
"It's up to each game if it plays well with this or not. Most games (specially original ones) "
"simply ignore this.\nThis can help play the game stutter-free at a lower framerate."));
// Cpu
INSERT(Settings, cpu_accuracy, tr("Accuracy:"),