diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt
index 041e04db7..5180fb8a0 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt
@@ -172,6 +172,8 @@ object NativeLibrary {
fileRedirectDir: String?
)
+ external fun enableAdrenoTurboMode(enable: Boolean)
+
external fun areKeysAvailable(): Boolean
external fun getHomeMenuPath(region: Int): String
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
index f6b0cf4d0..b7785bf6a 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
@@ -33,6 +33,7 @@ import org.citra.citra_emu.contracts.OpenFileResultContract
import org.citra.citra_emu.databinding.ActivityEmulationBinding
import org.citra.citra_emu.display.ScreenAdjustmentUtil
import org.citra.citra_emu.features.hotkeys.HotkeyUtility
+import org.citra.citra_emu.features.settings.model.BooleanSetting
import org.citra.citra_emu.features.settings.model.SettingsViewModel
import org.citra.citra_emu.features.settings.model.view.InputBindingSetting
import org.citra.citra_emu.fragments.EmulationFragment
@@ -71,6 +72,8 @@ class EmulationActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
+ NativeLibrary.enableAdrenoTurboMode(BooleanSetting.ADRENO_GPU_BOOST.boolean)
+
binding = ActivityEmulationBinding.inflate(layoutInflater)
screenAdjustmentUtil = ScreenAdjustmentUtil(windowManager, settingsViewModel.settings)
hotkeyUtility = HotkeyUtility(screenAdjustmentUtil, this)
@@ -127,6 +130,7 @@ class EmulationActivity : AppCompatActivity() {
}
override fun onDestroy() {
+ NativeLibrary.enableAdrenoTurboMode(false)
EmulationLifecycleUtil.clear()
isEmulationRunning = false
instance = null
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
index 227d2dbc2..9fb8df0b8 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
@@ -14,7 +14,8 @@ enum class BooleanSetting(
PLUGIN_LOADER("plugin_loader", Settings.SECTION_SYSTEM, false),
ALLOW_PLUGIN_LOADER("allow_plugin_loader", Settings.SECTION_SYSTEM, true),
SWAP_SCREEN("swap_screen", Settings.SECTION_LAYOUT, false),
- INSTANT_DEBUG_LOG("instant_debug_log", Settings.SECTION_DEBUG, false);
+ INSTANT_DEBUG_LOG("instant_debug_log", Settings.SECTION_DEBUG, false),
+ ADRENO_GPU_BOOST("adreno_gpu_boost", Settings.SECTION_RENDERER, false);
override var boolean: Boolean = defaultValue
@@ -35,7 +36,8 @@ enum class BooleanSetting(
private val NOT_RUNTIME_EDITABLE = listOf(
PLUGIN_LOADER,
ALLOW_PLUGIN_LOADER,
- ASYNC_SHADERS
+ ASYNC_SHADERS,
+ ADRENO_GPU_BOOST
)
fun from(key: String): BooleanSetting? =
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 840ac5aed..37b83231c 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -38,6 +38,7 @@ import org.citra.citra_emu.features.settings.model.view.SwitchSetting
import org.citra.citra_emu.features.settings.utils.SettingsFile
import org.citra.citra_emu.fragments.ResetSettingsDialogFragment
import org.citra.citra_emu.utils.BirthdayMonth
+import org.citra.citra_emu.utils.GpuDriverHelper
import org.citra.citra_emu.utils.Log
import org.citra.citra_emu.utils.SystemSaveGame
import org.citra.citra_emu.utils.ThemeUtil
@@ -744,6 +745,17 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
IntSetting.SHADERS_ACCURATE_MUL.defaultValue
)
)
+ if (GpuDriverHelper.supportsCustomDriverLoading()) {
+ add(
+ SwitchSetting(
+ BooleanSetting.ADRENO_GPU_BOOST,
+ R.string.adreno_gpu_boost,
+ R.string.adreno_gpu_boost_description,
+ BooleanSetting.ADRENO_GPU_BOOST.key,
+ BooleanSetting.ADRENO_GPU_BOOST.defaultValue
+ )
+ )
+ }
add(
SwitchSetting(
IntSetting.DISK_SHADER_CACHE,
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt
index bd5ecc2eb..48e8fbbda 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt
@@ -34,13 +34,10 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter
}
binding.switchWidget.isEnabled = setting.isEditable
- if (setting.isEditable) {
- binding.textSettingName.alpha = 1f
- binding.textSettingDescription.alpha = 1f
- } else {
- binding.textSettingName.alpha = 0.5f
- binding.textSettingDescription.alpha = 0.5f
- }
+
+ val textAlpha = if (setting.isEditable) 1f else 0.5f
+ binding.textSettingName.alpha = textAlpha
+ binding.textSettingDescription.alpha = textAlpha
}
override fun onClick(clicked: View) {
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index 2df3465aa..1cf68cf54 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -256,6 +256,12 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) {
return Core::System::ResultStatus::Success;
}
+void EnableAdrenoTurboMode(bool enable) {
+#if defined(ENABLE_VULKAN) && CITRA_ARCH(arm64)
+ adrenotools_set_turbo(enable);
+#endif
+}
+
void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir,
const std::string& custom_driver_name,
const std::string& file_redirect_dir) {
@@ -335,6 +341,12 @@ void JNICALL Java_org_citra_citra_1emu_NativeLibrary_initializeGpuDriver(
GetJString(env, custom_driver_name), GetJString(env, file_redirect_dir));
}
+void JNICALL Java_org_citra_citra_1emu_NativeLibrary_enableAdrenoTurboMode(JNIEnv* env,
+ jobject obj,
+ jboolean enable) {
+ EnableAdrenoTurboMode(enable);
+}
+
void Java_org_citra_citra_1emu_NativeLibrary_notifyOrientationChange([[maybe_unused]] JNIEnv* env,
[[maybe_unused]] jobject obj,
jint layout_option,
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 606376869..b3c358227 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -267,6 +267,8 @@
Shader JIT
Disk Shader Cache
Reduce stuttering by storing and loading generated shaders to disk. It cannot be used without Enabling Hardware Shader.
+ Adreno GPU Boost (Experimental)
+ Increases graphics throughput on supported devices, improving performance. Use of this setting can increase power usage and temperature. May cause stability issues on certain devices.
Utility
Dump Textures
Textures are dumped to dump/textures/[Title ID]/.