diff options
Diffstat (limited to 'src/android/app/src/main/jni')
-rw-r--r-- | src/android/app/src/main/jni/config.cpp | 4 | ||||
-rw-r--r-- | src/android/app/src/main/jni/id_cache.cpp | 27 | ||||
-rw-r--r-- | src/android/app/src/main/jni/id_cache.h | 5 | ||||
-rw-r--r-- | src/android/app/src/main/jni/native.cpp | 18 |
4 files changed, 50 insertions, 4 deletions
diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index d882688f1..0e86dea9e 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -226,10 +226,6 @@ void Config::ReadValues() { ReadSetting("Renderer", Settings::values.bg_green); ReadSetting("Renderer", Settings::values.bg_blue); - // Disable shader cache by default on Android - Settings::values.use_disk_shader_cache = - config->GetBoolean("Renderer", "use_disk_shader_cache", false); - // Enable force_max_clock by default on Android Settings::values.renderer_force_max_clock = config->GetBoolean("Renderer", "force_max_clock", true); diff --git a/src/android/app/src/main/jni/id_cache.cpp b/src/android/app/src/main/jni/id_cache.cpp index 6291c8652..7edadb94a 100644 --- a/src/android/app/src/main/jni/id_cache.cpp +++ b/src/android/app/src/main/jni/id_cache.cpp @@ -3,13 +3,18 @@ #include <jni.h> +#include "common/assert.h" #include "common/fs/fs_android.h" #include "jni/applets/software_keyboard.h" #include "jni/id_cache.h" +#include "video_core/rasterizer_interface.h" static JavaVM* s_java_vm; static jclass s_native_library_class; +static jclass s_disk_cache_progress_class; +static jclass s_load_callback_stage_class; static jmethodID s_exit_emulation_activity; +static jmethodID s_disk_cache_load_progress; static constexpr jint JNI_VERSION = JNI_VERSION_1_6; @@ -38,10 +43,22 @@ jclass GetNativeLibraryClass() { return s_native_library_class; } +jclass GetDiskCacheProgressClass() { + return s_disk_cache_progress_class; +} + +jclass GetDiskCacheLoadCallbackStageClass() { + return s_load_callback_stage_class; +} + jmethodID GetExitEmulationActivity() { return s_exit_emulation_activity; } +jmethodID GetDiskCacheLoadProgress() { + return s_disk_cache_load_progress; +} + } // namespace IDCache #ifdef __cplusplus @@ -58,8 +75,16 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) { // Initialize Java classes const jclass native_library_class = env->FindClass("org/yuzu/yuzu_emu/NativeLibrary"); s_native_library_class = reinterpret_cast<jclass>(env->NewGlobalRef(native_library_class)); + s_disk_cache_progress_class = reinterpret_cast<jclass>(env->NewGlobalRef( + env->FindClass("org/yuzu/yuzu_emu/disk_shader_cache/DiskShaderCacheProgress"))); + s_load_callback_stage_class = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass( + "org/yuzu/yuzu_emu/disk_shader_cache/DiskShaderCacheProgress$LoadCallbackStage"))); + + // Initialize methods s_exit_emulation_activity = env->GetStaticMethodID(s_native_library_class, "exitEmulationActivity", "(I)V"); + s_disk_cache_load_progress = + env->GetStaticMethodID(s_disk_cache_progress_class, "loadProgress", "(III)V"); // Initialize Android Storage Common::FS::Android::RegisterCallbacks(env, s_native_library_class); @@ -79,6 +104,8 @@ void JNI_OnUnload(JavaVM* vm, void* reserved) { // UnInitialize Android Storage Common::FS::Android::UnRegisterCallbacks(); env->DeleteGlobalRef(s_native_library_class); + env->DeleteGlobalRef(s_disk_cache_progress_class); + env->DeleteGlobalRef(s_load_callback_stage_class); // UnInitialze applets SoftwareKeyboard::CleanupJNI(env); diff --git a/src/android/app/src/main/jni/id_cache.h b/src/android/app/src/main/jni/id_cache.h index 2fe07169d..9337cd254 100644 --- a/src/android/app/src/main/jni/id_cache.h +++ b/src/android/app/src/main/jni/id_cache.h @@ -2,10 +2,15 @@ #include <jni.h> +#include "video_core/rasterizer_interface.h" + namespace IDCache { JNIEnv* GetEnvForThread(); jclass GetNativeLibraryClass(); +jclass GetDiskCacheProgressClass(); +jclass GetDiskCacheLoadCallbackStageClass(); jmethodID GetExitEmulationActivity(); +jmethodID GetDiskCacheLoadProgress(); } // namespace IDCache diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 55736bce2..b10c55a45 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -51,6 +51,7 @@ #include "jni/emu_window/emu_window.h" #include "jni/id_cache.h" #include "video_core/rasterizer_interface.h" +#include "video_core/renderer_base.h" namespace { @@ -229,6 +230,15 @@ public: m_is_running = true; } + // Load the disk shader cache. + if (Settings::values.use_disk_shader_cache.GetValue()) { + LoadDiskCacheProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); + m_system.Renderer().ReadRasterizer()->LoadDiskResources( + m_system.GetApplicationProcessProgramID(), std::stop_token{}, + LoadDiskCacheProgress); + LoadDiskCacheProgress(VideoCore::LoadCallbackStage::Complete, 0, 0); + } + void(m_system.Run()); if (m_system.DebuggerEnabled()) { @@ -296,6 +306,14 @@ private: } private: + static void LoadDiskCacheProgress(VideoCore::LoadCallbackStage stage, int progress, int max) { + JNIEnv* env = IDCache::GetEnvForThread(); + env->CallStaticVoidMethod(IDCache::GetDiskCacheProgressClass(), + IDCache::GetDiskCacheLoadProgress(), static_cast<jint>(stage), + static_cast<jint>(progress), static_cast<jint>(max)); + } + +private: static EmulationSession s_instance; // Frontend management |