Browse Source

Add 45 FPS pacing as request

pull/3568/head
MaranBr 2 weeks ago
parent
commit
b29705dd5b
  1. 2
      src/android/app/src/main/res/values/arrays.xml
  2. 1
      src/android/app/src/main/res/values/strings.xml
  3. 2
      src/common/settings_enums.h
  4. 1
      src/qt_common/config/shared_translation.cpp
  5. 10
      src/video_core/renderer_vulkan/vk_scheduler.h

2
src/android/app/src/main/res/values/arrays.xml

@ -533,6 +533,7 @@
<string-array name="framePacingModeNames"> <string-array name="framePacingModeNames">
<item>@string/frame_pacing_mode_target_Auto</item> <item>@string/frame_pacing_mode_target_Auto</item>
<item>@string/frame_pacing_mode_target_30</item> <item>@string/frame_pacing_mode_target_30</item>
<item>@string/frame_pacing_mode_target_45</item>
<item>@string/frame_pacing_mode_target_60</item> <item>@string/frame_pacing_mode_target_60</item>
<item>@string/frame_pacing_mode_target_90</item> <item>@string/frame_pacing_mode_target_90</item>
<item>@string/frame_pacing_mode_target_120</item> <item>@string/frame_pacing_mode_target_120</item>
@ -543,6 +544,7 @@
<item>2</item> <item>2</item>
<item>3</item> <item>3</item>
<item>4</item> <item>4</item>
<item>5</item>
</integer-array> </integer-array>
<string-array name="appletEntries"> <string-array name="appletEntries">

1
src/android/app/src/main/res/values/strings.xml

@ -1037,6 +1037,7 @@
<!-- Frame Pacing Mode --> <!-- Frame Pacing Mode -->
<string name="frame_pacing_mode_target_Auto">Auto</string> <string name="frame_pacing_mode_target_Auto">Auto</string>
<string name="frame_pacing_mode_target_30">30 FPS</string> <string name="frame_pacing_mode_target_30">30 FPS</string>
<string name="frame_pacing_mode_target_45">45 FPS</string>
<string name="frame_pacing_mode_target_60">60 FPS</string> <string name="frame_pacing_mode_target_60">60 FPS</string>
<string name="frame_pacing_mode_target_90">90 FPS</string> <string name="frame_pacing_mode_target_90">90 FPS</string>
<string name="frame_pacing_mode_target_120">120 FPS</string> <string name="frame_pacing_mode_target_120">120 FPS</string>

2
src/common/settings_enums.h

@ -129,7 +129,7 @@ ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt
ENUM(AnisotropyMode, Automatic, Default, X2, X4, X8, X16, X32, X64, None); ENUM(AnisotropyMode, Automatic, Default, X2, X4, X8, X16, X32, X64, None);
ENUM(AstcDecodeMode, Cpu, Gpu, CpuAsynchronous); ENUM(AstcDecodeMode, Cpu, Gpu, CpuAsynchronous);
ENUM(AstcRecompression, Uncompressed, Bc1, Bc3); ENUM(AstcRecompression, Uncompressed, Bc1, Bc3);
ENUM(FramePacingMode, Target_Auto, Target_30, Target_60, Target_90, Target_120);
ENUM(FramePacingMode, Target_Auto, Target_30, Target_45, Target_60, Target_90, Target_120);
ENUM(VSyncMode, Immediate, Mailbox, Fifo, FifoRelaxed); ENUM(VSyncMode, Immediate, Mailbox, Fifo, FifoRelaxed);
ENUM(VramUsageMode, Conservative, Aggressive); ENUM(VramUsageMode, Conservative, Aggressive);
ENUM(RendererBackend, OpenGL_GLSL, Vulkan, Null, OpenGL_GLASM, OpenGL_SPIRV); ENUM(RendererBackend, OpenGL_GLSL, Vulkan, Null, OpenGL_GLASM, OpenGL_SPIRV);

1
src/qt_common/config/shared_translation.cpp

@ -516,6 +516,7 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent)
{ {
PAIR(FramePacingMode, Target_Auto, tr("Auto")), PAIR(FramePacingMode, Target_Auto, tr("Auto")),
PAIR(FramePacingMode, Target_30, tr("30 FPS")), PAIR(FramePacingMode, Target_30, tr("30 FPS")),
PAIR(FramePacingMode, Target_45, tr("45 FPS")),
PAIR(FramePacingMode, Target_60, tr("60 FPS")), PAIR(FramePacingMode, Target_60, tr("60 FPS")),
PAIR(FramePacingMode, Target_90, tr("90 FPS")), PAIR(FramePacingMode, Target_90, tr("90 FPS")),
PAIR(FramePacingMode, Target_120, tr("120 FPS")), PAIR(FramePacingMode, Target_120, tr("120 FPS")),

10
src/video_core/renderer_vulkan/vk_scheduler.h

@ -115,20 +115,19 @@ public:
/// Waits for the given GPU tick, optionally pacing frames. /// Waits for the given GPU tick, optionally pacing frames.
void Wait(u64 tick, double target_fps = 0.0) { void Wait(u64 tick, double target_fps = 0.0) {
if (Settings::values.use_speed_limit.GetValue() && target_fps > 0.0) { if (Settings::values.use_speed_limit.GetValue() && target_fps > 0.0) {
const auto now = std::chrono::steady_clock::now();
auto now = std::chrono::steady_clock::now();
if (start_time == std::chrono::steady_clock::time_point{} || current_target_fps != target_fps) { if (start_time == std::chrono::steady_clock::time_point{} || current_target_fps != target_fps) {
start_time = now; start_time = now;
frame_counter = 0;
current_target_fps = target_fps; current_target_fps = target_fps;
} }
frame_counter++;
std::chrono::duration<double> frame_interval(1.0 / current_target_fps); std::chrono::duration<double> frame_interval(1.0 / current_target_fps);
auto target_time = start_time + frame_interval * frame_counter;
auto elapsed = now - start_time;
auto expected_frame = static_cast<u64>(elapsed / frame_interval);
auto target_time = start_time + frame_interval * (expected_frame + 1);
if (target_time > now) { if (target_time > now) {
std::this_thread::sleep_until(target_time); std::this_thread::sleep_until(target_time);
} else { } else {
start_time = now; start_time = now;
frame_counter = 0;
} }
} }
if (tick > 0) { if (tick > 0) {
@ -282,7 +281,6 @@ private:
std::jthread worker_thread; std::jthread worker_thread;
std::chrono::steady_clock::time_point start_time{}; std::chrono::steady_clock::time_point start_time{};
u64 frame_counter{};
double current_target_fps{}; double current_target_fps{};
}; };

Loading…
Cancel
Save