From 6d24e2b100e332ddb1b3d8479f9f09c5408e1082 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Fri, 11 Mar 2022 17:24:40 +0000 Subject: [PATCH] Change Metal hooking to use RegisterFunctionHook Instead of direct function pointer capture at compile time --- renderdoc/driver/metal/metal_hook_bridge.mm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/metal/metal_hook_bridge.mm b/renderdoc/driver/metal/metal_hook_bridge.mm index 900b3a5cd..dc133cd92 100644 --- a/renderdoc/driver/metal/metal_hook_bridge.mm +++ b/renderdoc/driver/metal/metal_hook_bridge.mm @@ -81,9 +81,15 @@ void MetalHook::RegisterGlobalNonHookedMetalFunctions() #undef METAL_FETCH } +extern void AppleRegisterRealSymbol(const char *functionName, void *address); + void MetalHook::RegisterGlobalHookedMetalFunctions() { -#define METAL_FUNC(func) METAL.func = &::func; +#define METAL_FUNC(func) \ + AppleRegisterRealSymbol(STRINGIZE(func), (void *)&::func); \ + LibraryHooks::RegisterFunctionHook("Metal", FunctionHook(STRINGIZE(func), (void **)&METAL.func, \ + (void *)&METAL_EXPORT_NAME(func))); + ForEachMetalSupported(); #undef METAL_FUNC }