diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java index b266f4905..111794d17 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java @@ -357,6 +357,7 @@ public final class SettingsFragmentPresenter { SettingSection rendererSection = mSettings.getSection(Settings.SECTION_RENDERER); Setting graphicsApi = rendererSection.getSetting(SettingsFile.KEY_GRAPHICS_API); Setting spvShaderGen = rendererSection.getSetting(SettingsFile.KEY_SPIRV_SHADER_GEN); + Setting asyncShaders = rendererSection.getSetting(SettingsFile.KEY_ASYNC_SHADERS); Setting resolutionFactor = rendererSection.getSetting(SettingsFile.KEY_RESOLUTION_FACTOR); Setting filterMode = rendererSection.getSetting(SettingsFile.KEY_FILTER_MODE); Setting shadersAccurateMul = rendererSection.getSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL); @@ -375,6 +376,7 @@ public final class SettingsFragmentPresenter { sl.add(new HeaderSetting(null, null, R.string.renderer, 0)); sl.add(new SingleChoiceSetting(SettingsFile.KEY_GRAPHICS_API, Settings.SECTION_RENDERER, R.string.graphics_api, 0, R.array.graphicsApiNames, R.array.graphicsApiValues, 2, graphicsApi)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SPIRV_SHADER_GEN, Settings.SECTION_RENDERER, R.string.spirv_shader_gen, R.string.spirv_shader_gen_description, true, spvShaderGen)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_ASYNC_SHADERS, Settings.SECTION_RENDERER, R.string.async_shaders, R.string.async_shaders_description, false, asyncShaders)); sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, Settings.SECTION_RENDERER, R.string.internal_resolution, R.string.internal_resolution_description, 1, 4, "x", 1, resolutionFactor)); sl.add(new CheckBoxSetting(SettingsFile.KEY_FILTER_MODE, Settings.SECTION_RENDERER, R.string.linear_filtering, R.string.linear_filtering_description, true, filterMode)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL, Settings.SECTION_RENDERER, R.string.shaders_accurate_mul, R.string.shaders_accurate_mul_description, false, shadersAccurateMul)); diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java index ef0aaab77..6748da1d7 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java @@ -42,6 +42,7 @@ public final class SettingsFile { public static final String KEY_GRAPHICS_API = "graphics_api"; public static final String KEY_SPIRV_SHADER_GEN = "spirv_shader_gen"; public static final String KEY_RENDERER_DEBUG = "renderer_debug"; + public static final String KEY_ASYNC_SHADERS = "async_shader_compilation"; public static final String KEY_HW_RENDERER = "use_hw_renderer"; public static final String KEY_HW_SHADER = "use_hw_shader"; public static final String KEY_SHADERS_ACCURATE_MUL = "shaders_accurate_mul"; diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index e39ff4f90..afaef9715 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -116,13 +116,15 @@ void Config::ReadValues() { // Renderer Settings::values.graphics_api = static_cast(sdl2_config->GetInteger("Renderer", "graphics_api", 2)); + Settings::values.renderer_debug = sdl2_config->GetBoolean("Renderer", "renderer_debug", false); Settings::values.async_command_recording = - sdl2_config->GetBoolean("Renderer", "async_command_recording", true); + sdl2_config->GetBoolean("Renderer", "async_command_recording", true) && + !Settings::values + .renderer_debug; ///< Enabling debug renderer force disables async recording Settings::values.async_shader_compilation = sdl2_config->GetBoolean("Renderer", "async_shader_compilation", false); Settings::values.spirv_shader_gen = sdl2_config->GetBoolean("Renderer", "spirv_shader_gen", true); - Settings::values.renderer_debug = sdl2_config->GetBoolean("Renderer", "renderer_debug", false); Settings::values.use_hw_renderer = sdl2_config->GetBoolean("Renderer", "use_hw_renderer", true); Settings::values.use_hw_shader = sdl2_config->GetBoolean("Renderer", "use_hw_shader", true); Settings::values.shaders_accurate_mul = diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index ab33f169e..a3200d3d2 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -75,6 +75,8 @@ Graphics API Enable SPIR-V shader generation Emits the fragment shader used to emulate PICA using SPIR-V instead of GLSL + Enable asynchronous shader compilation + Compiles shaders in the background to reduce stuttering during gameplay. When enabled expect temporary graphical glitches Enable debug renderer Log additional graphics related debug information. When enabled, game performance will be significantly reduced Synchronizes the game frame rate to the refresh rate of your device.