summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2020-04-20 13:20:52 -0400
committerGravatar Fernando Sahmkow2020-04-23 08:52:57 -0400
commitb8aef40c56588c999b15a63516b5d68958f667df (patch)
tree0edd0e6d5346b8cc3d992962c6381efe7a897dc2
parentMaxwell3D: Process Macros on MultiMethod. (diff)
downloadyuzu-b8aef40c56588c999b15a63516b5d68958f667df.tar.gz
yuzu-b8aef40c56588c999b15a63516b5d68958f667df.tar.xz
yuzu-b8aef40c56588c999b15a63516b5d68958f667df.zip
GPU: Add Fast GPU Time Option.
-rw-r--r--src/core/settings.h1
-rw-r--r--src/video_core/gpu.cpp6
-rw-r--r--src/yuzu/configuration/config.cpp2
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp2
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.ui7
-rw-r--r--src/yuzu_cmd/config.cpp2
-rw-r--r--src/yuzu_tester/config.cpp2
7 files changed, 21 insertions, 1 deletions
diff --git a/src/core/settings.h b/src/core/settings.h
index 7d09253f5..163900f0b 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -446,6 +446,7 @@ struct Values {
446 bool use_asynchronous_gpu_emulation; 446 bool use_asynchronous_gpu_emulation;
447 bool use_vsync; 447 bool use_vsync;
448 bool force_30fps_mode; 448 bool force_30fps_mode;
449 bool use_fast_gpu_time;
449 450
450 float bg_red; 451 float bg_red;
451 float bg_green; 452 float bg_green;
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp
index 54e7876a6..d2bd3cc9d 100644
--- a/src/video_core/gpu.cpp
+++ b/src/video_core/gpu.cpp
@@ -9,6 +9,7 @@
9#include "core/core_timing_util.h" 9#include "core/core_timing_util.h"
10#include "core/frontend/emu_window.h" 10#include "core/frontend/emu_window.h"
11#include "core/memory.h" 11#include "core/memory.h"
12#include "core/settings.h"
12#include "video_core/engines/fermi_2d.h" 13#include "video_core/engines/fermi_2d.h"
13#include "video_core/engines/kepler_compute.h" 14#include "video_core/engines/kepler_compute.h"
14#include "video_core/engines/kepler_memory.h" 15#include "video_core/engines/kepler_memory.h"
@@ -154,7 +155,10 @@ u64 GPU::GetTicks() const {
154 constexpr u64 gpu_ticks_den = 625; 155 constexpr u64 gpu_ticks_den = 625;
155 156
156 const u64 cpu_ticks = system.CoreTiming().GetTicks(); 157 const u64 cpu_ticks = system.CoreTiming().GetTicks();
157 const u64 nanoseconds = Core::Timing::CyclesToNs(cpu_ticks).count(); 158 u64 nanoseconds = Core::Timing::CyclesToNs(cpu_ticks).count();
159 if (Settings::values.use_fast_gpu_time) {
160 nanoseconds /= 256;
161 }
158 const u64 nanoseconds_num = nanoseconds / gpu_ticks_den; 162 const u64 nanoseconds_num = nanoseconds / gpu_ticks_den;
159 const u64 nanoseconds_rem = nanoseconds % gpu_ticks_den; 163 const u64 nanoseconds_rem = nanoseconds % gpu_ticks_den;
160 return nanoseconds_num * gpu_ticks_num + (nanoseconds_rem * gpu_ticks_num) / gpu_ticks_den; 164 return nanoseconds_num * gpu_ticks_num + (nanoseconds_rem * gpu_ticks_num) / gpu_ticks_den;
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 196a3a116..c7c11b9dd 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -644,6 +644,7 @@ void Config::ReadRendererValues() {
644 Settings::values.use_asynchronous_gpu_emulation = 644 Settings::values.use_asynchronous_gpu_emulation =
645 ReadSetting(QStringLiteral("use_asynchronous_gpu_emulation"), false).toBool(); 645 ReadSetting(QStringLiteral("use_asynchronous_gpu_emulation"), false).toBool();
646 Settings::values.use_vsync = ReadSetting(QStringLiteral("use_vsync"), true).toBool(); 646 Settings::values.use_vsync = ReadSetting(QStringLiteral("use_vsync"), true).toBool();
647 Settings::values.use_fast_gpu_time = ReadSetting(QStringLiteral("use_fast_gpu_time"), true).toBool();
647 Settings::values.force_30fps_mode = 648 Settings::values.force_30fps_mode =
648 ReadSetting(QStringLiteral("force_30fps_mode"), false).toBool(); 649 ReadSetting(QStringLiteral("force_30fps_mode"), false).toBool();
649 650
@@ -1085,6 +1086,7 @@ void Config::SaveRendererValues() {
1085 WriteSetting(QStringLiteral("use_asynchronous_gpu_emulation"), 1086 WriteSetting(QStringLiteral("use_asynchronous_gpu_emulation"),
1086 Settings::values.use_asynchronous_gpu_emulation, false); 1087 Settings::values.use_asynchronous_gpu_emulation, false);
1087 WriteSetting(QStringLiteral("use_vsync"), Settings::values.use_vsync, true); 1088 WriteSetting(QStringLiteral("use_vsync"), Settings::values.use_vsync, true);
1089 WriteSetting(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time, true);
1088 WriteSetting(QStringLiteral("force_30fps_mode"), Settings::values.force_30fps_mode, false); 1090 WriteSetting(QStringLiteral("force_30fps_mode"), Settings::values.force_30fps_mode, false);
1089 1091
1090 // Cast to double because Qt's written float values are not human-readable 1092 // Cast to double because Qt's written float values are not human-readable
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 0a3f47339..5bb2ae555 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -22,6 +22,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
22 ui->gpu_accuracy->setCurrentIndex(static_cast<int>(Settings::values.gpu_accuracy)); 22 ui->gpu_accuracy->setCurrentIndex(static_cast<int>(Settings::values.gpu_accuracy));
23 ui->use_vsync->setEnabled(runtime_lock); 23 ui->use_vsync->setEnabled(runtime_lock);
24 ui->use_vsync->setChecked(Settings::values.use_vsync); 24 ui->use_vsync->setChecked(Settings::values.use_vsync);
25 ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time);
25 ui->force_30fps_mode->setEnabled(runtime_lock); 26 ui->force_30fps_mode->setEnabled(runtime_lock);
26 ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode); 27 ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode);
27 ui->anisotropic_filtering_combobox->setEnabled(runtime_lock); 28 ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
@@ -32,6 +33,7 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
32 auto gpu_accuracy = static_cast<Settings::GPUAccuracy>(ui->gpu_accuracy->currentIndex()); 33 auto gpu_accuracy = static_cast<Settings::GPUAccuracy>(ui->gpu_accuracy->currentIndex());
33 Settings::values.gpu_accuracy = gpu_accuracy; 34 Settings::values.gpu_accuracy = gpu_accuracy;
34 Settings::values.use_vsync = ui->use_vsync->isChecked(); 35 Settings::values.use_vsync = ui->use_vsync->isChecked();
36 Settings::values.use_fast_gpu_time = ui->use_fast_gpu_time->isChecked();
35 Settings::values.force_30fps_mode = ui->force_30fps_mode->isChecked(); 37 Settings::values.force_30fps_mode = ui->force_30fps_mode->isChecked();
36 Settings::values.max_anisotropy = ui->anisotropic_filtering_combobox->currentIndex(); 38 Settings::values.max_anisotropy = ui->anisotropic_filtering_combobox->currentIndex();
37} 39}
diff --git a/src/yuzu/configuration/configure_graphics_advanced.ui b/src/yuzu/configuration/configure_graphics_advanced.ui
index 0c7b383e0..770b80c50 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.ui
+++ b/src/yuzu/configuration/configure_graphics_advanced.ui
@@ -70,6 +70,13 @@
70 </widget> 70 </widget>
71 </item> 71 </item>
72 <item> 72 <item>
73 <widget class="QCheckBox" name="use_fast_gpu_time">
74 <property name="text">
75 <string>Use Fast GPU Time</string>
76 </property>
77 </widget>
78 </item>
79 <item>
73 <layout class="QHBoxLayout" name="horizontalLayout_1"> 80 <layout class="QHBoxLayout" name="horizontalLayout_1">
74 <item> 81 <item>
75 <widget class="QLabel" name="af_label"> 82 <widget class="QLabel" name="af_label">
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index d1ac354bf..8476a5a16 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -394,6 +394,8 @@ void Config::ReadValues() {
394 sdl2_config->GetBoolean("Renderer", "use_asynchronous_gpu_emulation", false); 394 sdl2_config->GetBoolean("Renderer", "use_asynchronous_gpu_emulation", false);
395 Settings::values.use_vsync = 395 Settings::values.use_vsync =
396 static_cast<u16>(sdl2_config->GetInteger("Renderer", "use_vsync", 1)); 396 static_cast<u16>(sdl2_config->GetInteger("Renderer", "use_vsync", 1));
397 Settings::values.use_fast_gpu_time =
398 sdl2_config->GetBoolean("Renderer", "use_fast_gpu_time", true);
397 399
398 Settings::values.bg_red = static_cast<float>(sdl2_config->GetReal("Renderer", "bg_red", 0.0)); 400 Settings::values.bg_red = static_cast<float>(sdl2_config->GetReal("Renderer", "bg_red", 0.0));
399 Settings::values.bg_green = 401 Settings::values.bg_green =
diff --git a/src/yuzu_tester/config.cpp b/src/yuzu_tester/config.cpp
index c0325cc3c..3be58b15d 100644
--- a/src/yuzu_tester/config.cpp
+++ b/src/yuzu_tester/config.cpp
@@ -130,6 +130,8 @@ void Config::ReadValues() {
130 Settings::values.gpu_accuracy = static_cast<Settings::GPUAccuracy>(gpu_accuracy_level); 130 Settings::values.gpu_accuracy = static_cast<Settings::GPUAccuracy>(gpu_accuracy_level);
131 Settings::values.use_asynchronous_gpu_emulation = 131 Settings::values.use_asynchronous_gpu_emulation =
132 sdl2_config->GetBoolean("Renderer", "use_asynchronous_gpu_emulation", false); 132 sdl2_config->GetBoolean("Renderer", "use_asynchronous_gpu_emulation", false);
133 Settings::values.use_fast_gpu_time =
134 sdl2_config->GetBoolean("Renderer", "use_fast_gpu_time", true);
133 135
134 Settings::values.bg_red = static_cast<float>(sdl2_config->GetReal("Renderer", "bg_red", 0.0)); 136 Settings::values.bg_red = static_cast<float>(sdl2_config->GetReal("Renderer", "bg_red", 0.0));
135 Settings::values.bg_green = 137 Settings::values.bg_green =