mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-09 00:12:45 +01:00
android: Show system driver information
This commit is contained in:
parent
ce2eb6e8ee
commit
2d8f80b65e
4 changed files with 46 additions and 2 deletions
|
@ -66,10 +66,13 @@ class DriverViewModel : ViewModel() {
|
||||||
|
|
||||||
fun updateDriverList() {
|
fun updateDriverList() {
|
||||||
val selectedDriver = GpuDriverHelper.customDriverSettingData
|
val selectedDriver = GpuDriverHelper.customDriverSettingData
|
||||||
|
val systemDriverData = GpuDriverHelper.getSystemDriverInfo()
|
||||||
val newDriverList = mutableListOf(
|
val newDriverList = mutableListOf(
|
||||||
Driver(
|
Driver(
|
||||||
selectedDriver == GpuDriverMetadata(),
|
selectedDriver == GpuDriverMetadata(),
|
||||||
YuzuApplication.appContext.getString(R.string.system_gpu_driver)
|
YuzuApplication.appContext.getString(R.string.system_gpu_driver),
|
||||||
|
systemDriverData?.get(0) ?: "",
|
||||||
|
systemDriverData?.get(1) ?: ""
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
driverData.forEach {
|
driverData.forEach {
|
||||||
|
|
|
@ -3,8 +3,10 @@
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.utils
|
package org.yuzu.yuzu_emu.utils
|
||||||
|
|
||||||
|
import android.graphics.SurfaceTexture
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.view.Surface
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import org.yuzu.yuzu_emu.NativeLibrary
|
import org.yuzu.yuzu_emu.NativeLibrary
|
||||||
|
@ -195,6 +197,11 @@ object GpuDriverHelper {
|
||||||
|
|
||||||
external fun supportsCustomDriverLoading(): Boolean
|
external fun supportsCustomDriverLoading(): Boolean
|
||||||
|
|
||||||
|
external fun getSystemDriverInfo(
|
||||||
|
surface: Surface = Surface(SurfaceTexture(true)),
|
||||||
|
hookLibPath: String = GpuDriverHelper.hookLibPath!!
|
||||||
|
): Array<String>?
|
||||||
|
|
||||||
// Parse the custom driver metadata to retrieve the name.
|
// Parse the custom driver metadata to retrieve the name.
|
||||||
val installedCustomDriverData: GpuDriverMetadata
|
val installedCustomDriverData: GpuDriverMetadata
|
||||||
get() = GpuDriverMetadata(File(driverInstallationPath + META_JSON_FILENAME))
|
get() = GpuDriverMetadata(File(driverInstallationPath + META_JSON_FILENAME))
|
||||||
|
|
|
@ -22,7 +22,7 @@ add_library(yuzu-android SHARED
|
||||||
|
|
||||||
set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR})
|
set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR})
|
||||||
|
|
||||||
target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common)
|
target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common Vulkan::Headers)
|
||||||
target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log)
|
target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log)
|
||||||
if (ARCHITECTURE_arm64)
|
if (ARCHITECTURE_arm64)
|
||||||
target_link_libraries(yuzu-android PRIVATE adrenotools)
|
target_link_libraries(yuzu-android PRIVATE adrenotools)
|
||||||
|
|
|
@ -60,6 +60,9 @@
|
||||||
#include "jni/id_cache.h"
|
#include "jni/id_cache.h"
|
||||||
#include "jni/native.h"
|
#include "jni/native.h"
|
||||||
#include "video_core/renderer_base.h"
|
#include "video_core/renderer_base.h"
|
||||||
|
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
||||||
|
#include "video_core/vulkan_common/vulkan_instance.h"
|
||||||
|
#include "video_core/vulkan_common/vulkan_surface.h"
|
||||||
|
|
||||||
#define jconst [[maybe_unused]] const auto
|
#define jconst [[maybe_unused]] const auto
|
||||||
#define jauto [[maybe_unused]] auto
|
#define jauto [[maybe_unused]] auto
|
||||||
|
@ -521,6 +524,37 @@ jboolean JNICALL Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_supportsCustomDri
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo(
|
||||||
|
JNIEnv* env, jobject j_obj, jobject j_surf, jstring j_hook_lib_dir) {
|
||||||
|
const char* file_redirect_dir_{};
|
||||||
|
int featureFlags{};
|
||||||
|
std::string hook_lib_dir = GetJString(env, j_hook_lib_dir);
|
||||||
|
auto handle = adrenotools_open_libvulkan(RTLD_NOW, featureFlags, nullptr, hook_lib_dir.c_str(),
|
||||||
|
nullptr, nullptr, file_redirect_dir_, nullptr);
|
||||||
|
auto driver_library = std::make_shared<Common::DynamicLibrary>(handle);
|
||||||
|
InputCommon::InputSubsystem input_subsystem;
|
||||||
|
auto m_window = std::make_unique<EmuWindow_Android>(
|
||||||
|
&input_subsystem, ANativeWindow_fromSurface(env, j_surf), driver_library);
|
||||||
|
|
||||||
|
Vulkan::vk::InstanceDispatch dld;
|
||||||
|
Vulkan::vk::Instance vk_instance = Vulkan::CreateInstance(
|
||||||
|
*driver_library, dld, VK_API_VERSION_1_1, Core::Frontend::WindowSystemType::Android);
|
||||||
|
|
||||||
|
auto surface = Vulkan::CreateSurface(vk_instance, m_window->GetWindowInfo());
|
||||||
|
|
||||||
|
auto device = Vulkan::CreateDevice(vk_instance, dld, *surface);
|
||||||
|
|
||||||
|
auto driver_version = device.GetDriverVersion();
|
||||||
|
auto version_string =
|
||||||
|
fmt::format("{}.{}.{}", VK_API_VERSION_MAJOR(driver_version),
|
||||||
|
VK_API_VERSION_MINOR(driver_version), VK_API_VERSION_PATCH(driver_version));
|
||||||
|
|
||||||
|
jobjectArray j_driver_info =
|
||||||
|
env->NewObjectArray(2, IDCache::GetStringClass(), ToJString(env, version_string));
|
||||||
|
env->SetObjectArrayElement(j_driver_info, 1, ToJString(env, device.GetDriverName()));
|
||||||
|
return j_driver_info;
|
||||||
|
}
|
||||||
|
|
||||||
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadKeys(JNIEnv* env, jclass clazz) {
|
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadKeys(JNIEnv* env, jclass clazz) {
|
||||||
Core::Crypto::KeyManager::Instance().ReloadKeys();
|
Core::Crypto::KeyManager::Instance().ReloadKeys();
|
||||||
return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().AreKeysLoaded());
|
return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().AreKeysLoaded());
|
||||||
|
|
Loading…
Reference in a new issue