Update D3D11 initial state handling to write directly from mapped buffer

This commit is contained in:
baldurk
2017-09-27 18:35:14 +01:00
parent a36d379360
commit aafdc88fd2
5 changed files with 460 additions and 398 deletions
+7
View File
@@ -246,6 +246,13 @@ public:
ret func; \
bool CONCAT(Serialise_, func);
// A handy macros to say "is the serialiser reading and we're doing replay-mode stuff?"
// The reason we check both is that checking the first allows the compiler to eliminate the other
// path at compile-time, and the second because we might be just struct-serialising in which case we
// should be doing no work to restore states.
// Writing is unambiguously during capture mode, so we don't have to check both in that case.
#define IsReplayingAndReading() (ser.IsReading() && IsReplayMode(m_State))
enum class D3D11Chunk : uint32_t
{
DeviceInitialisation = (uint32_t)SystemChunk::FirstDriverChunk,
+6 -1
View File
@@ -489,7 +489,12 @@ public:
// log replaying
bool Prepare_InitialState(ID3D11DeviceChild *res);
bool Serialise_InitialState(ResourceId resid, ID3D11DeviceChild *res);
uint32_t GetSize_InitialState(ResourceId id, ID3D11DeviceChild *res);
template <typename SerialiserType>
bool Serialise_InitialState(SerialiserType &ser, ResourceId resid, ID3D11DeviceChild *res);
bool ShouldOmitInitState(D3D11_TEXTURE2D_DESC &desc, ResourceId Id);
void Create_InitialState(ResourceId id, ID3D11DeviceChild *live, bool hasData);
void Apply_InitialState(ID3D11DeviceChild *live, D3D11ResourceManager::InitialContentData initial);
File diff suppressed because it is too large Load Diff
+8 -2
View File
@@ -104,9 +104,15 @@ bool D3D11ResourceManager::Prepare_InitialState(ID3D11DeviceChild *res)
return m_Device->Prepare_InitialState(res);
}
bool D3D11ResourceManager::Serialise_InitialState(ResourceId id, ID3D11DeviceChild *res)
uint32_t D3D11ResourceManager::GetSize_InitialState(ResourceId id, ID3D11DeviceChild *res)
{
return m_Device->Serialise_InitialState(id, res);
return m_Device->GetSize_InitialState(id, res);
}
bool D3D11ResourceManager::Serialise_InitialState(WriteSerialiser &ser, ResourceId id,
ID3D11DeviceChild *res)
{
return m_Device->Serialise_InitialState(ser, id, res);
}
void D3D11ResourceManager::Create_InitialState(ResourceId id, ID3D11DeviceChild *live, bool hasData)
+3 -6
View File
@@ -170,11 +170,7 @@ class D3D11ResourceManager
: public ResourceManager<ID3D11DeviceChild *, ID3D11DeviceChild *, D3D11ResourceRecord>
{
public:
D3D11ResourceManager(LogState state, Serialiser *ser, WrappedID3D11Device *dev)
: ResourceManager(state, ser), m_Device(dev)
{
}
D3D11ResourceManager(WrappedID3D11Device *dev) : m_Device(dev) {}
ID3D11DeviceChild *UnwrapResource(ID3D11DeviceChild *res);
ID3D11Resource *UnwrapResource(ID3D11Resource *res)
{
@@ -190,7 +186,8 @@ private:
bool Force_InitialState(ID3D11DeviceChild *res, bool prepare);
bool Need_InitialStateChunk(ID3D11DeviceChild *res);
bool Prepare_InitialState(ID3D11DeviceChild *res);
bool Serialise_InitialState(ResourceId resid, ID3D11DeviceChild *res);
uint32_t GetSize_InitialState(ResourceId id, ID3D11DeviceChild *res);
bool Serialise_InitialState(WriteSerialiser &ser, ResourceId resid, ID3D11DeviceChild *res);
void Create_InitialState(ResourceId id, ID3D11DeviceChild *live, bool hasData);
void Apply_InitialState(ID3D11DeviceChild *live, InitialContentData data);