diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index f94f3c724..4d4d02b40 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -1579,6 +1579,10 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_CheckAndroidPackage(const c const char *exe, AndroidFlags *flags); +DOCUMENT("Internal function that attempts to push Vulkan layer to Android application."); +extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_PushLayerToAndroidApp(const char *host, + const char *exe); + DOCUMENT("Internal function that attempts to modify APK contents, adding Vulkan layer."); extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_AddLayerToAndroidPackage(const char *host, const char *exe, diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index 06d89880b..3cbb346ee 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -1395,6 +1395,35 @@ string FindAndroidLayer(const string &abi, const string &layerName) return layer; } +extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_PushLayerToAndroidApp(const char *host, + const char *exe) +{ + Process::ProcessResult result = {}; + string packageName(basename(string(exe))); + + RDCLOG("Attempting to push RenderDoc layer to %s", packageName.c_str()); + + int index = 0; + std::string deviceID; + Android::extractDeviceIDAndIndex(host, index, deviceID); + + // Detect which ABI was installed on the device + string abi = DetermineInstalledABI(deviceID, packageName); + + // Find the layer on host + string layerName("libVkLayer_GLES_RenderDoc.so"); + string layerPath = FindAndroidLayer(abi, layerName); + if(layerPath.empty()) + return false; + + string layerDst = "/data/data/" + packageName + "/lib/"; + + result = adbExecCommand(deviceID, "push " + layerPath + " " + layerDst); + + // Ensure the push succeeded + return SearchForAndroidLayer(deviceID, layerDst, layerName); +} + extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_AddLayerToAndroidPackage(const char *host, const char *exe, float *progress)