diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/settings.cpp | 12 | ||||
| -rw-r--r-- | src/common/settings.h | 13 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.ui | 15 |
5 files changed, 40 insertions, 10 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 1638b79f5..b1a2aa8b2 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp | |||
| @@ -129,6 +129,10 @@ void UpdateRescalingInfo() { | |||
| 129 | info.up_scale = 1; | 129 | info.up_scale = 1; |
| 130 | info.down_shift = 0; | 130 | info.down_shift = 0; |
| 131 | break; | 131 | break; |
| 132 | case ResolutionSetup::Res3_2X: | ||
| 133 | info.up_scale = 3; | ||
| 134 | info.down_shift = 1; | ||
| 135 | break; | ||
| 132 | case ResolutionSetup::Res2X: | 136 | case ResolutionSetup::Res2X: |
| 133 | info.up_scale = 2; | 137 | info.up_scale = 2; |
| 134 | info.down_shift = 0; | 138 | info.down_shift = 0; |
| @@ -149,6 +153,14 @@ void UpdateRescalingInfo() { | |||
| 149 | info.up_scale = 6; | 153 | info.up_scale = 6; |
| 150 | info.down_shift = 0; | 154 | info.down_shift = 0; |
| 151 | break; | 155 | break; |
| 156 | case ResolutionSetup::Res7X: | ||
| 157 | info.up_scale = 7; | ||
| 158 | info.down_shift = 0; | ||
| 159 | break; | ||
| 160 | case ResolutionSetup::Res8X: | ||
| 161 | info.up_scale = 8; | ||
| 162 | info.down_shift = 0; | ||
| 163 | break; | ||
| 152 | default: | 164 | default: |
| 153 | ASSERT(false); | 165 | ASSERT(false); |
| 154 | info.up_scale = 1; | 166 | info.up_scale = 1; |
diff --git a/src/common/settings.h b/src/common/settings.h index a457e3f23..80b2eeabc 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -56,11 +56,14 @@ enum class ResolutionSetup : u32 { | |||
| 56 | Res1_2X = 0, | 56 | Res1_2X = 0, |
| 57 | Res3_4X = 1, | 57 | Res3_4X = 1, |
| 58 | Res1X = 2, | 58 | Res1X = 2, |
| 59 | Res2X = 3, | 59 | Res3_2X = 3, |
| 60 | Res3X = 4, | 60 | Res2X = 4, |
| 61 | Res4X = 5, | 61 | Res3X = 5, |
| 62 | Res5X = 6, | 62 | Res4X = 6, |
| 63 | Res6X = 7, | 63 | Res5X = 7, |
| 64 | Res6X = 8, | ||
| 65 | Res7X = 9, | ||
| 66 | Res8X = 10, | ||
| 64 | }; | 67 | }; |
| 65 | 68 | ||
| 66 | enum class ScalingFilter : u32 { | 69 | enum class ScalingFilter : u32 { |
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index d1cbadde4..f4416f5b2 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp | |||
| @@ -312,8 +312,6 @@ void NVFlinger::Compose() { | |||
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | s64 NVFlinger::GetNextTicks() const { | 314 | s64 NVFlinger::GetNextTicks() const { |
| 315 | static constexpr s64 max_hertz = 120LL; | ||
| 316 | |||
| 317 | const auto& settings = Settings::values; | 315 | const auto& settings = Settings::values; |
| 318 | auto speed_scale = 1.f; | 316 | auto speed_scale = 1.f; |
| 319 | if (settings.use_multi_core.GetValue()) { | 317 | if (settings.use_multi_core.GetValue()) { |
| @@ -327,9 +325,11 @@ s64 NVFlinger::GetNextTicks() const { | |||
| 327 | } | 325 | } |
| 328 | } | 326 | } |
| 329 | 327 | ||
| 330 | const auto next_ticks = ((1000000000 * (1LL << swap_interval)) / max_hertz); | 328 | // As an extension, treat nonpositive swap interval as framerate multiplier. |
| 329 | const f32 effective_fps = swap_interval <= 0 ? 120.f * static_cast<f32>(1 - swap_interval) | ||
| 330 | : 60.f / static_cast<f32>(swap_interval); | ||
| 331 | 331 | ||
| 332 | return static_cast<s64>(speed_scale * static_cast<float>(next_ticks)); | 332 | return static_cast<s64>(speed_scale * (1000000000.f / effective_fps)); |
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | } // namespace Service::NVFlinger | 335 | } // namespace Service::NVFlinger |
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h index 9b22397db..3828cf272 100644 --- a/src/core/hle/service/nvflinger/nvflinger.h +++ b/src/core/hle/service/nvflinger/nvflinger.h | |||
| @@ -133,7 +133,7 @@ private: | |||
| 133 | /// layers. | 133 | /// layers. |
| 134 | u32 next_buffer_queue_id = 1; | 134 | u32 next_buffer_queue_id = 1; |
| 135 | 135 | ||
| 136 | u32 swap_interval = 1; | 136 | s32 swap_interval = 1; |
| 137 | 137 | ||
| 138 | /// Event that handles screen composition. | 138 | /// Event that handles screen composition. |
| 139 | std::shared_ptr<Core::Timing::EventType> multi_composition_event; | 139 | std::shared_ptr<Core::Timing::EventType> multi_composition_event; |
diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui index aa02cc63c..bb9910a53 100644 --- a/src/yuzu/configuration/configure_graphics.ui +++ b/src/yuzu/configuration/configure_graphics.ui | |||
| @@ -366,6 +366,11 @@ | |||
| 366 | </item> | 366 | </item> |
| 367 | <item> | 367 | <item> |
| 368 | <property name="text"> | 368 | <property name="text"> |
| 369 | <string>1.5X (1080p/1620p) [EXPERIMENTAL]</string> | ||
| 370 | </property> | ||
| 371 | </item> | ||
| 372 | <item> | ||
| 373 | <property name="text"> | ||
| 369 | <string>2X (1440p/2160p)</string> | 374 | <string>2X (1440p/2160p)</string> |
| 370 | </property> | 375 | </property> |
| 371 | </item> | 376 | </item> |
| @@ -389,6 +394,16 @@ | |||
| 389 | <string>6X (4320p/6480p)</string> | 394 | <string>6X (4320p/6480p)</string> |
| 390 | </property> | 395 | </property> |
| 391 | </item> | 396 | </item> |
| 397 | <item> | ||
| 398 | <property name="text"> | ||
| 399 | <string>7X (5040p/7560p)</string> | ||
| 400 | </property> | ||
| 401 | </item> | ||
| 402 | <item> | ||
| 403 | <property name="text"> | ||
| 404 | <string>8X (5760p/8640p)</string> | ||
| 405 | </property> | ||
| 406 | </item> | ||
| 392 | </widget> | 407 | </widget> |
| 393 | </item> | 408 | </item> |
| 394 | </layout> | 409 | </layout> |