From 7d7e1ce6395a847f7bf814d244b2feade3397c09 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Sun, 23 Jul 2023 13:02:40 +0000 Subject: [PATCH] fix adreno hooking --- src/LibRyujinx/Android/JniExportedMethods.cs | 3 ++ src/LibRyujinx/VulkanLoader.cs | 7 ++-- .../app/src/main/cpp/ryujinx.cpp | 6 ++++ .../main/java/org/ryujinx/android/GameHost.kt | 34 +++++++++++-------- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/LibRyujinx/Android/JniExportedMethods.cs b/src/LibRyujinx/Android/JniExportedMethods.cs index f9b054ca6..7aa30cd8c 100644 --- a/src/LibRyujinx/Android/JniExportedMethods.cs +++ b/src/LibRyujinx/Android/JniExportedMethods.cs @@ -42,6 +42,9 @@ namespace LibRyujinx [DllImport("libryujinxjni")] internal extern static void setRenderingThread(); + [DllImport("libryujinxjni")] + internal extern static void debug_break(int code); + [DllImport("libryujinxjni")] internal extern static void onFrameEnd(double time); diff --git a/src/LibRyujinx/VulkanLoader.cs b/src/LibRyujinx/VulkanLoader.cs index e9a3d7c1b..5b832b3b4 100644 --- a/src/LibRyujinx/VulkanLoader.cs +++ b/src/LibRyujinx/VulkanLoader.cs @@ -3,6 +3,7 @@ using Silk.NET.Core.Contexts; using Silk.NET.Vulkan; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -33,7 +34,7 @@ namespace LibRyujinx { _loadedLibrary = driver; - if(_loadedLibrary != IntPtr.Zero) + if (_loadedLibrary != IntPtr.Zero) { var instanceGetProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetInstanceProcAddr"); var deviceProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetDeviceProcAddr"); @@ -43,7 +44,7 @@ namespace LibRyujinx } } - public Vk GetApi() + public unsafe Vk GetApi() { if (_loadedLibrary == IntPtr.Zero) @@ -57,6 +58,8 @@ namespace LibRyujinx x => { var xPtr = Marshal.StringToHGlobalAnsi(x); + byte* xp = (byte*)xPtr; + LibRyujinx.debug_break(0); try { nint ptr = default; diff --git a/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp b/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp index c1607a625..f706d0fcd 100644 --- a/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp +++ b/src/RyujinxAndroid/app/src/main/cpp/ryujinx.cpp @@ -19,6 +19,7 @@ #include "ryuijnx.h" #include "pthread.h" #include +#include jmethodID _updateFrameTime; JNIEnv* _rendererEnv = nullptr; @@ -217,4 +218,9 @@ Java_org_ryujinx_android_NativeHelpers_loadDriver(JNIEnv *env, jobject thiz, delete driverName; return (jlong)handle; +} + +extern "C" +void debug_break(int code){ + int r = 0; } \ 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 b5559d163..a66096dbc 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 @@ -88,27 +88,33 @@ class GameHost(context: Context?, val controller: GameController, val mainViewMo nativeInterop!!.SurfaceHandle = window var driverViewModel = VulkanDriverViewModel(mainViewModel.activity); - driverViewModel.getAvailableDrivers() + var drivers = driverViewModel.getAvailableDrivers() var driverHandle = 0L; if(driverViewModel.selected.isNotEmpty()) { - var privatePath = mainViewModel.activity.filesDir; - var privateDriverPath = privatePath.absolutePath + "/driver/" - val pD = File(privateDriverPath) - if(pD.exists()) - pD.deleteRecursively() + var metaData = drivers.find { it.driverPath == driverViewModel.selected } - pD.mkdirs() + metaData?.apply { + var privatePath = mainViewModel.activity.filesDir; + var privateDriverPath = privatePath.canonicalPath + "/driver/" + val pD = File(privateDriverPath) + if(pD.exists()) + pD.deleteRecursively() - var driver = File(driverViewModel.selected) - var parent = driver.parentFile - for (file in parent.walkTopDown()){ - if(file.absolutePath == parent.absolutePath) - continue - file.copyTo(File(privateDriverPath + file.name), true) + pD.mkdirs() + + var driver = File(driverViewModel.selected) + 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, this.libraryName) } - driverHandle = NativeHelpers().loadDriver(mainViewModel.activity.applicationInfo.nativeLibraryDir!! + "/", privateDriverPath, driver.name) + } success = _nativeRyujinx.graphicsInitializeRenderer(