From c56beb77c8fbe47a77e20d921038b8311ef69994 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Fri, 1 Jul 2022 14:52:44 +0100 Subject: [PATCH] Added DeallocateObjCBridge(WrappedMTL *) This replaces WrappedMTLObject::Dealloc() which was not implemented or hooked up (it was a TODO). Deleted WrappedMTLObject::Dealloc() DeallocateObjCBridge calls resource manager ReleaseWrappedResource(). --- renderdoc/driver/metal/metal_blit_command_encoder_bridge.mm | 2 +- renderdoc/driver/metal/metal_buffer_bridge.mm | 2 +- renderdoc/driver/metal/metal_command_buffer_bridge.mm | 2 +- renderdoc/driver/metal/metal_command_queue_bridge.mm | 2 +- renderdoc/driver/metal/metal_device_bridge.mm | 2 +- renderdoc/driver/metal/metal_function_bridge.mm | 2 +- renderdoc/driver/metal/metal_library_bridge.mm | 2 +- .../driver/metal/metal_render_command_encoder_bridge.mm | 2 +- renderdoc/driver/metal/metal_render_pipeline_state_bridge.mm | 2 +- renderdoc/driver/metal/metal_resources.cpp | 5 ----- renderdoc/driver/metal/metal_resources.h | 2 -- renderdoc/driver/metal/metal_texture_bridge.mm | 2 +- renderdoc/driver/metal/metal_types.cpp | 5 +++++ renderdoc/driver/metal/metal_types.h | 3 ++- 14 files changed, 17 insertions(+), 18 deletions(-) diff --git a/renderdoc/driver/metal/metal_blit_command_encoder_bridge.mm b/renderdoc/driver/metal/metal_blit_command_encoder_bridge.mm index 71913b8f6..2c0f8459f 100644 --- a/renderdoc/driver/metal/metal_blit_command_encoder_bridge.mm +++ b/renderdoc/driver/metal/metal_blit_command_encoder_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_buffer_bridge.mm b/renderdoc/driver/metal/metal_buffer_bridge.mm index 9ca4024ae..d445ac442 100644 --- a/renderdoc/driver/metal/metal_buffer_bridge.mm +++ b/renderdoc/driver/metal/metal_buffer_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_command_buffer_bridge.mm b/renderdoc/driver/metal/metal_command_buffer_bridge.mm index 505fbea05..bf9b1c984 100644 --- a/renderdoc/driver/metal/metal_command_buffer_bridge.mm +++ b/renderdoc/driver/metal/metal_command_buffer_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_command_queue_bridge.mm b/renderdoc/driver/metal/metal_command_queue_bridge.mm index a3f5fc4b3..94bfc02d4 100644 --- a/renderdoc/driver/metal/metal_command_queue_bridge.mm +++ b/renderdoc/driver/metal/metal_command_queue_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_device_bridge.mm b/renderdoc/driver/metal/metal_device_bridge.mm index 12bfd246f..441ead020 100644 --- a/renderdoc/driver/metal/metal_device_bridge.mm +++ b/renderdoc/driver/metal/metal_device_bridge.mm @@ -43,7 +43,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_function_bridge.mm b/renderdoc/driver/metal/metal_function_bridge.mm index cc593d5c7..7a43ba04e 100644 --- a/renderdoc/driver/metal/metal_function_bridge.mm +++ b/renderdoc/driver/metal/metal_function_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_library_bridge.mm b/renderdoc/driver/metal/metal_library_bridge.mm index eb38c3159..693ed4994 100644 --- a/renderdoc/driver/metal/metal_library_bridge.mm +++ b/renderdoc/driver/metal/metal_library_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_render_command_encoder_bridge.mm b/renderdoc/driver/metal/metal_render_command_encoder_bridge.mm index ea49d2030..f36e4df69 100644 --- a/renderdoc/driver/metal/metal_render_command_encoder_bridge.mm +++ b/renderdoc/driver/metal/metal_render_command_encoder_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_render_pipeline_state_bridge.mm b/renderdoc/driver/metal/metal_render_pipeline_state_bridge.mm index 76f1362fa..3b94a7c60 100644 --- a/renderdoc/driver/metal/metal_render_pipeline_state_bridge.mm +++ b/renderdoc/driver/metal/metal_render_pipeline_state_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_resources.cpp b/renderdoc/driver/metal/metal_resources.cpp index 6c31c9d66..01b5c0e7a 100644 --- a/renderdoc/driver/metal/metal_resources.cpp +++ b/renderdoc/driver/metal/metal_resources.cpp @@ -47,11 +47,6 @@ ResourceId GetResID(WrappedMTLObject *obj) METALCPP_WRAPPED_PROTOCOLS(IMPLEMENT_WRAPPED_TYPE_HELPERS) #undef IMPLEMENT_WRAPPED_TYPE_HELPERS -void WrappedMTLObject::Dealloc() -{ - // TODO: call the wrapped object destructor -} - MetalResourceManager *WrappedMTLObject::GetResourceManager() { return m_Device->GetResourceManager(); diff --git a/renderdoc/driver/metal/metal_resources.h b/renderdoc/driver/metal/metal_resources.h index d2bb92bd1..c2b206b46 100644 --- a/renderdoc/driver/metal/metal_resources.h +++ b/renderdoc/driver/metal/metal_resources.h @@ -64,8 +64,6 @@ struct WrappedMTLObject } ~WrappedMTLObject() = default; - void Dealloc(); - MTL::Device *GetDevice() { return (MTL::Device *)m_Device; } MetalResourceManager *GetResourceManager(); diff --git a/renderdoc/driver/metal/metal_texture_bridge.mm b/renderdoc/driver/metal/metal_texture_bridge.mm index 8e7c49944..11f0b5af9 100644 --- a/renderdoc/driver/metal/metal_texture_bridge.mm +++ b/renderdoc/driver/metal/metal_texture_bridge.mm @@ -40,7 +40,7 @@ #pragma clang diagnostic ignored "-Wobjc-missing-super-calls" - (void)dealloc { - GetWrapped(self)->Dealloc(); + DeallocateObjCBridge(GetWrapped(self)); } #pragma clang diagnostic pop diff --git a/renderdoc/driver/metal/metal_types.cpp b/renderdoc/driver/metal/metal_types.cpp index 0f5acc88a..888fb60ba 100644 --- a/renderdoc/driver/metal/metal_types.cpp +++ b/renderdoc/driver/metal/metal_types.cpp @@ -65,6 +65,11 @@ RDCCOMPILE_ASSERT(sizeof(NS::UInteger) == sizeof(std::uintptr_t), ((MTL::CPPTYPE *)objc)->release(); \ } \ } \ + void DeallocateObjCBridge(WrappedMTL##CPPTYPE *wrappedCPP) \ + { \ + wrappedCPP->m_ObjcBridge = NULL; \ + wrappedCPP->m_Real = NULL; \ + wrappedCPP->GetResourceManager()->ReleaseWrappedResource(wrappedCPP); \ } METALCPP_WRAPPED_PROTOCOLS(DEFINE_OBJC_HELPERS) diff --git a/renderdoc/driver/metal/metal_types.h b/renderdoc/driver/metal/metal_types.h index a0d50a30f..718abcbf4 100644 --- a/renderdoc/driver/metal/metal_types.h +++ b/renderdoc/driver/metal/metal_types.h @@ -73,7 +73,8 @@ DECLARE_WRAPPED_TYPE_SERIALISE(Resource) { \ return (WrappedMTL##CPPTYPE *)cppType; \ } \ - extern void AllocateObjCBridge(WrappedMTL##CPPTYPE *wrapped); + extern void AllocateObjCBridge(WrappedMTL##CPPTYPE *wrapped); \ + extern void DeallocateObjCBridge(WrappedMTL##CPPTYPE *wrapped); METALCPP_WRAPPED_PROTOCOLS(DECLARE_OBJC_HELPERS) #undef DECLARE_OBJC_HELPERS