From d57b7fe0636dcc4d020b92ffeb6419b7cffe20d1 Mon Sep 17 00:00:00 2001
From: Emmanuel Hansen <emmausssss@gmail.com>
Date: Sat, 22 Jul 2023 17:53:29 +0000
Subject: [PATCH] fix adreno hooking

---
 .../app/src/main/AndroidManifest.xml          |  1 +
 .../app/src/main/cpp/ryujinx.cpp              | 12 +--------
 .../main/java/org/ryujinx/android/GameHost.kt | 15 +++++++++--
 .../java/org/ryujinx/android/NativeHelpers.kt |  2 +-
 .../org/ryujinx/android/views/SettingViews.kt | 25 +++++++++++--------
 5 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/RyujinxAndroid/app/src/main/AndroidManifest.xml b/src/RyujinxAndroid/app/src/main/AndroidManifest.xml
index b33362363..5dc772de1 100644
--- a/src/RyujinxAndroid/app/src/main/AndroidManifest.xml
+++ b/src/RyujinxAndroid/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
         android:largeHeap="true"
         android:appCategory="game"
         android:theme="@style/Theme.RyujinxAndroid"
+        android:extractNativeLibs="true"
         tools:targetApi="31">
         <activity
             android:name=".MainActivity"
diff --git a/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp b/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp
index 33ca59517..c1607a625 100644
--- a/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp
+++ b/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp
@@ -194,20 +194,12 @@ void onFrameEnd(double time) {
 extern "C"
 JNIEXPORT jlong JNICALL
 Java_org_ryujinx_android_NativeHelpers_loadDriver(JNIEnv *env, jobject thiz,
-                                                  jstring driver_path,
                                                   jstring native_lib_path,
                                                   jstring private_apps_path,
-                                                  jstring public_apps_path,
                                                   jstring driver_name) {
-    auto driverPath = getStringPointer(env, driver_path);
     auto libPath = getStringPointer(env, native_lib_path);
     auto privateAppsPath = getStringPointer(env, private_apps_path);
     auto driverName = getStringPointer(env, driver_name);
-    auto publicPath = getStringPointer(env, public_apps_path);
-
-    std::string redirectPath = publicPath;
-
-    redirectPath += "gpu/vk_file_redirect/";
 
     auto handle = adrenotools_open_libvulkan(
             RTLD_NOW,
@@ -216,15 +208,13 @@ Java_org_ryujinx_android_NativeHelpers_loadDriver(JNIEnv *env, jobject thiz,
             libPath,
             privateAppsPath,
             driverName,
-            nullptr,//redirectPath.c_str(),
+            nullptr,
             nullptr
             );
 
-    delete driverPath;
     delete libPath;
     delete privateAppsPath;
     delete driverName;
-    delete publicPath;
 
     return (jlong)handle;
 }
\ No newline at end of file
diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt
index ba481aa89..b5559d163 100644
--- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt
+++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt
@@ -95,9 +95,20 @@ class GameHost(context: Context?, val controller: GameController, val mainViewMo
         if(driverViewModel.selected.isNotEmpty()) {
             var privatePath = mainViewModel.activity.filesDir;
             var privateDriverPath = privatePath.absolutePath + "/driver/"
+            val pD = File(privateDriverPath)
+            if(pD.exists())
+                pD.deleteRecursively()
+
+            pD.mkdirs()
+
             var driver = File(driverViewModel.selected)
-            driver.copyTo(File(privateDriverPath + driver.name), true)
-            driverHandle = NativeHelpers().loadDriver(driverViewModel.selected, mainViewModel.activity.applicationInfo.nativeLibraryDir!!, privateDriverPath, mainViewModel.activity.getExternalFilesDir(null)!!.absolutePath, driver.name)
+            var parent = driver.parentFile
+            for (file in parent.walkTopDown()){
+                if(file.absolutePath == parent.absolutePath)
+                    continue
+                file.copyTo(File(privateDriverPath + file.name), true)
+            }
+            driverHandle = NativeHelpers().loadDriver(mainViewModel.activity.applicationInfo.nativeLibraryDir!! + "/", privateDriverPath, driver.name)
         }
 
         success = _nativeRyujinx.graphicsInitializeRenderer(
diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/NativeHelpers.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/NativeHelpers.kt
index 0dd4e41fc..4b52c2862 100644
--- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/NativeHelpers.kt
+++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/NativeHelpers.kt
@@ -16,5 +16,5 @@ class NativeHelpers {
     external fun attachCurrentThread() : Unit
     external fun detachCurrentThread() : Unit
 
-    external fun loadDriver(driverPath:String, nativeLibPath:String, privateAppsPath:String, publicAppsPath:String, driverName:String) : Long
+    external fun loadDriver(nativeLibPath:String, privateAppsPath:String, driverName:String) : Long
 }
\ No newline at end of file
diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/SettingViews.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/SettingViews.kt
index 3ba7a3271..8316361f9 100644
--- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/SettingViews.kt
+++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/SettingViews.kt
@@ -380,18 +380,23 @@ class SettingViews {
                                                                         driverViewModel.selected =
                                                                             driver.driverPath
                                                                     })
-                                                                Column {
+                                                                Column(modifier = Modifier.clickable {
+                                                                    selectedDriver.value =
+                                                                        ind
+                                                                    isChanged.value =
+                                                                        true
+                                                                    driverViewModel.selected =
+                                                                        driver.driverPath
+                                                                }) {
                                                                     Text(text = driver.libraryName,
                                                                         modifier = Modifier
-                                                                            .fillMaxWidth()
-                                                                            .clickable {
-                                                                                selectedDriver.value =
-                                                                                    ind
-                                                                                isChanged.value =
-                                                                                    true
-                                                                                driverViewModel.selected =
-                                                                                    driver.driverPath
-                                                                            })
+                                                                            .fillMaxWidth())
+                                                                    Text(text = driver.driverVersion,
+                                                                        modifier = Modifier
+                                                                            .fillMaxWidth())
+                                                                    Text(text = driver.description,
+                                                                        modifier = Modifier
+                                                                            .fillMaxWidth())
                                                                 }
                                                             }