diff --git a/renderdoc/driver/metal/metal_resources.cpp b/renderdoc/driver/metal/metal_resources.cpp index 2833677d0..9cecd12f4 100644 --- a/renderdoc/driver/metal/metal_resources.cpp +++ b/renderdoc/driver/metal/metal_resources.cpp @@ -34,3 +34,7 @@ MTL::Device *WrappedMTLObject::GetObjCWrappedMTLDevice() { return UnwrapObjC(m_WrappedMTLDevice); } + +MetalResourceRecord::~MetalResourceRecord() +{ +} diff --git a/renderdoc/driver/metal/metal_resources.h b/renderdoc/driver/metal/metal_resources.h index c251f77b9..358632099 100644 --- a/renderdoc/driver/metal/metal_resources.h +++ b/renderdoc/driver/metal/metal_resources.h @@ -27,6 +27,7 @@ #include "core/resource_manager.h" #include "metal_common.h" +struct MetalResourceRecord; class WrappedMTLDevice; enum MetalResourceType @@ -43,7 +44,11 @@ struct WrappedMTLObject { WrappedMTLObject() = delete; WrappedMTLObject(WrappedMTLDevice *wrappedMTLDevice, CaptureState &captureState) - : wrappedObjC(NULL), real(NULL), m_WrappedMTLDevice(wrappedMTLDevice), m_State(captureState) + : wrappedObjC(NULL), + real(NULL), + record(NULL), + m_WrappedMTLDevice(wrappedMTLDevice), + m_State(captureState) { } WrappedMTLObject(void *mtlObject, ResourceId objId, WrappedMTLDevice *wrappedMTLDevice, @@ -51,6 +56,7 @@ struct WrappedMTLObject : wrappedObjC(NULL), real(mtlObject), id(objId), + record(NULL), m_WrappedMTLDevice(wrappedMTLDevice), m_State(captureState) { @@ -64,6 +70,7 @@ struct WrappedMTLObject void *wrappedObjC; void *real; ResourceId id; + MetalResourceRecord *record; WrappedMTLDevice *m_WrappedMTLDevice; CaptureState &m_State; }; @@ -85,3 +92,26 @@ RealType UnwrapObjC(WrappedMTLObject *obj) return (RealType)obj->wrappedObjC; } + +struct MetalResourceRecord : public ResourceRecord +{ +public: + enum + { + NullResource = NULL + }; + + MetalResourceRecord(ResourceId id) + : ResourceRecord(id, true), Resource(NULL), resType(eResUnknown), ptrUnion(NULL) + { + } + ~MetalResourceRecord(); + WrappedMTLObject *Resource; + MetalResourceType resType; + + // Each entry is only used by specific record types + union + { + void *ptrUnion; // for initialisation to NULL + }; +};