diff --git a/renderdoc/api/replay/structured_data.h b/renderdoc/api/replay/structured_data.h index 7d9503cfa..f0bacbba9 100644 --- a/renderdoc/api/replay/structured_data.h +++ b/renderdoc/api/replay/structured_data.h @@ -217,8 +217,9 @@ conservative size estimate was used on creation to avoid seeking to fix-up the s DOCUMENT(R"(The duration in microseconds that this chunk took. This is the time for the actual work, not the serialising. +Since 0 is a possible value for this (for extremely fast calls), -1 is the invalid/not present value. )"); - uint64_t durationMicro = 0; + int64_t durationMicro = -1; DOCUMENT("The point in time when this chunk was recorded, in microseconds since program start."); uint64_t timestampMicro = 0; diff --git a/renderdoc/serialise/codecs/xml_codec.cpp b/renderdoc/serialise/codecs/xml_codec.cpp index 7b47297b6..9d6f7ccc5 100644 --- a/renderdoc/serialise/codecs/xml_codec.cpp +++ b/renderdoc/serialise/codecs/xml_codec.cpp @@ -354,7 +354,7 @@ static ReplayStatus Structured2XML(const char *filename, const RDCFile &file, ui xChunk.append_attribute("threadID") = chunk->metadata.threadID; if(chunk->metadata.timestampMicro) xChunk.append_attribute("timestamp") = chunk->metadata.timestampMicro; - if(chunk->metadata.durationMicro) + if(chunk->metadata.durationMicro >= 0) xChunk.append_attribute("duration") = chunk->metadata.durationMicro; if(!chunk->metadata.callstack.empty()) { diff --git a/renderdoc/serialise/serialiser.cpp b/renderdoc/serialise/serialiser.cpp index deebf68d9..b2664cf4b 100644 --- a/renderdoc/serialise/serialiser.cpp +++ b/renderdoc/serialise/serialiser.cpp @@ -431,7 +431,7 @@ void Serialiser::WriteStructuredFile(const SDFile &file if(m_ChunkMetadata.threadID != 0) m_ChunkFlags |= ChunkThreadID; - if(m_ChunkMetadata.durationMicro != 0) + if(m_ChunkMetadata.durationMicro >= 0) m_ChunkFlags |= ChunkDuration; if(m_ChunkMetadata.timestampMicro != 0)