Move Subresources into D3D11ResourceRecord, not needed in other APIs

This commit is contained in:
baldurk
2015-11-12 15:21:06 +01:00
parent cb0ee82c67
commit 773c1e48e5
5 changed files with 50 additions and 36 deletions
-10
View File
@@ -83,16 +83,6 @@ void ResourceRecord::Delete(ResourceRecordHandler *mgr)
DeleteChunks();
for(int i=0; i < NumSubResources; i++)
{
for(auto it=SubResources[i]->m_Chunks.begin(); it != SubResources[i]->m_Chunks.end(); ++it)
SAFE_DELETE(it->second);
SAFE_DELETE(SubResources[i]);
}
SAFE_DELETE_ARRAY(SubResources);
if(ResID != ResourceId())
mgr->RemoveResourceRecord(ResID);
+5 -18
View File
@@ -89,8 +89,7 @@ struct ResourceRecord
ResourceRecord(ResourceId id, bool lock)
: RefCount(1), ResID(id), UpdateCount(0),
DataInSerialiser(false), DataPtr(NULL), DataOffset(0),
Length(-1), DataWritten(false), SpecialResource(false),
NumSubResources(0), SubResources(NULL)
Length(-1), DataWritten(false), SpecialResource(false)
{
m_ChunkLock = NULL;
@@ -152,12 +151,7 @@ struct ResourceRecord
}
if(!dataWritten)
{
recordlist.insert(m_Chunks.begin(), m_Chunks.end());
for(int i=0; i < NumSubResources; i++)
SubResources[i]->Insert(recordlist);
}
}
void AddRef() { RefCount++; }
@@ -255,9 +249,6 @@ struct ResourceRecord
void SetDataPtr(byte *ptr)
{
DataPtr = ptr;
for(int i=0; i < NumSubResources; i++)
SubResources[i]->SetDataPtr(ptr);
}
void MarkResourceFrameReferenced(ResourceId id, FrameRefType refType);
@@ -268,20 +259,16 @@ struct ResourceRecord
ids.insert(it->first);
}
int UpdateCount;
bool DataInSerialiser;
int32_t Length;
bool SpecialResource; // like the swap chain back buffers
int UpdateCount : 29;
bool DataInSerialiser : 1;
bool SpecialResource : 1; // like the swap chain back buffers
bool DataWritten : 1;
int NumSubResources;
ResourceRecord **SubResources;
protected:
byte *DataPtr;
uint64_t DataOffset;
bool DataWritten;
int RefCount;
+45 -2
View File
@@ -46,7 +46,8 @@ struct D3D11ResourceRecord : public ResourceRecord
static byte markerValue[32];
D3D11ResourceRecord(ResourceId id)
: ResourceRecord(id, true)
: ResourceRecord(id, true),
NumSubResources(0), SubResources(NULL)
{
RDCEraseEl(ShadowPtr);
RDCEraseEl(contexts);
@@ -55,6 +56,14 @@ struct D3D11ResourceRecord : public ResourceRecord
~D3D11ResourceRecord()
{
for(int i=0; i < NumSubResources; i++)
{
SubResources[i]->DeleteChunks();
SAFE_DELETE(SubResources[i]);
}
SAFE_DELETE_ARRAY(SubResources);
FreeShadowStorage();
}
@@ -123,8 +132,42 @@ struct D3D11ResourceRecord : public ResourceRecord
contexts[ctx] = false;
}
bool ignoreSerialise;
void SetDataPtr(byte *ptr)
{
DataPtr = ptr;
for(int i=0; i < NumSubResources; i++)
SubResources[i]->SetDataPtr(ptr);
}
void Insert(map<int32_t, Chunk *> &recordlist)
{
bool dataWritten = DataWritten;
DataWritten = true;
for(auto it = Parents.begin(); it != Parents.end(); ++it)
{
if(!(*it)->DataWritten)
{
(*it)->Insert(recordlist);
}
}
if(!dataWritten)
{
recordlist.insert(m_Chunks.begin(), m_Chunks.end());
for(int i=0; i < NumSubResources; i++)
SubResources[i]->Insert(recordlist);
}
}
bool ignoreSerialise;
int NumSubResources;
ResourceRecord **SubResources;
private:
byte *ShadowPtr[32][2];
size_t ShadowSize[32];
-4
View File
@@ -754,16 +754,12 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
m_DeviceRecord = GetResourceManager()->AddResourceRecord(m_DeviceResourceID);
m_DeviceRecord->DataInSerialiser = false;
m_DeviceRecord->Length = 0;
m_DeviceRecord->NumSubResources = 0;
m_DeviceRecord->SpecialResource = true;
m_DeviceRecord->SubResources = NULL;
m_ContextRecord = GetResourceManager()->AddResourceRecord(m_ContextResourceID);
m_ContextRecord->DataInSerialiser = false;
m_ContextRecord->Length = 0;
m_ContextRecord->NumSubResources = 0;
m_ContextRecord->SpecialResource = true;
m_ContextRecord->SubResources = NULL;
// register VAO 0 as a special VAO, so that it can be tracked if the app uses it
// we immediately mark it dirty since the vertex array tracking functions expect a proper VAO
-2
View File
@@ -306,9 +306,7 @@ WrappedVulkan::WrappedVulkan(const char *logFilename)
m_FrameCaptureRecord = GetResourceManager()->AddResourceRecord(ResourceIDGen::GetNewUniqueID());
m_FrameCaptureRecord->DataInSerialiser = false;
m_FrameCaptureRecord->Length = 0;
m_FrameCaptureRecord->NumSubResources = 0;
m_FrameCaptureRecord->SpecialResource = true;
m_FrameCaptureRecord->SubResources = NULL;
}
else
{