Allow resource managers to mutate initial states

* This is useful for being able to cache data during apply, rather than during
  serialise when we don't typically execute GPU work.
This commit is contained in:
baldurk
2024-10-03 16:03:45 +01:00
parent d2ba9b793a
commit 7bfa00db6a
13 changed files with 14 additions and 17 deletions
+2 -2
View File
@@ -700,7 +700,7 @@ protected:
virtual bool Serialise_InitialState(WriteSerialiser &ser, ResourceId id, RecordType *record,
const InitialContentData *initialData) = 0;
virtual void Create_InitialState(ResourceId id, WrappedResourceType live, bool hasData) = 0;
virtual void Apply_InitialState(WrappedResourceType live, const InitialContentData &initial) = 0;
virtual void Apply_InitialState(WrappedResourceType live, InitialContentData &initial) = 0;
virtual rdcarray<ResourceId> InitialContentResources();
void UpdateLastWriteTime(ResourceId id, FrameRefType refType);
@@ -1377,7 +1377,7 @@ void ResourceManager<Configuration>::ApplyInitialContents()
for(auto it = resources.begin(); it != resources.end(); ++it)
{
ResourceId id = *it;
const InitialContentStorage &data = m_InitialContents[id];
InitialContentStorage &data = m_InitialContents[id];
WrappedResourceType live = GetLiveResource(id);
Apply_InitialState(live, data.data);
}
+1 -1
View File
@@ -767,7 +767,7 @@ public:
const D3D11InitialContents *initial);
void Create_InitialState(ResourceId id, ID3D11DeviceChild *live, bool hasData);
void Apply_InitialState(ID3D11DeviceChild *live, const D3D11InitialContents &initial);
void Apply_InitialState(ID3D11DeviceChild *live, D3D11InitialContents &initial);
void SetStructuredExport(uint64_t sectionVersion)
{
+1 -2
View File
@@ -1297,8 +1297,7 @@ void WrappedID3D11Device::Create_InitialState(ResourceId id, ID3D11DeviceChild *
}
}
void WrappedID3D11Device::Apply_InitialState(ID3D11DeviceChild *live,
const D3D11InitialContents &initial)
void WrappedID3D11Device::Apply_InitialState(ID3D11DeviceChild *live, D3D11InitialContents &initial)
{
if(HasFatalError())
return;
+1 -2
View File
@@ -96,8 +96,7 @@ void D3D11ResourceManager::Create_InitialState(ResourceId id, ID3D11DeviceChild
m_Device->Create_InitialState(id, live, hasData);
}
void D3D11ResourceManager::Apply_InitialState(ID3D11DeviceChild *live,
const D3D11InitialContents &data)
void D3D11ResourceManager::Apply_InitialState(ID3D11DeviceChild *live, D3D11InitialContents &data)
{
m_Device->Apply_InitialState(live, data);
}
+1 -1
View File
@@ -322,7 +322,7 @@ private:
bool Serialise_InitialState(WriteSerialiser &ser, ResourceId id, D3D11ResourceRecord *record,
const D3D11InitialContents *initial);
void Create_InitialState(ResourceId id, ID3D11DeviceChild *live, bool hasData);
void Apply_InitialState(ID3D11DeviceChild *live, const D3D11InitialContents &data);
void Apply_InitialState(ID3D11DeviceChild *live, D3D11InitialContents &data);
WrappedID3D11Device *m_Device;
};
+1 -2
View File
@@ -1634,8 +1634,7 @@ void D3D12ResourceManager::Create_InitialState(ResourceId id, ID3D12DeviceChild
}
}
void D3D12ResourceManager::Apply_InitialState(ID3D12DeviceChild *live,
const D3D12InitialContents &data)
void D3D12ResourceManager::Apply_InitialState(ID3D12DeviceChild *live, D3D12InitialContents &data)
{
if(m_Device->HasFatalError())
return;
+1 -1
View File
@@ -1309,7 +1309,7 @@ private:
return Serialise_InitialState<WriteSerialiser>(ser, id, record, initial);
}
void Create_InitialState(ResourceId id, ID3D12DeviceChild *live, bool hasData);
void Apply_InitialState(ID3D12DeviceChild *live, const D3D12InitialContents &data);
void Apply_InitialState(ID3D12DeviceChild *live, D3D12InitialContents &data);
rdcarray<ResourceId> InitialContentResources();
WrappedID3D12Device *m_Device;
+1 -1
View File
@@ -1920,7 +1920,7 @@ void GLResourceManager::Create_InitialState(ResourceId id, GLResource live, bool
}
}
void GLResourceManager::Apply_InitialState(GLResource live, const GLInitialContents &initial)
void GLResourceManager::Apply_InitialState(GLResource live, GLInitialContents &initial)
{
if(live.Namespace == eResBuffer)
{
+1 -1
View File
@@ -333,7 +333,7 @@ private:
void PrepareTextureInitialContents(ResourceId liveid, ResourceId origid, GLResource res);
void Create_InitialState(ResourceId id, GLResource live, bool hasData);
void Apply_InitialState(GLResource live, const GLInitialContents &initial);
void Apply_InitialState(GLResource live, GLInitialContents &initial);
void MarkFBOAttachmentsReferenced(ResourceId id, GLResourceRecord *record, FrameRefType ref,
bool markDirty);
+1 -1
View File
@@ -1220,7 +1220,7 @@ public:
bool Serialise_InitialState(SerialiserType &ser, ResourceId id, VkResourceRecord *record,
const VkInitialContents *initial);
void Create_InitialState(ResourceId id, WrappedVkRes *live, bool hasData);
void Apply_InitialState(WrappedVkRes *live, const VkInitialContents &initial);
void Apply_InitialState(WrappedVkRes *live, VkInitialContents &initial);
void RemapQueueFamilyIndices(uint32_t &srcQueueFamily, uint32_t &dstQueueFamily);
uint32_t GetQueueFamilyIndex() const { return m_QueueFamilyIdx; }
+1 -1
View File
@@ -1777,7 +1777,7 @@ void WrappedVulkan::Create_InitialState(ResourceId id, WrappedVkRes *live, bool)
}
}
void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, const VkInitialContents &initial)
void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VkInitialContents &initial)
{
if(HasFatalError())
return;
+1 -1
View File
@@ -1028,7 +1028,7 @@ void VulkanResourceManager::Create_InitialState(ResourceId id, WrappedVkRes *liv
return m_Core->Create_InitialState(id, live, hasData);
}
void VulkanResourceManager::Apply_InitialState(WrappedVkRes *live, const VkInitialContents &initial)
void VulkanResourceManager::Apply_InitialState(WrappedVkRes *live, VkInitialContents &initial)
{
return m_Core->Apply_InitialState(live, initial);
}
+1 -1
View File
@@ -508,7 +508,7 @@ private:
bool Serialise_InitialState(WriteSerialiser &ser, ResourceId id, VkResourceRecord *record,
const VkInitialContents *initial);
void Create_InitialState(ResourceId id, WrappedVkRes *live, bool hasData);
void Apply_InitialState(WrappedVkRes *live, const VkInitialContents &initial);
void Apply_InitialState(WrappedVkRes *live, VkInitialContents &initial);
rdcarray<ResourceId> InitialContentResources();
// dummy handle to use - starting from near highest valid pointer to minimise risk of overlap with real handles