nvnflinger: correct swap interval handling

This commit is contained in:
Liam 2023-01-11 21:57:30 -05:00
parent 0e8f98a441
commit 2f2ef5b147
2 changed files with 5 additions and 5 deletions

View file

@ -312,8 +312,6 @@ void NVFlinger::Compose() {
} }
s64 NVFlinger::GetNextTicks() const { s64 NVFlinger::GetNextTicks() const {
static constexpr s64 max_hertz = 120LL;
const auto& settings = Settings::values; const auto& settings = Settings::values;
auto speed_scale = 1.f; auto speed_scale = 1.f;
if (settings.use_multi_core.GetValue()) { if (settings.use_multi_core.GetValue()) {
@ -327,9 +325,11 @@ s64 NVFlinger::GetNextTicks() const {
} }
} }
const auto next_ticks = ((1000000000 * (1LL << swap_interval)) / max_hertz); // As an extension, treat nonpositive swap interval as framerate multiplier.
const f32 effective_fps = swap_interval <= 0 ? 120.f * static_cast<f32>(1 - swap_interval)
: 60.f / static_cast<f32>(swap_interval);
return static_cast<s64>(speed_scale * static_cast<float>(next_ticks)); return static_cast<s64>(speed_scale * (1000000000.f / effective_fps));
} }
} // namespace Service::NVFlinger } // namespace Service::NVFlinger

View file

@ -133,7 +133,7 @@ private:
/// layers. /// layers.
u32 next_buffer_queue_id = 1; u32 next_buffer_queue_id = 1;
u32 swap_interval = 1; s32 swap_interval = 1;
/// Event that handles screen composition. /// Event that handles screen composition.
std::shared_ptr<Core::Timing::EventType> multi_composition_event; std::shared_ptr<Core::Timing::EventType> multi_composition_event;