diff options
| author | Robin Kertels <robin.kertels@gmail.com> | 2023-06-01 00:05:06 +0200 |
|---|---|---|
| committer | Robin Kertels <robin.kertels@gmail.com> | 2023-06-11 13:52:34 +0200 |
| commit | 23bebc5270bfd5a149aeb8bb5a3a2dd4433bd5e1 (patch) | |
| tree | 45e378d45f19381a1a92a5e71ee38780f78cc687 /Source/Core/Common | |
| parent | 35bb663c2abfba0208931b85d779ed5a0084c7e8 (diff) | |
VideoBackends:Vulkan: Allow loading custom drivers on Android
... using libadrenotools
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/CommonPaths.h | 7 | ||||
| -rw-r--r-- | Source/Core/Common/DynamicLibrary.cpp | 11 | ||||
| -rw-r--r-- | Source/Core/Common/DynamicLibrary.h | 4 | ||||
| -rw-r--r-- | Source/Core/Common/FileUtil.cpp | 30 | ||||
| -rw-r--r-- | Source/Core/Common/FileUtil.h | 6 |
5 files changed, 58 insertions, 0 deletions
diff --git a/Source/Core/Common/CommonPaths.h b/Source/Core/Common/CommonPaths.h index b22033a5cd..44ada6dd19 100644 --- a/Source/Core/Common/CommonPaths.h +++ b/Source/Core/Common/CommonPaths.h @@ -163,3 +163,10 @@ // Subdirs in Config #define GRAPHICSMOD_CONFIG_DIR "GraphicMods" + +// GPU drivers +#define GPU_DRIVERS "GpuDrivers" +#define GPU_DRIVERS_EXTRACTED "Extracted" +#define GPU_DRIVERS_TMP "Tmp" +#define GPU_DRIVERS_HOOK "Hook" +#define GPU_DRIVERS_FILE_REDIRECT "FileRedirect" diff --git a/Source/Core/Common/DynamicLibrary.cpp b/Source/Core/Common/DynamicLibrary.cpp index 039b0a034c..7871198dda 100644 --- a/Source/Core/Common/DynamicLibrary.cpp +++ b/Source/Core/Common/DynamicLibrary.cpp @@ -24,11 +24,22 @@ DynamicLibrary::DynamicLibrary(const char* filename) Open(filename); } +DynamicLibrary::DynamicLibrary(void* handle) +{ + m_handle = handle; +} + DynamicLibrary::~DynamicLibrary() { Close(); } +DynamicLibrary& DynamicLibrary::operator=(void* handle) +{ + m_handle = handle; + return *this; +} + std::string DynamicLibrary::GetUnprefixedFilename(const char* filename) { #if defined(_WIN32) diff --git a/Source/Core/Common/DynamicLibrary.h b/Source/Core/Common/DynamicLibrary.h index edfcde8ff3..29cafbafb2 100644 --- a/Source/Core/Common/DynamicLibrary.h +++ b/Source/Core/Common/DynamicLibrary.h @@ -21,6 +21,8 @@ public: // Automatically loads the specified library. Call IsOpen() to check validity before use. DynamicLibrary(const char* filename); + DynamicLibrary(void* handle); + // Closes the library. ~DynamicLibrary(); @@ -30,6 +32,8 @@ public: DynamicLibrary& operator=(const DynamicLibrary&) = delete; DynamicLibrary& operator=(DynamicLibrary&&) = delete; + DynamicLibrary& operator=(void*); + // Returns the specified library name with the platform-specific suffix added. static std::string GetUnprefixedFilename(const char* filename); diff --git a/Source/Core/Common/FileUtil.cpp b/Source/Core/Common/FileUtil.cpp index 9a494ab2e0..f5842c14f9 100644 --- a/Source/Core/Common/FileUtil.cpp +++ b/Source/Core/Common/FileUtil.cpp @@ -66,6 +66,8 @@ namespace File { #ifdef ANDROID static std::string s_android_sys_directory; +static std::string s_android_driver_directory; +static std::string s_android_lib_directory; #endif #ifdef __APPLE__ @@ -796,6 +798,34 @@ void SetSysDirectory(const std::string& path) s_android_sys_directory); s_android_sys_directory = path; } + +void SetGpuDriverDirectories(const std::string& path, const std::string& lib_path) +{ + INFO_LOG_FMT(COMMON, "Setting Driver directory to {} and library path to {}", path, lib_path); + ASSERT_MSG(COMMON, s_android_driver_directory.empty(), "Driver directory already set to {}", + s_android_driver_directory); + ASSERT_MSG(COMMON, s_android_lib_directory.empty(), "Library directory already set to {}", + s_android_lib_directory); + s_android_driver_directory = path; + s_android_lib_directory = lib_path; +} + +const std::string GetGpuDriverDirectory(unsigned int dir_index) +{ + switch (dir_index) + { + case D_GPU_DRIVERS_EXTRACTED: + return s_android_driver_directory + DIR_SEP GPU_DRIVERS_EXTRACTED DIR_SEP; + case D_GPU_DRIVERS_TMP: + return s_android_driver_directory + DIR_SEP GPU_DRIVERS_TMP DIR_SEP; + case D_GPU_DRIVERS_HOOKS: + return s_android_lib_directory; + case D_GPU_DRIVERS_FILE_REDIRECT: + return s_android_driver_directory + DIR_SEP GPU_DRIVERS_FILE_REDIRECT DIR_SEP; + } + return ""; +} + #endif static std::string s_user_paths[NUM_PATH_INDICES]; diff --git a/Source/Core/Common/FileUtil.h b/Source/Core/Common/FileUtil.h index 2a2e112039..8d5f312d65 100644 --- a/Source/Core/Common/FileUtil.h +++ b/Source/Core/Common/FileUtil.h @@ -67,6 +67,10 @@ enum D_GBAUSER_IDX, D_GBASAVES_IDX, D_WIISDCARDSYNCFOLDER_IDX, + D_GPU_DRIVERS_EXTRACTED, + D_GPU_DRIVERS_TMP, + D_GPU_DRIVERS_HOOKS, + D_GPU_DRIVERS_FILE_REDIRECT, FIRST_FILE_USER_PATH_IDX, F_DOLPHINCONFIG_IDX = FIRST_FILE_USER_PATH_IDX, F_GCPADCONFIG_IDX, @@ -228,6 +232,8 @@ const std::string& GetSysDirectory(); #ifdef ANDROID void SetSysDirectory(const std::string& path); +void SetGpuDriverDirectories(const std::string& path, const std::string& lib_path); +const std::string GetGpuDriverDirectory(unsigned int dir_index); #endif #ifdef __APPLE__ |
