Merge pull request #2357 from zarroboogs/force-30fps-mode
Add a toggle to force 30FPS mode
This commit is contained in:
		@@ -21,12 +21,13 @@
 | 
			
		||||
#include "core/hle/service/vi/display/vi_display.h"
 | 
			
		||||
#include "core/hle/service/vi/layer/vi_layer.h"
 | 
			
		||||
#include "core/perf_stats.h"
 | 
			
		||||
#include "core/settings.h"
 | 
			
		||||
#include "video_core/renderer_base.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::NVFlinger {
 | 
			
		||||
 | 
			
		||||
constexpr std::size_t SCREEN_REFRESH_RATE = 60;
 | 
			
		||||
constexpr s64 frame_ticks = static_cast<s64>(Core::Timing::BASE_CLOCK_RATE / SCREEN_REFRESH_RATE);
 | 
			
		||||
constexpr s64 frame_ticks = static_cast<s64>(Core::Timing::BASE_CLOCK_RATE / 60);
 | 
			
		||||
constexpr s64 frame_ticks_30fps = static_cast<s64>(Core::Timing::BASE_CLOCK_RATE / 30);
 | 
			
		||||
 | 
			
		||||
NVFlinger::NVFlinger(Core::Timing::CoreTiming& core_timing) : core_timing{core_timing} {
 | 
			
		||||
    displays.emplace_back(0, "Default");
 | 
			
		||||
@@ -36,13 +37,15 @@ NVFlinger::NVFlinger(Core::Timing::CoreTiming& core_timing) : core_timing{core_t
 | 
			
		||||
    displays.emplace_back(4, "Null");
 | 
			
		||||
 | 
			
		||||
    // Schedule the screen composition events
 | 
			
		||||
    composition_event =
 | 
			
		||||
        core_timing.RegisterEvent("ScreenComposition", [this](u64 userdata, s64 cycles_late) {
 | 
			
		||||
    const auto ticks = Settings::values.force_30fps_mode ? frame_ticks_30fps : frame_ticks;
 | 
			
		||||
 | 
			
		||||
    composition_event = core_timing.RegisterEvent(
 | 
			
		||||
        "ScreenComposition", [this, ticks](u64 userdata, s64 cycles_late) {
 | 
			
		||||
            Compose();
 | 
			
		||||
            this->core_timing.ScheduleEvent(frame_ticks - cycles_late, composition_event);
 | 
			
		||||
            this->core_timing.ScheduleEvent(ticks - cycles_late, composition_event);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    core_timing.ScheduleEvent(frame_ticks, composition_event);
 | 
			
		||||
    core_timing.ScheduleEvent(ticks, composition_event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NVFlinger::~NVFlinger() {
 | 
			
		||||
@@ -62,6 +65,7 @@ std::optional<u64> NVFlinger::OpenDisplay(std::string_view name) {
 | 
			
		||||
    const auto itr =
 | 
			
		||||
        std::find_if(displays.begin(), displays.end(),
 | 
			
		||||
                     [&](const VI::Display& display) { return display.GetName() == name; });
 | 
			
		||||
 | 
			
		||||
    if (itr == displays.end()) {
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user