StateManagerGL: Rework query tracking (again)
* Put the temporarily paused queries into a separate map, this should
be separate functionality from the regular query tracking.
* Pair down the number of functions that modify the current begin/end
state.
* Always pause all old queries and resume all new queries on context
switch.
BUG=805233
Change-Id: If37a9947b50feaa4e627070ce2a7895aa5034c0e
Reviewed-on: https://chromium-review.googlesource.com/902426
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/gl/QueryGL.cpp b/src/libANGLE/renderer/gl/QueryGL.cpp
index ddbf2f8..502b604 100644
--- a/src/libANGLE/renderer/gl/QueryGL.cpp
+++ b/src/libANGLE/renderer/gl/QueryGL.cpp
@@ -67,11 +67,17 @@
StandardQueryGL::~StandardQueryGL()
{
- mStateManager->deleteQuery(mActiveQuery);
- mStateManager->onDeleteQueryObject(this);
+ if (mActiveQuery != 0)
+ {
+ mStateManager->endQuery(mType, this, mActiveQuery);
+ mFunctions->deleteQueries(1, &mActiveQuery);
+ mActiveQuery = 0;
+ }
+
while (!mPendingQueries.empty())
{
- mStateManager->deleteQuery(mPendingQueries.front());
+ GLuint id = mPendingQueries.front();
+ mFunctions->deleteQueries(1, &id);
mPendingQueries.pop_front();
}
}
@@ -79,7 +85,6 @@
gl::Error StandardQueryGL::begin()
{
mResultSum = 0;
- mStateManager->onBeginQuery(this);
return resume();
}
@@ -157,7 +162,7 @@
{
if (mActiveQuery != 0)
{
- mStateManager->endQuery(mType, mActiveQuery);
+ mStateManager->endQuery(mType, this, mActiveQuery);
mPendingQueries.push_back(mActiveQuery);
mActiveQuery = 0;
@@ -185,7 +190,7 @@
}
mFunctions->genQueries(1, &mActiveQuery);
- mStateManager->beginQuery(mType, mActiveQuery);
+ mStateManager->beginQuery(mType, this, mActiveQuery);
}
return gl::NoError();
@@ -222,7 +227,7 @@
mResultSum = MergeQueryResults(mType, mResultSum, static_cast<GLuint64>(result));
}
- mStateManager->deleteQuery(id);
+ mFunctions->deleteQueries(1, &id);
mPendingQueries.pop_front();
}