diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index 50b780890..76b7b4b69 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -162,7 +162,10 @@ WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real, } else { - m_pSerialiser = new Serialiser(NULL, Serialiser::WRITING, debugSerialiser); + // make serialisers smaller by default since we create a lot of these internally for small + // commands. + // User lists will quickly grow to a steady-state over time. + m_pSerialiser = new Serialiser(NULL, Serialiser::WRITING, debugSerialiser, 256); m_pSerialiser->SetDebugText(debugSerialiser); } diff --git a/renderdoc/serialise/serialiser.cpp b/renderdoc/serialise/serialiser.cpp index 02c46fdab..132644716 100644 --- a/renderdoc/serialise/serialiser.cpp +++ b/renderdoc/serialise/serialiser.cpp @@ -634,7 +634,7 @@ Serialiser::Serialiser(size_t length, const byte *memoryBuf, bool fileheader) } } -Serialiser::Serialiser(const char *path, Mode mode, bool debugMode) +Serialiser::Serialiser(const char *path, Mode mode, bool debugMode, uint64_t sizeHint) : m_pCallstack(NULL), m_pResolver(NULL), m_Buffer(NULL) { m_ResolverThread = 0; @@ -935,7 +935,7 @@ Serialiser::Serialiser(const char *path, Mode mode, bool debugMode) } else { - m_BufferSize = 128 * 1024; + m_BufferSize = sizeHint; m_BufferHead = m_Buffer = AllocAlignedBuffer((size_t)m_BufferSize); } } diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 304ca32b0..cbfa78b1a 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -199,7 +199,7 @@ public: // Init and error handling Serialiser(size_t length, const byte *memoryBuf, bool fileheader); - Serialiser(const char *path, Mode mode, bool debugMode = false); + Serialiser(const char *path, Mode mode, bool debugMode, uint64_t sizeHint = 128 * 1024); ~Serialiser(); bool HasError() { return m_HasError; }