void DoSerialise(SerialiserType &ser, DynamicDescriptorCopy &el) { D3D12ResourceManager *rm = (D3D12ResourceManager *)ser.GetUserData(); SERIALISE_MEMBER(type); PortableHandle dst, src; if(ser.IsWriting()) { dst = ToPortableHandle(el.dst); src = ToPortableHandle(el.src); } ser.Serialise("dst", dst); ser.Serialise("src", src); if(ser.IsReading()) { if(rm) { el.dst = DescriptorFromPortableHandle(rm, dst); el.src = DescriptorFromPortableHandle(rm, src); } else { el.dst = NULL; el.src = NULL; } } }
void DoSerialiseViaResourceId(SerialiserType &ser, Interface *&el) { D3D12ResourceManager *rm = (D3D12ResourceManager *)ser.GetUserData(); ResourceId id; if(ser.IsWriting()) id = GetResID(el); DoSerialise(ser, id); if(ser.IsReading()) { if(id != ResourceId() && rm && rm->HasLiveResource(id)) el = rm->GetLiveAs<Interface>(id); else el = NULL; } }
void DoSerialise(SerialiserType &ser, D3D12_GPU_DESCRIPTOR_HANDLE &el) { D3D12ResourceManager *rm = (D3D12ResourceManager *)ser.GetUserData(); PortableHandle ph; if(ser.IsWriting()) ph = ToPortableHandle(el); DoSerialise(ser, ph); if(ser.IsReading()) { if(rm) el.ptr = (SIZE_T)DescriptorFromPortableHandle(rm, ph); else el.ptr = 0; } }
void DoSerialise(SerialiserType &ser, D3D12BufferLocation &el) { D3D12ResourceManager *rm = (D3D12ResourceManager *)ser.GetUserData(); ResourceId buffer; UINT64 offs = 0; if(ser.IsWriting()) WrappedID3D12Resource::GetResIDFromAddr(el.Location, buffer, offs); ser.Serialise("Buffer", buffer); ser.Serialise("Offset", offs); if(ser.IsReading()) { if(rm && buffer != ResourceId() && rm->HasLiveResource(buffer)) el.Location = rm->GetLiveAs<ID3D12Resource>(buffer)->GetGPUVirtualAddress() + offs; else el.Location = 0; } }