diff options
| author | 2023-02-19 02:19:21 -0800 | |
|---|---|---|
| committer | 2023-06-03 00:05:32 -0700 | |
| commit | 8248d690935dbd2df8294c75360348a07a30afed (patch) | |
| tree | 28a0dd2e9ef6f09ebfc221b895a8b9230e53fab0 /src | |
| parent | android: vulkan_device: Disable VK_EXT_extended_dynamic_state2 on Qualcomm. (diff) | |
| download | yuzu-8248d690935dbd2df8294c75360348a07a30afed.tar.gz yuzu-8248d690935dbd2df8294c75360348a07a30afed.tar.xz yuzu-8248d690935dbd2df8294c75360348a07a30afed.zip | |
android: vulkan: Implement adrenotools turbo mode.
Diffstat (limited to 'src')
7 files changed, 27 insertions, 3 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java index 71ae03ca1..f924a167d 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java | |||
| @@ -160,12 +160,14 @@ public final class SettingsFragmentPresenter { | |||
| 160 | Setting rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY); | 160 | Setting rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY); |
| 161 | Setting rendererReolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION); | 161 | Setting rendererReolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION); |
| 162 | Setting rendererAspectRation = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO); | 162 | Setting rendererAspectRation = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO); |
| 163 | Setting rendererForceMaxClocks = rendererSection.getSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK); | ||
| 163 | Setting rendererAsynchronousShaders = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS); | 164 | Setting rendererAsynchronousShaders = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS); |
| 164 | 165 | ||
| 165 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_BACKEND, Settings.SECTION_RENDERER, R.string.renderer_api, 0, R.array.rendererApiNames, R.array.rendererApiValues, 1, rendererBackend)); | 166 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_BACKEND, Settings.SECTION_RENDERER, R.string.renderer_api, 0, R.array.rendererApiNames, R.array.rendererApiValues, 1, rendererBackend)); |
| 166 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ACCURACY, Settings.SECTION_RENDERER, R.string.renderer_accuracy, 0, R.array.rendererAccuracyNames, R.array.rendererAccuracyValues, 1, rendererAccuracy)); | 167 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ACCURACY, Settings.SECTION_RENDERER, R.string.renderer_accuracy, 0, R.array.rendererAccuracyNames, R.array.rendererAccuracyValues, 1, rendererAccuracy)); |
| 167 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_RESOLUTION, Settings.SECTION_RENDERER, R.string.renderer_resolution, 0, R.array.rendererResolutionNames, R.array.rendererResolutionValues, 2, rendererReolution)); | 168 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_RESOLUTION, Settings.SECTION_RENDERER, R.string.renderer_resolution, 0, R.array.rendererResolutionNames, R.array.rendererResolutionValues, 2, rendererReolution)); |
| 168 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO, Settings.SECTION_RENDERER, R.string.renderer_aspect_ratio, 0, R.array.rendererAspectRatioNames, R.array.rendererAspectRatioValues, 0, rendererAspectRation)); | 169 | sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO, Settings.SECTION_RENDERER, R.string.renderer_aspect_ratio, 0, R.array.rendererAspectRatioNames, R.array.rendererAspectRatioValues, 0, rendererAspectRation)); |
| 170 | sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK, Settings.SECTION_RENDERER, R.string.renderer_force_max_clock, R.string.renderer_force_max_clock_description, true, rendererForceMaxClocks)); | ||
| 169 | sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS, Settings.SECTION_RENDERER, R.string.renderer_asynchronous_shaders, R.string.renderer_asynchronous_shaders_description, false, rendererAsynchronousShaders)); | 171 | sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS, Settings.SECTION_RENDERER, R.string.renderer_asynchronous_shaders, R.string.renderer_asynchronous_shaders_description, false, rendererAsynchronousShaders)); |
| 170 | } | 172 | } |
| 171 | 173 | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.java index 392c2e62d..12bc03ffa 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.java | |||
| @@ -47,6 +47,7 @@ public final class SettingsFile { | |||
| 47 | public static final String KEY_RENDERER_ASPECT_RATIO = "aspect_ratio"; | 47 | public static final String KEY_RENDERER_ASPECT_RATIO = "aspect_ratio"; |
| 48 | public static final String KEY_RENDERER_ACCURACY = "gpu_accuracy"; | 48 | public static final String KEY_RENDERER_ACCURACY = "gpu_accuracy"; |
| 49 | public static final String KEY_RENDERER_ASYNCHRONOUS_SHADERS = "use_asynchronous_shaders"; | 49 | public static final String KEY_RENDERER_ASYNCHRONOUS_SHADERS = "use_asynchronous_shaders"; |
| 50 | public static final String KEY_RENDERER_FORCE_MAX_CLOCK = "force_max_clock"; | ||
| 50 | public static final String KEY_RENDERER_USE_SPEED_LIMIT = "use_speed_limit"; | 51 | public static final String KEY_RENDERER_USE_SPEED_LIMIT = "use_speed_limit"; |
| 51 | public static final String KEY_RENDERER_SPEED_LIMIT = "speed_limit"; | 52 | public static final String KEY_RENDERER_SPEED_LIMIT = "speed_limit"; |
| 52 | // Audio | 53 | // Audio |
diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index 0a3cb9162..d197413b9 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp | |||
| @@ -192,7 +192,6 @@ void Config::ReadValues() { | |||
| 192 | 192 | ||
| 193 | // Renderer | 193 | // Renderer |
| 194 | ReadSetting("Renderer", Settings::values.renderer_backend); | 194 | ReadSetting("Renderer", Settings::values.renderer_backend); |
| 195 | ReadSetting("Renderer", Settings::values.renderer_force_max_clock); | ||
| 196 | ReadSetting("Renderer", Settings::values.renderer_debug); | 195 | ReadSetting("Renderer", Settings::values.renderer_debug); |
| 197 | ReadSetting("Renderer", Settings::values.renderer_shader_feedback); | 196 | ReadSetting("Renderer", Settings::values.renderer_shader_feedback); |
| 198 | ReadSetting("Renderer", Settings::values.enable_nsight_aftermath); | 197 | ReadSetting("Renderer", Settings::values.enable_nsight_aftermath); |
| @@ -223,6 +222,10 @@ void Config::ReadValues() { | |||
| 223 | ReadSetting("Renderer", Settings::values.bg_green); | 222 | ReadSetting("Renderer", Settings::values.bg_green); |
| 224 | ReadSetting("Renderer", Settings::values.bg_blue); | 223 | ReadSetting("Renderer", Settings::values.bg_blue); |
| 225 | 224 | ||
| 225 | // Enable force_max_clock by default on Android | ||
| 226 | Settings::values.renderer_force_max_clock = | ||
| 227 | config->GetBoolean("Renderer", "force_max_clock", true); | ||
| 228 | |||
| 226 | // Audio | 229 | // Audio |
| 227 | ReadSetting("Audio", Settings::values.sink_id); | 230 | ReadSetting("Audio", Settings::values.sink_id); |
| 228 | ReadSetting("Audio", Settings::values.audio_output_device_id); | 231 | ReadSetting("Audio", Settings::values.audio_output_device_id); |
diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h index eecda4756..25ec140de 100644 --- a/src/android/app/src/main/jni/default_ini.h +++ b/src/android/app/src/main/jni/default_ini.h | |||
| @@ -249,6 +249,10 @@ backend = | |||
| 249 | 249 | ||
| 250 | # Enable graphics API debugging mode. | 250 | # Enable graphics API debugging mode. |
| 251 | # 0 (default): Disabled, 1: Enabled | 251 | # 0 (default): Disabled, 1: Enabled |
| 252 | force_max_clock = | ||
| 253 | |||
| 254 | # Enable graphics API debugging mode. | ||
| 255 | # 0 (default): Disabled, 1: Enabled | ||
| 252 | debug = | 256 | debug = |
| 253 | 257 | ||
| 254 | # Enable shader feedback. | 258 | # Enable shader feedback. |
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 27749b287..bdaaa7650 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml | |||
| @@ -29,6 +29,8 @@ | |||
| 29 | <string name="renderer_accuracy">Accuracy level</string> | 29 | <string name="renderer_accuracy">Accuracy level</string> |
| 30 | <string name="renderer_resolution">Resolution</string> | 30 | <string name="renderer_resolution">Resolution</string> |
| 31 | <string name="renderer_aspect_ratio">Aspect Ratio</string> | 31 | <string name="renderer_aspect_ratio">Aspect Ratio</string> |
| 32 | <string name="renderer_force_max_clock">Force maximum clocks (Adreno only)</string> | ||
| 33 | <string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string> | ||
| 32 | <string name="renderer_asynchronous_shaders">Use asynchronous shaders</string> | 34 | <string name="renderer_asynchronous_shaders">Use asynchronous shaders</string> |
| 33 | <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, which will reduce stutter but may introduce glitches.</string> | 35 | <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, which will reduce stutter but may introduce glitches.</string> |
| 34 | 36 | ||
diff --git a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp index db04943eb..29751e6b4 100644 --- a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp +++ b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp | |||
| @@ -1,6 +1,10 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #ifdef ANDROID | ||
| 5 | #include <adrenotools/driver.h> | ||
| 6 | #endif | ||
| 7 | |||
| 4 | #include "common/literals.h" | 8 | #include "common/literals.h" |
| 5 | #include "video_core/host_shaders/vulkan_turbo_mode_comp_spv.h" | 9 | #include "video_core/host_shaders/vulkan_turbo_mode_comp_spv.h" |
| 6 | #include "video_core/renderer_vulkan/renderer_vulkan.h" | 10 | #include "video_core/renderer_vulkan/renderer_vulkan.h" |
| @@ -144,6 +148,9 @@ void TurboMode::Run(std::stop_token stop_token) { | |||
| 144 | auto cmdbuf = vk::CommandBuffer{cmdbufs[0], m_device.GetDispatchLoader()}; | 148 | auto cmdbuf = vk::CommandBuffer{cmdbufs[0], m_device.GetDispatchLoader()}; |
| 145 | 149 | ||
| 146 | while (!stop_token.stop_requested()) { | 150 | while (!stop_token.stop_requested()) { |
| 151 | #ifdef ANDROID | ||
| 152 | adrenotools_set_turbo(true); | ||
| 153 | #else | ||
| 147 | // Reset the fence. | 154 | // Reset the fence. |
| 148 | fence.Reset(); | 155 | fence.Reset(); |
| 149 | 156 | ||
| @@ -209,7 +216,7 @@ void TurboMode::Run(std::stop_token stop_token) { | |||
| 209 | 216 | ||
| 210 | // Wait for completion. | 217 | // Wait for completion. |
| 211 | fence.Wait(); | 218 | fence.Wait(); |
| 212 | 219 | #endif | |
| 213 | // Wait for the next graphics queue submission if necessary. | 220 | // Wait for the next graphics queue submission if necessary. |
| 214 | std::unique_lock lk{m_submission_lock}; | 221 | std::unique_lock lk{m_submission_lock}; |
| 215 | Common::CondvarWait(m_submission_cv, lk, stop_token, [this] { | 222 | Common::CondvarWait(m_submission_cv, lk, stop_token, [this] { |
| @@ -217,6 +224,9 @@ void TurboMode::Run(std::stop_token stop_token) { | |||
| 217 | std::chrono::milliseconds{100}; | 224 | std::chrono::milliseconds{100}; |
| 218 | }); | 225 | }); |
| 219 | } | 226 | } |
| 227 | #ifdef ANDROID | ||
| 228 | adrenotools_set_turbo(false); | ||
| 229 | #endif | ||
| 220 | } | 230 | } |
| 221 | 231 | ||
| 222 | } // namespace Vulkan | 232 | } // namespace Vulkan |
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 79686a176..70ee60a96 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -681,7 +681,9 @@ bool Device::ShouldBoostClocks() const { | |||
| 681 | driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE || | 681 | driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE || |
| 682 | driver_id == VK_DRIVER_ID_MESA_RADV || driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY || | 682 | driver_id == VK_DRIVER_ID_MESA_RADV || driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY || |
| 683 | driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS || | 683 | driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS || |
| 684 | driver_id == VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA; | 684 | driver_id == VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA || |
| 685 | driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY || | ||
| 686 | driver_id == VK_DRIVER_ID_MESA_TURNIP; | ||
| 685 | 687 | ||
| 686 | const bool is_steam_deck = vendor_id == 0x1002 && device_id == 0x163F; | 688 | const bool is_steam_deck = vendor_id == 0x1002 && device_id == 0x163F; |
| 687 | 689 | ||