fix adreno hooking

This commit is contained in:
Emmanuel Hansen 2023-07-23 13:02:40 +00:00
parent f8c1e745ca
commit 7d7e1ce639
4 changed files with 34 additions and 16 deletions

View File

@ -42,6 +42,9 @@ namespace LibRyujinx
[DllImport("libryujinxjni")] [DllImport("libryujinxjni")]
internal extern static void setRenderingThread(); internal extern static void setRenderingThread();
[DllImport("libryujinxjni")]
internal extern static void debug_break(int code);
[DllImport("libryujinxjni")] [DllImport("libryujinxjni")]
internal extern static void onFrameEnd(double time); internal extern static void onFrameEnd(double time);

View File

@ -3,6 +3,7 @@ using Silk.NET.Core.Contexts;
using Silk.NET.Vulkan; using Silk.NET.Vulkan;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -33,7 +34,7 @@ namespace LibRyujinx
{ {
_loadedLibrary = driver; _loadedLibrary = driver;
if(_loadedLibrary != IntPtr.Zero) if (_loadedLibrary != IntPtr.Zero)
{ {
var instanceGetProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetInstanceProcAddr"); var instanceGetProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetInstanceProcAddr");
var deviceProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetDeviceProcAddr"); var deviceProc = NativeLibrary.GetExport(_loadedLibrary, "vkGetDeviceProcAddr");
@ -43,7 +44,7 @@ namespace LibRyujinx
} }
} }
public Vk GetApi() public unsafe Vk GetApi()
{ {
if (_loadedLibrary == IntPtr.Zero) if (_loadedLibrary == IntPtr.Zero)
@ -57,6 +58,8 @@ namespace LibRyujinx
x => x =>
{ {
var xPtr = Marshal.StringToHGlobalAnsi(x); var xPtr = Marshal.StringToHGlobalAnsi(x);
byte* xp = (byte*)xPtr;
LibRyujinx.debug_break(0);
try try
{ {
nint ptr = default; nint ptr = default;

View File

@ -19,6 +19,7 @@
#include "ryuijnx.h" #include "ryuijnx.h"
#include "pthread.h" #include "pthread.h"
#include <chrono> #include <chrono>
#include <csignal>
jmethodID _updateFrameTime; jmethodID _updateFrameTime;
JNIEnv* _rendererEnv = nullptr; JNIEnv* _rendererEnv = nullptr;
@ -217,4 +218,9 @@ Java_org_ryujinx_android_NativeHelpers_loadDriver(JNIEnv *env, jobject thiz,
delete driverName; delete driverName;
return (jlong)handle; return (jlong)handle;
}
extern "C"
void debug_break(int code){
int r = 0;
} }

View File

@ -88,27 +88,33 @@ class GameHost(context: Context?, val controller: GameController, val mainViewMo
nativeInterop!!.SurfaceHandle = window nativeInterop!!.SurfaceHandle = window
var driverViewModel = VulkanDriverViewModel(mainViewModel.activity); var driverViewModel = VulkanDriverViewModel(mainViewModel.activity);
driverViewModel.getAvailableDrivers() var drivers = driverViewModel.getAvailableDrivers()
var driverHandle = 0L; var driverHandle = 0L;
if(driverViewModel.selected.isNotEmpty()) { if(driverViewModel.selected.isNotEmpty()) {
var privatePath = mainViewModel.activity.filesDir; var metaData = drivers.find { it.driverPath == driverViewModel.selected }
var privateDriverPath = privatePath.absolutePath + "/driver/"
val pD = File(privateDriverPath)
if(pD.exists())
pD.deleteRecursively()
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) pD.mkdirs()
var parent = driver.parentFile
for (file in parent.walkTopDown()){ var driver = File(driverViewModel.selected)
if(file.absolutePath == parent.absolutePath) var parent = driver.parentFile
continue for (file in parent.walkTopDown()){
file.copyTo(File(privateDriverPath + file.name), true) 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( success = _nativeRyujinx.graphicsInitializeRenderer(