From 7a044d9586ceda43420c7307debac551758bc7b6 Mon Sep 17 00:00:00 2001 From: SachinVin Date: Wed, 31 Mar 2021 22:31:46 +0530 Subject: [PATCH] android: disk_shader: add UI # Conflicts: # src/android/app/src/main/res/values/strings.xml ui pt3 --- .../DiskShaderCacheProgress.java | 32 +++++++++---------- .../ui/SettingsFragmentPresenter.java | 2 ++ .../features/settings/utils/SettingsFile.java | 1 + .../app/src/main/res/values/strings.xml | 8 +++++ 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/disk_shader_cache/DiskShaderCacheProgress.java b/src/android/app/src/main/java/org/citra/citra_emu/disk_shader_cache/DiskShaderCacheProgress.java index 5e683e616..2766fbacb 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/disk_shader_cache/DiskShaderCacheProgress.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/disk_shader_cache/DiskShaderCacheProgress.java @@ -2,26 +2,22 @@ package org.citra.citra_emu.disk_shader_cache; import android.app.Activity; import android.app.Dialog; +import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.FrameLayout; import android.widget.ProgressBar; -import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentManager; -import org.citra.citra_emu.CitraApplication; import org.citra.citra_emu.NativeLibrary; import org.citra.citra_emu.R; import org.citra.citra_emu.activities.EmulationActivity; +import org.citra.citra_emu.utils.Log; import java.util.Objects; @@ -77,13 +73,13 @@ public class DiskShaderCacheProgress { builder.setTitle(title); builder.setMessage(message); builder.setView(view); - builder.setNegativeButton(R.string.abort_button, (dialog, whichButton) -> { - - }); + builder.setNegativeButton(android.R.string.cancel, null); dialog = builder.create(); dialog.create(); + dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener((v) -> emulationActivity.onBackPressed()); + synchronized (finishLock) { finishLock.notifyAll(); } @@ -91,15 +87,12 @@ public class DiskShaderCacheProgress { return dialog; } - private void onUpdateProgress(LoadCallbackStage stage, int progress, int max) { + private void onUpdateProgress(String msg, int progress, int max) { updateHandler.post(()->{ - final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); progressBar.setProgress(progress); progressBar.setMax(max); progressText.setText(String.format("%d/%d", progress, max)); - if (stage == LoadCallbackStage.Build){ - dialog.setMessage(emulationActivity.getString(R.string.disk_cache_building)); - } + dialog.setMessage(msg); }); } } @@ -107,7 +100,7 @@ public class DiskShaderCacheProgress { private static void prepareDialog() { NativeLibrary.sEmulationActivity.get().runOnUiThread(() -> { final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); - fragment = ProgressDialogFragment.newInstance(emulationActivity.getString(R.string.disk_shaders_loading), emulationActivity.getString(R.string.disk_shaders_preparing)); + fragment = ProgressDialogFragment.newInstance(emulationActivity.getString(R.string.loading), emulationActivity.getString(R.string.preparing_shaders)); fragment.show(emulationActivity.getSupportFragmentManager(), "diskShaders"); }); @@ -120,13 +113,20 @@ public class DiskShaderCacheProgress { } public static void loadProgress(LoadCallbackStage stage, int progress, int max) { + final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); + if (emulationActivity == null) { + return; + } + switch (stage) { case Prepare: prepareDialog(); break; case Decompile: + fragment.onUpdateProgress(emulationActivity.getString(R.string.preparing_shaders), progress, max); + break; case Build: - fragment.onUpdateProgress(stage, progress, max); + fragment.onUpdateProgress(emulationActivity.getString(R.string.building_shaders), progress, max); break; case Complete: // Workaround for when dialog is dismissed when the app is in the background 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 62a58e9d7..f845e9ce8 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 { Setting shadersAccurateMul = rendererSection.getSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL); Setting render3dMode = rendererSection.getSetting(SettingsFile.KEY_RENDER_3D); Setting factor3d = rendererSection.getSetting(SettingsFile.KEY_FACTOR_3D); + Setting useDiskShaderCache = rendererSection.getSetting(SettingsFile.KEY_USE_DISK_SHADER_CACHE); SettingSection layoutSection = mSettings.getSection(Settings.SECTION_LAYOUT); Setting cardboardScreenSize = layoutSection.getSetting(SettingsFile.KEY_CARDBOARD_SCREEN_SIZE); @@ -368,6 +369,7 @@ public final class SettingsFragmentPresenter { 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_USE_ASYNCHRONOUS_GPU_EMULATION, Settings.SECTION_RENDERER, R.string.asynchronous_gpu, R.string.asynchronous_gpu_description, true, useAsynchronousGpuEmulation)); 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)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_USE_DISK_SHADER_CACHE, Settings.SECTION_RENDERER, R.string.use_disk_shader_cache, R.string.use_disk_shader_cache_description, true, useDiskShaderCache)); sl.add(new HeaderSetting(null, null, R.string.stereoscopy, 0)); sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDER_3D, Settings.SECTION_RENDERER, R.string.render3d, 0, R.array.render3dModes, R.array.render3dValues, 0, render3dMode)); 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 bf577d366..5403cd7e4 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 @@ -43,6 +43,7 @@ public final class SettingsFile { public static final String KEY_HW_SHADER = "use_hw_shader"; public static final String KEY_SHADERS_ACCURATE_MUL = "shaders_accurate_mul"; public static final String KEY_USE_SHADER_JIT = "use_shader_jit"; + public static final String KEY_USE_DISK_SHADER_CACHE = "use_disk_shader_cache"; public static final String KEY_USE_VSYNC = "use_vsync_new"; public static final String KEY_RESOLUTION_FACTOR = "resolution_factor"; public static final String KEY_FRAME_LIMIT_ENABLED = "use_frame_limit"; diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index dac2f6bae..5d8f83182 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -100,6 +100,9 @@ Specifies the percentage of empty space to shift the screens horizontally. Positive values move the two eyes closer to the middle, while negative values move them away. Vertical shift Specifies the percentage of empty space to shift the screens vertically. Positive values move the two eyes towards the bottom, while negative values move them towards the top. + Use shader JIT + Use disk shader cache + Reduce stuttering by storing and loading generated shaders to disk. It cannot be used without Enabling Hardware Shader. Premium @@ -119,6 +122,7 @@ Saved settings Saved settings for %1$s Error saving %1$s.ini: %2$s + Loading... Settings @@ -215,4 +219,8 @@ Save/Load Error Fatal Error A fatal error occurred. Check the log for details.\nContinuing emulation may result in crashes and bugs. + + + Preparing shaders + Building shaders