From c650473fdc1c2f92abae77f24bb8bb1ca8d98fdc Mon Sep 17 00:00:00 2001 From: OpenSauce04 Date: Mon, 6 Apr 2026 16:27:40 +0100 Subject: [PATCH] Default to Vulkan renderer on Android --- .../citra_emu/features/settings/model/IntSetting.kt | 2 +- src/android/app/src/main/jni/default_ini.h | 2 +- src/citra_libretro/environment.cpp | 11 +++++++++-- src/common/settings.h | 6 +++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt index 2c8cbf2a1..eb1a880a5 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/IntSetting.kt @@ -17,7 +17,7 @@ enum class IntSetting( CAMERA_INNER_FLIP(SettingKeys.camera_inner_flip(), Settings.SECTION_CAMERA, 0), CAMERA_OUTER_LEFT_FLIP(SettingKeys.camera_outer_left_flip(), Settings.SECTION_CAMERA, 0), CAMERA_OUTER_RIGHT_FLIP(SettingKeys.camera_outer_right_flip(), Settings.SECTION_CAMERA, 0), - GRAPHICS_API(SettingKeys.graphics_api(), Settings.SECTION_RENDERER, 1), + GRAPHICS_API(SettingKeys.graphics_api(), Settings.SECTION_RENDERER, 2), RESOLUTION_FACTOR(SettingKeys.resolution_factor(), Settings.SECTION_RENDERER, 1), STEREOSCOPIC_3D_MODE(SettingKeys.render_3d(), Settings.SECTION_RENDERER, 2), STEREOSCOPIC_3D_DEPTH(SettingKeys.factor_3d(), Settings.SECTION_RENDERER, 0), diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h index 5e2eab1d1..ce93d0e6f 100644 --- a/src/android/app/src/main/jni/default_ini.h +++ b/src/android/app/src/main/jni/default_ini.h @@ -90,7 +90,7 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"( [Renderer] # Whether to render using OpenGL -# 1: OpenGL ES (default), 2: Vulkan +# 1: OpenGL ES, 2: Vulkan (default) )") DECLARE_KEY(graphics_api) BOOST_HANA_STRING(R"( # Whether to compile shaders on multiple worker threads (Vulkan only) diff --git a/src/citra_libretro/environment.cpp b/src/citra_libretro/environment.cpp index 04c78356f..c3deddacc 100644 --- a/src/citra_libretro/environment.cpp +++ b/src/citra_libretro/environment.cpp @@ -61,7 +61,14 @@ bool GetMicrophoneInterface(struct retro_microphone_interface* mic_interface) { } Settings::GraphicsAPI GetPreferredRenderer() { - // try and maintain the current driver + // On Android, we really want to default to Vulkan if we can, so we'll ignore the frontend's + // recommendation if possible... +#if defined(ANDROID) && defined(ENABLE_VULKAN) + return Settings::GraphicsAPI::Vulkan; +#endif + // ...Otherwise negotiate with the RetroArch frontend as usual + + // Attempt to use the renderer recommended by the frontend if possible retro_hw_context_type context_type = RETRO_HW_CONTEXT_OPENGL; environ_cb(RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER, &context_type); switch (context_type) { @@ -80,7 +87,7 @@ Settings::GraphicsAPI GetPreferredRenderer() { default: break; } - // we can't maintain the current driver, need to switch + // We can't get a recommendation from the frontend, so fall back to whatever's available #if defined(ENABLE_VULKAN) return Settings::GraphicsAPI::Vulkan; #elif defined(ENABLE_OPENGL) diff --git a/src/common/settings.h b/src/common/settings.h index 90922bcff..5eca53421 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -498,8 +498,11 @@ struct Values { Setting apply_region_free_patch{true, Keys::apply_region_free_patch}; // Renderer + // clang-format off SwitchableSetting graphics_api{ -#if defined(ENABLE_OPENGL) +#if defined(ANDROID) && defined(ENABLE_VULKAN) // Prefer Vulkan on Android, OpenGL on everything else + GraphicsAPI::Vulkan, +#elif defined(ENABLE_OPENGL) GraphicsAPI::OpenGL, #elif defined(ENABLE_VULKAN) GraphicsAPI::Vulkan, @@ -510,6 +513,7 @@ struct Values { #error "At least one renderer must be enabled." #endif GraphicsAPI::Software, GraphicsAPI::Vulkan, Keys::graphics_api}; + // clang-format on SwitchableSetting physical_device{0, Keys::physical_device}; Setting use_gles{false, Keys::use_gles}; Setting renderer_debug{false, Keys::renderer_debug};