diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 75c94c838..7ea179e64 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -257,9 +257,15 @@ void WrappedVulkan::Initialise(VkInitParams ¶ms) VkResult ret = GetInstanceDispatchTable(NULL)->CreateInstance(&instinfo, &inst); + InitInstanceReplayTables(inst); + GetResourceManager()->WrapResource(inst, inst); GetResourceManager()->AddLiveResource(params.InstanceID, inst); + // VKTODOHIGH this must be deallocated + VkDbgMsgCallback dummy; + ObjDisp(inst)->DbgCreateMsgCallback(Unwrap(inst), 0x1e, (PFN_vkDbgMsgCallback)&DebugCallbackStatic, this, &dummy); + SAFE_DELETE_ARRAY(layerscstr); SAFE_DELETE_ARRAY(extscstr); } diff --git a/renderdoc/driver/vulkan/vk_dispatchtables.cpp b/renderdoc/driver/vulkan/vk_dispatchtables.cpp index 6377d22fe..ba46f2916 100644 --- a/renderdoc/driver/vulkan/vk_dispatchtables.cpp +++ b/renderdoc/driver/vulkan/vk_dispatchtables.cpp @@ -65,10 +65,24 @@ void InitReplayTables() { VkLayerInstanceDispatchTable &table = replayInstanceTable; + HookInit(GetInstanceProcAddr); HookInitVulkanInstance(); } } +void InitInstanceReplayTables(VkInstance instance) +{ + VkLayerInstanceDispatchTable *table = GetInstanceDispatchTable(NULL); + RDCASSERT(table); + +#define InstanceGPA(func) table->func = (CONCAT(PFN_vk, func))table->GetInstanceProcAddr(instance, STRINGIZE(CONCAT(vk, func))); + + InstanceGPA(DbgCreateMsgCallback) + InstanceGPA(DbgDestroyMsgCallback) + +#undef InstanceGPA +} + void InitDeviceReplayTables(VkDevice device) { VkLayerDispatchTable *table = GetDeviceDispatchTable(NULL); diff --git a/renderdoc/driver/vulkan/vk_dispatchtables.h b/renderdoc/driver/vulkan/vk_dispatchtables.h index 89267da81..25eed1bfa 100644 --- a/renderdoc/driver/vulkan/vk_dispatchtables.h +++ b/renderdoc/driver/vulkan/vk_dispatchtables.h @@ -35,6 +35,7 @@ #include void InitReplayTables(); +void InitInstanceReplayTables(VkInstance instance); void InitDeviceReplayTables(VkDevice device); VkLayerDispatchTable *GetDeviceDispatchTable(void *device);