diff options
author | bunnei <bunneidev@gmail.com> | 2022-07-17 13:59:52 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-17 13:59:52 -0700 |
commit | ba8ea956242537d862b4f9b5d27b95a5a6928ea7 (patch) | |
tree | f776066179ea4c1e2671ff3dc3811ed7301261a9 /src/core | |
parent | a5bdf824e66d23a16af6a1b43256415570b1a8b3 (diff) | |
parent | 6d160873c4c6a963057da5c3dca5c5f26e810052 (diff) |
Merge pull request #8508 from yuzu-emu/mc-speed-limit
hle: service: nvflinger: Factor speed limit into frame time calculation.
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index 5f69c8c2c..5574269eb 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp @@ -287,9 +287,21 @@ s64 NVFlinger::GetNextTicks() const { static constexpr s64 max_hertz = 120LL; const auto& settings = Settings::values; - const bool unlocked_fps = settings.disable_fps_limit.GetValue(); - const s64 fps_cap = unlocked_fps ? static_cast<s64>(settings.fps_cap.GetValue()) : 1; - return (1000000000 * (1LL << swap_interval)) / (max_hertz * fps_cap); + auto speed_scale = 1.f; + if (settings.use_multi_core.GetValue()) { + if (settings.use_speed_limit.GetValue()) { + // Scales the speed based on speed_limit setting on MC. SC is handled by + // SpeedLimiter::DoSpeedLimiting. + speed_scale = 100.f / settings.speed_limit.GetValue(); + } else { + // Run at unlocked framerate. + speed_scale = 0.01f; + } + } + + const auto next_ticks = ((1000000000 * (1LL << swap_interval)) / max_hertz); + + return static_cast<s64>(speed_scale * static_cast<float>(next_ticks)); } } // namespace Service::NVFlinger |