Commit 3839fa5b by Jamie Madill Committed by Commit Bot

Revert "Capture/Replay: Reset GL Fence Sync objects"

This reverts commit 9b4fd545. Reason for revert: Breaks capture: INFO:root:Passed: 0, Comparison Failed: 0, Crashed: 0, CompileFailed 0, Skipped: 745, Timeout: 0 Bug: angleproject:5900 Original change's description: > Capture/Replay: Reset GL Fence Sync objects > > Asphalt 9 uses GL Fence Sync objects during rendering, which results in > Fence Sync objects being created during setup and deleted while > replaying frames. When the replay is restarted, the Fence Sync objects > that were created during setup and deleted during the replay need to be > recreated during the reset phase. > > Bug: angleproject:5883 > Bug: angleproject:4599 > Change-Id: I118f2b7208c4d512ab646b10f52b3a0936895089 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2838237 > Commit-Queue: Tim Van Patten <timvp@google.com> > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> Bug: angleproject:5883 Bug: angleproject:4599 Change-Id: I56c682e1d90dcdde7b18c941aad976825de3af42 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2851057Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent a25f21ee
...@@ -931,37 +931,6 @@ void MaybeResetResources(std::stringstream &out, ...@@ -931,37 +931,6 @@ void MaybeResetResources(std::stringstream &out,
} }
} }
void MaybeResetFenceSyncObjects(std::stringstream &out,
DataTracker *dataTracker,
std::stringstream &header,
ResourceTracker *resourceTracker,
std::vector<uint8_t> *binaryData)
{
FenceSyncCalls &fenceSyncRegenCalls = resourceTracker->getFenceSyncRegenCalls();
// If any of our starting fence sync objects were deleted during the run, recreate them
FenceSyncSet &fenceSyncsToRegen = resourceTracker->getFenceSyncsToRegen();
for (const GLsync sync : fenceSyncsToRegen)
{
// Emit their regen calls
for (CallCapture &call : fenceSyncRegenCalls[sync])
{
out << " ";
WriteCppReplayForCall(call, dataTracker, out, header, binaryData);
out << ";\n";
}
}
}
void MaybeResetOpaqueTypeObjects(std::stringstream &out,
DataTracker *dataTracker,
std::stringstream &header,
ResourceTracker *resourceTracker,
std::vector<uint8_t> *binaryData)
{
MaybeResetFenceSyncObjects(out, dataTracker, header, resourceTracker, binaryData);
}
void WriteCppReplayFunctionWithParts(const gl::Context *context, void WriteCppReplayFunctionWithParts(const gl::Context *context,
ReplayFunc replayFunc, ReplayFunc replayFunc,
DataTracker *dataTracker, DataTracker *dataTracker,
...@@ -1089,11 +1058,8 @@ void WriteCppReplay(bool compression, ...@@ -1089,11 +1058,8 @@ void WriteCppReplay(bool compression,
resourceTracker, binaryData); resourceTracker, binaryData);
} }
// Reset opaque type objects that don't have IDs, so are not ResourceIDTypes.
MaybeResetOpaqueTypeObjects(restoreCallStream, &dataTracker, header, resourceTracker,
binaryData);
out << restoreCallStream.str(); out << restoreCallStream.str();
out << "}\n"; out << "}\n";
} }
...@@ -2138,18 +2104,6 @@ void CaptureBufferResetCalls(const gl::State &replayState, ...@@ -2138,18 +2104,6 @@ void CaptureBufferResetCalls(const gl::State &replayState,
CaptureUnmapBuffer(replayState, true, gl::BufferBinding::Array, GL_TRUE)); CaptureUnmapBuffer(replayState, true, gl::BufferBinding::Array, GL_TRUE));
} }
void CaptureFenceSyncResetCalls(const gl::State &replayState,
ResourceTracker *resourceTracker,
GLsync syncID,
const gl::Sync *sync)
{
// Track calls to regenerate a given fence sync
FenceSyncCalls &fenceSyncRegenCalls = resourceTracker->getFenceSyncRegenCalls();
Capture(&fenceSyncRegenCalls[syncID],
CaptureFenceSync(replayState, true, sync->getCondition(), sync->getFlags(), syncID));
MaybeCaptureUpdateResourceIDs(&fenceSyncRegenCalls[syncID]);
}
void CaptureBufferBindingResetCalls(const gl::State &replayState, void CaptureBufferBindingResetCalls(const gl::State &replayState,
ResourceTracker *resourceTracker, ResourceTracker *resourceTracker,
gl::BufferBinding binding, gl::BufferBinding binding,
...@@ -3119,8 +3073,6 @@ void CaptureMidExecutionSetup(const gl::Context *context, ...@@ -3119,8 +3073,6 @@ void CaptureMidExecutionSetup(const gl::Context *context,
continue; continue;
} }
cap(CaptureFenceSync(replayState, true, sync->getCondition(), sync->getFlags(), syncID)); cap(CaptureFenceSync(replayState, true, sync->getCondition(), sync->getFlags(), syncID));
CaptureFenceSyncResetCalls(replayState, resourceTracker, syncID, sync);
resourceTracker->getStartingFenceSyncs().insert(syncID);
} }
// Capture Image Texture bindings // Capture Image Texture bindings
...@@ -4095,7 +4047,7 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa ...@@ -4095,7 +4047,7 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa
mBufferDataMap.erase(bufferDataInfo); mBufferDataMap.erase(bufferDataInfo);
} }
// If we're capturing, track what buffers have been deleted // If we're capturing, track what buffers have been deleted
if (isCaptureActive()) if (mFrameIndex >= mCaptureStartFrame)
{ {
mResourceTracker.setDeletedBuffer(bufferIDs[i]); mResourceTracker.setDeletedBuffer(bufferIDs[i]);
} }
...@@ -4112,7 +4064,7 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa ...@@ -4112,7 +4064,7 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa
for (GLsizei i = 0; i < count; i++) for (GLsizei i = 0; i < count; i++)
{ {
// If we're capturing, track what new buffers have been genned // If we're capturing, track what new buffers have been genned
if (isCaptureActive()) if (mFrameIndex >= mCaptureStartFrame)
{ {
mResourceTracker.setGennedBuffer(bufferIDs[i]); mResourceTracker.setGennedBuffer(bufferIDs[i]);
} }
...@@ -4120,17 +4072,6 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa ...@@ -4120,17 +4072,6 @@ void FrameCapture::maybeCapturePreCallUpdates(const gl::Context *context, CallCa
break; break;
} }
case EntryPoint::GLDeleteSync:
{
GLsync sync = call.params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal;
// If we're capturing, track which fence sync has been deleted
if (isCaptureActive())
{
mResourceTracker.setDeletedFenceSync(sync);
}
break;
}
case EntryPoint::GLDrawArrays: case EntryPoint::GLDrawArrays:
{ {
maybeCaptureDrawArraysClientData(context, call, 1); maybeCaptureDrawArraysClientData(context, call, 1);
...@@ -4565,17 +4506,11 @@ void FrameCapture::checkForCaptureTrigger() ...@@ -4565,17 +4506,11 @@ void FrameCapture::checkForCaptureTrigger()
void FrameCapture::onEndFrame(const gl::Context *context) void FrameCapture::onEndFrame(const gl::Context *context)
{ {
if (mFrameIndex > mCaptureEndFrame)
{
setCaptureInactive();
return;
}
// On Android, we can trigger a capture during the run // On Android, we can trigger a capture during the run
checkForCaptureTrigger(); checkForCaptureTrigger();
// Note that we currently capture before the start frame to collect shader and program sources. // Note that we currently capture before the start frame to collect shader and program sources.
if (!mFrameCalls.empty() && isCaptureActive()) if (!mFrameCalls.empty() && mFrameIndex >= mCaptureStartFrame)
{ {
if (mIsFirstFrame) if (mIsFirstFrame)
{ {
...@@ -4620,8 +4555,6 @@ void FrameCapture::onEndFrame(const gl::Context *context) ...@@ -4620,8 +4555,6 @@ void FrameCapture::onEndFrame(const gl::Context *context)
if (enabled() && mFrameIndex == mCaptureStartFrame) if (enabled() && mFrameIndex == mCaptureStartFrame)
{ {
setCaptureActive();
mSetupCalls.clear(); mSetupCalls.clear();
CaptureMidExecutionSetup(context, &mSetupCalls, &mResourceTracker, this); CaptureMidExecutionSetup(context, &mSetupCalls, &mResourceTracker, this);
} }
...@@ -4728,19 +4661,6 @@ void ResourceTracker::setDeletedBuffer(gl::BufferID id) ...@@ -4728,19 +4661,6 @@ void ResourceTracker::setDeletedBuffer(gl::BufferID id)
mBuffersToRestore.insert(id); mBuffersToRestore.insert(id);
} }
void ResourceTracker::setDeletedFenceSync(GLsync sync)
{
ASSERT(sync != nullptr);
if (mStartingFenceSyncs.find(sync) == mStartingFenceSyncs.end())
{
// This is a fence sync created after MEC was initialized. Ignore it.
return;
}
// In this case, the app is deleting a fence sync we started with, we need to regen on loop.
mFenceSyncsToRegen.insert(sync);
}
void ResourceTracker::setGennedBuffer(gl::BufferID id) void ResourceTracker::setGennedBuffer(gl::BufferID id)
{ {
if (mStartingBuffers.find(id) == mStartingBuffers.end()) if (mStartingBuffers.find(id) == mStartingBuffers.end())
......
...@@ -213,9 +213,6 @@ using BufferCalls = std::map<gl::BufferID, std::vector<CallCapture>>; ...@@ -213,9 +213,6 @@ using BufferCalls = std::map<gl::BufferID, std::vector<CallCapture>>;
// true means mapped, false means unmapped // true means mapped, false means unmapped
using BufferMapStatusMap = std::map<gl::BufferID, bool>; using BufferMapStatusMap = std::map<gl::BufferID, bool>;
using FenceSyncSet = std::set<GLsync>;
using FenceSyncCalls = std::map<GLsync, std::vector<CallCapture>>;
// Helper to track resource changes during the capture // Helper to track resource changes during the capture
class ResourceTracker final : angle::NonCopyable class ResourceTracker final : angle::NonCopyable
{ {
...@@ -261,11 +258,6 @@ class ResourceTracker final : angle::NonCopyable ...@@ -261,11 +258,6 @@ class ResourceTracker final : angle::NonCopyable
void onShaderProgramAccess(gl::ShaderProgramID shaderProgramID); void onShaderProgramAccess(gl::ShaderProgramID shaderProgramID);
uint32_t getMaxShaderPrograms() const { return mMaxShaderPrograms; } uint32_t getMaxShaderPrograms() const { return mMaxShaderPrograms; }
FenceSyncSet &getStartingFenceSyncs() { return mStartingFenceSyncs; }
FenceSyncCalls &getFenceSyncRegenCalls() { return mFenceSyncRegenCalls; }
FenceSyncSet &getFenceSyncsToRegen() { return mFenceSyncsToRegen; }
void setDeletedFenceSync(GLsync sync);
private: private:
// Buffer regen calls will delete and gen a buffer // Buffer regen calls will delete and gen a buffer
BufferCalls mBufferRegenCalls; BufferCalls mBufferRegenCalls;
...@@ -295,14 +287,6 @@ class ResourceTracker final : angle::NonCopyable ...@@ -295,14 +287,6 @@ class ResourceTracker final : angle::NonCopyable
// Maximum accessed shader program ID. // Maximum accessed shader program ID.
uint32_t mMaxShaderPrograms = 0; uint32_t mMaxShaderPrograms = 0;
// Fence sync objects created during MEC setup
FenceSyncSet mStartingFenceSyncs;
// Fence sync regen calls will create a fence sync objects
FenceSyncCalls mFenceSyncRegenCalls;
// Fence syncs to regen are a list of starting fence sync objects that were deleted and need to
// be regen'ed.
FenceSyncSet mFenceSyncsToRegen;
}; };
// Used by the CPP replay to filter out unnecessary code. // Used by the CPP replay to filter out unnecessary code.
...@@ -377,10 +361,6 @@ class FrameCapture final : angle::NonCopyable ...@@ -377,10 +361,6 @@ class FrameCapture final : angle::NonCopyable
ReplayContext *replayContext, ReplayContext *replayContext,
const CallCapture &call); const CallCapture &call);
void setCaptureActive() { mCaptureActive = true; }
void setCaptureInactive() { mCaptureActive = false; }
bool isCaptureActive() { return mCaptureActive; }
std::vector<CallCapture> mSetupCalls; std::vector<CallCapture> mSetupCalls;
std::vector<CallCapture> mFrameCalls; std::vector<CallCapture> mFrameCalls;
...@@ -411,8 +391,6 @@ class FrameCapture final : angle::NonCopyable ...@@ -411,8 +391,6 @@ class FrameCapture final : angle::NonCopyable
// Initialize it to the number of frames you want to capture, and then clear the value to 0 when // Initialize it to the number of frames you want to capture, and then clear the value to 0 when
// you reach the content you want to capture. Currently only available on Android. // you reach the content you want to capture. Currently only available on Android.
uint32_t mCaptureTrigger; uint32_t mCaptureTrigger;
bool mCaptureActive = false;
}; };
// Shared class for any items that need to be tracked by FrameCapture across shared contexts // Shared class for any items that need to be tracked by FrameCapture across shared contexts
......
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