summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt5
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt7
-rw-r--r--src/android/app/src/main/jni/CMakeLists.txt2
-rw-r--r--src/android/app/src/main/jni/native.cpp34
4 files changed, 46 insertions, 2 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt
index 5ed754c96..a49c887a1 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt
@@ -66,10 +66,13 @@ class DriverViewModel : ViewModel() {
66 66
67 fun updateDriverList() { 67 fun updateDriverList() {
68 val selectedDriver = GpuDriverHelper.customDriverSettingData 68 val selectedDriver = GpuDriverHelper.customDriverSettingData
69 val systemDriverData = GpuDriverHelper.getSystemDriverInfo()
69 val newDriverList = mutableListOf( 70 val newDriverList = mutableListOf(
70 Driver( 71 Driver(
71 selectedDriver == GpuDriverMetadata(), 72 selectedDriver == GpuDriverMetadata(),
72 YuzuApplication.appContext.getString(R.string.system_gpu_driver) 73 YuzuApplication.appContext.getString(R.string.system_gpu_driver),
74 systemDriverData?.get(0) ?: "",
75 systemDriverData?.get(1) ?: ""
73 ) 76 )
74 ) 77 )
75 driverData.forEach { 78 driverData.forEach {
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt
index 81212cbee..a72dea8f1 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt
@@ -3,8 +3,10 @@
3 3
4package org.yuzu.yuzu_emu.utils 4package org.yuzu.yuzu_emu.utils
5 5
6import android.graphics.SurfaceTexture
6import android.net.Uri 7import android.net.Uri
7import android.os.Build 8import android.os.Build
9import android.view.Surface
8import java.io.File 10import java.io.File
9import java.io.IOException 11import java.io.IOException
10import org.yuzu.yuzu_emu.NativeLibrary 12import org.yuzu.yuzu_emu.NativeLibrary
@@ -195,6 +197,11 @@ object GpuDriverHelper {
195 197
196 external fun supportsCustomDriverLoading(): Boolean 198 external fun supportsCustomDriverLoading(): Boolean
197 199
200 external fun getSystemDriverInfo(
201 surface: Surface = Surface(SurfaceTexture(true)),
202 hookLibPath: String = GpuDriverHelper.hookLibPath!!
203 ): Array<String>?
204
198 // Parse the custom driver metadata to retrieve the name. 205 // Parse the custom driver metadata to retrieve the name.
199 val installedCustomDriverData: GpuDriverMetadata 206 val installedCustomDriverData: GpuDriverMetadata
200 get() = GpuDriverMetadata(File(driverInstallationPath + META_JSON_FILENAME)) 207 get() = GpuDriverMetadata(File(driverInstallationPath + META_JSON_FILENAME))
diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt
index 2acc93da8..abc6055ab 100644
--- a/src/android/app/src/main/jni/CMakeLists.txt
+++ b/src/android/app/src/main/jni/CMakeLists.txt
@@ -22,7 +22,7 @@ add_library(yuzu-android SHARED
22 22
23set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR}) 23set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR})
24 24
25target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common) 25target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common Vulkan::Headers)
26target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log) 26target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log)
27if (ARCHITECTURE_arm64) 27if (ARCHITECTURE_arm64)
28 target_link_libraries(yuzu-android PRIVATE adrenotools) 28 target_link_libraries(yuzu-android PRIVATE adrenotools)
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index 958a77ac7..64627db88 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -60,6 +60,9 @@
60#include "jni/id_cache.h" 60#include "jni/id_cache.h"
61#include "jni/native.h" 61#include "jni/native.h"
62#include "video_core/renderer_base.h" 62#include "video_core/renderer_base.h"
63#include "video_core/renderer_vulkan/renderer_vulkan.h"
64#include "video_core/vulkan_common/vulkan_instance.h"
65#include "video_core/vulkan_common/vulkan_surface.h"
63 66
64#define jconst [[maybe_unused]] const auto 67#define jconst [[maybe_unused]] const auto
65#define jauto [[maybe_unused]] auto 68#define jauto [[maybe_unused]] auto
@@ -541,6 +544,37 @@ jboolean JNICALL Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_supportsCustomDri
541#endif 544#endif
542} 545}
543 546
547jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo(
548 JNIEnv* env, jobject j_obj, jobject j_surf, jstring j_hook_lib_dir) {
549 const char* file_redirect_dir_{};
550 int featureFlags{};
551 std::string hook_lib_dir = GetJString(env, j_hook_lib_dir);
552 auto handle = adrenotools_open_libvulkan(RTLD_NOW, featureFlags, nullptr, hook_lib_dir.c_str(),
553 nullptr, nullptr, file_redirect_dir_, nullptr);
554 auto driver_library = std::make_shared<Common::DynamicLibrary>(handle);
555 InputCommon::InputSubsystem input_subsystem;
556 auto m_window = std::make_unique<EmuWindow_Android>(
557 &input_subsystem, ANativeWindow_fromSurface(env, j_surf), driver_library);
558
559 Vulkan::vk::InstanceDispatch dld;
560 Vulkan::vk::Instance vk_instance = Vulkan::CreateInstance(
561 *driver_library, dld, VK_API_VERSION_1_1, Core::Frontend::WindowSystemType::Android);
562
563 auto surface = Vulkan::CreateSurface(vk_instance, m_window->GetWindowInfo());
564
565 auto device = Vulkan::CreateDevice(vk_instance, dld, *surface);
566
567 auto driver_version = device.GetDriverVersion();
568 auto version_string =
569 fmt::format("{}.{}.{}", VK_API_VERSION_MAJOR(driver_version),
570 VK_API_VERSION_MINOR(driver_version), VK_API_VERSION_PATCH(driver_version));
571
572 jobjectArray j_driver_info =
573 env->NewObjectArray(2, IDCache::GetStringClass(), ToJString(env, version_string));
574 env->SetObjectArrayElement(j_driver_info, 1, ToJString(env, device.GetDriverName()));
575 return j_driver_info;
576}
577
544jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadKeys(JNIEnv* env, jclass clazz) { 578jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadKeys(JNIEnv* env, jclass clazz) {
545 Core::Crypto::KeyManager::Instance().ReloadKeys(); 579 Core::Crypto::KeyManager::Instance().ReloadKeys();
546 return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().AreKeysLoaded()); 580 return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().AreKeysLoaded());