Commit 505a8d05 by Jamie Madill Committed by Commit Bot

Capture/Replay: Split very large replay function.

This allows a replay of the T-Rex offscreen benchmark. Bug: angleproject:5133 Change-Id: I9998c4785e61a6410863a1cd8a8a569b1e08098a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2446897 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>
parent c15d1e2d
......@@ -230,23 +230,31 @@ enum class ReplayFunc
Reset,
};
constexpr uint32_t kNoPartId = std::numeric_limits<uint32_t>::max();
struct FmtReplayFunction
{
FmtReplayFunction(gl::ContextID contextIdIn, uint32_t frameIndexIn)
: contextId(contextIdIn), frameIndex(frameIndexIn)
FmtReplayFunction(gl::ContextID contextIdIn,
uint32_t frameIndexIn,
uint32_t partIdIn = kNoPartId)
: contextId(contextIdIn), frameIndex(frameIndexIn), partId(partIdIn)
{}
gl::ContextID contextId;
uint32_t frameIndex;
uint32_t partId;
};
std::ostream &operator<<(std::ostream &os, const FmtReplayFunction &fmt)
{
os << "ReplayContext" << static_cast<int>(fmt.contextId) << "Frame" << fmt.frameIndex << "()";
os << "ReplayContext" << static_cast<int>(fmt.contextId) << "Frame" << fmt.frameIndex;
if (fmt.partId != kNoPartId)
{
os << "Part" << fmt.partId;
}
os << "()";
return os;
}
constexpr uint32_t kNoPartId = std::numeric_limits<uint32_t>::max();
struct FmtSetupFunction
{
FmtSetupFunction(gl::ContextID contextIdIn, uint32_t partIdIn)
......@@ -301,7 +309,7 @@ std::ostream &operator<<(std::ostream &os, const FmtFunction &fmt)
switch (fmt.funcType)
{
case ReplayFunc::Replay:
os << FmtReplayFunction(fmt.contextId, fmt.frameIndex);
os << FmtReplayFunction(fmt.contextId, fmt.frameIndex, fmt.partId);
break;
case ReplayFunc::Setup:
......@@ -1114,21 +1122,19 @@ void WriteCppReplay(bool compression,
out << "\n";
}
out << "void " << FmtReplayFunction(context->id(), frameIndex) << "\n";
out << "{\n";
{
std::stringstream callStream;
callStream << "void " << FmtReplayFunction(context->id(), frameIndex) << "\n";
callStream << "{\n";
std::stringstream callStream;
WriteCppReplayFunctionWithParts(context, ReplayFunc::Replay, &dataTracker, frameIndex,
binaryData, frameCalls, header, callStream, out);
for (const CallCapture &call : frameCalls)
{
callStream << " ";
WriteCppReplayForCall(call, &dataTracker, callStream, header, binaryData);
callStream << ";\n";
out << callStream.str();
out << "}\n";
}
out << callStream.str();
out << "}\n";
if (serializeStateEnabled)
{
gl::BinaryOutputStream serializedContextData{};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment