From 840338140dd40fc2da99c9198c284eb6c53b435c Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 6 Apr 2016 20:18:36 +0200 Subject: [PATCH] Rewrap enumerated physical devices every time. Refs #234 --- renderdoc/driver/vulkan/vk_resources.h | 4 ++++ renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp | 1 + 2 files changed, 5 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index f890c211e..99bbbe3f7 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -162,6 +162,10 @@ struct WrappedVkDispRes : public WrappedVkRes WrappedVkDispRes(VkCommandBuffer obj, ResourceId objId) : table(0), real((void *)obj), id(objId), record(NULL), core(NULL) { loaderTable = *(uintptr_t*)obj; } + template + void RewrapObject(realtype obj) + { real = (void *)obj; loaderTable = *(uintptr_t*)obj; } + // preserve dispatch table pointer in dispatchable objects uintptr_t loaderTable, table; RealVkRes real; diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 546d83661..ad8ad44cf 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -376,6 +376,7 @@ VkResult WrappedVulkan::vkEnumeratePhysicalDevices( // return the wrapped object to the user and do nothing else if(m_PhysicalDevices[i] != VK_NULL_HANDLE) { + GetWrapped(m_PhysicalDevices[i])->RewrapObject(devices[i]); devices[i] = m_PhysicalDevices[i]; } else