summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2023-02-19 02:19:21 -0800
committerGravatar bunnei2023-06-03 00:05:32 -0700
commit8248d690935dbd2df8294c75360348a07a30afed (patch)
tree28a0dd2e9ef6f09ebfc221b895a8b9230e53fab0 /src
parentandroid: vulkan_device: Disable VK_EXT_extended_dynamic_state2 on Qualcomm. (diff)
downloadyuzu-8248d690935dbd2df8294c75360348a07a30afed.tar.gz
yuzu-8248d690935dbd2df8294c75360348a07a30afed.tar.xz
yuzu-8248d690935dbd2df8294c75360348a07a30afed.zip
android: vulkan: Implement adrenotools turbo mode.
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.java1
-rw-r--r--src/android/app/src/main/jni/config.cpp5
-rw-r--r--src/android/app/src/main/jni/default_ini.h4
-rw-r--r--src/android/app/src/main/res/values/strings.xml2
-rw-r--r--src/video_core/renderer_vulkan/vk_turbo_mode.cpp12
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp4
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
252force_max_clock =
253
254# Enable graphics API debugging mode.
255# 0 (default): Disabled, 1: Enabled
252debug = 256debug =
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