Add support for transform feedback queries.
Change-Id: I0aab43b146f87259898db57acb9f74fdbfdb1b96
Reviewed-on: https://chromium-review.googlesource.com/184580
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 92227b5..c94f944 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -171,6 +171,10 @@
bindDrawFramebuffer(0);
bindRenderbuffer(0);
+ mState.activeQueries[GL_ANY_SAMPLES_PASSED].set(NULL);
+ mState.activeQueries[GL_ANY_SAMPLES_PASSED_CONSERVATIVE].set(NULL);
+ mState.activeQueries[GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN].set(NULL);
+
bindGenericUniformBuffer(0);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++)
{
@@ -267,11 +271,6 @@
mState.vertexAttribCurrentValues[attribIndex].setFloatValues(defaultFloatValues);
}
- for (int i = 0; i < QUERY_TYPE_COUNT; i++)
- {
- mState.activeQuery[i].set(NULL);
- }
-
mState.arrayBuffer.set(NULL);
mState.renderbuffer.set(NULL);
@@ -280,6 +279,11 @@
mTexture3DZero.set(NULL);
mTexture2DArrayZero.set(NULL);
+ for (State::ActiveQueryMap::iterator i = mState.activeQueries.begin(); i != mState.activeQueries.end(); i++)
+ {
+ i->second.set(NULL);
+ }
+
mState.genericUniformBuffer.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++)
{
@@ -749,28 +753,11 @@
GLuint Context::getActiveQuery(GLenum target) const
{
- Query *queryObject = NULL;
-
- switch (target)
- {
- case GL_ANY_SAMPLES_PASSED_EXT:
- queryObject = mState.activeQuery[QUERY_ANY_SAMPLES_PASSED].get();
- break;
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
- queryObject = mState.activeQuery[QUERY_ANY_SAMPLES_PASSED_CONSERVATIVE].get();
- break;
- default:
- ASSERT(false);
- }
+ // All query types should already exist in the activeQueries map
+ ASSERT(mState.activeQueries.find(target) != mState.activeQueries.end());
- if (queryObject)
- {
- return queryObject->id();
- }
- else
- {
- return 0;
- }
+ const Query *queryObject = mState.activeQueries.at(target).get();
+ return queryObject ? queryObject->id() : 0;
}
void Context::setEnableVertexAttribArray(unsigned int attribNum, bool enabled)
@@ -1322,28 +1309,14 @@
// b) There are no active queries for the requested target (and in the case
// of GL_ANY_SAMPLES_PASSED_EXT and GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
// no query may be active for either if glBeginQuery targets either.
- for (int i = 0; i < QUERY_TYPE_COUNT; i++)
+ for (State::ActiveQueryMap::iterator i = mState.activeQueries.begin(); i != mState.activeQueries.end(); i++)
{
- if (mState.activeQuery[i].get() != NULL)
+ if (i->second.get() != NULL)
{
return gl::error(GL_INVALID_OPERATION);
}
}
- QueryType qType;
- switch (target)
- {
- case GL_ANY_SAMPLES_PASSED_EXT:
- qType = QUERY_ANY_SAMPLES_PASSED;
- break;
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
- qType = QUERY_ANY_SAMPLES_PASSED_CONSERVATIVE;
- break;
- default:
- ASSERT(false);
- return;
- }
-
Query *queryObject = getQuery(query, true, target);
// check that name was obtained with glGenQueries
@@ -1359,7 +1332,7 @@
}
// set query as active for specified target
- mState.activeQuery[qType].set(queryObject);
+ mState.activeQueries[target].set(queryObject);
// begin query
queryObject->begin();
@@ -1367,22 +1340,7 @@
void Context::endQuery(GLenum target)
{
- QueryType qType;
-
- switch (target)
- {
- case GL_ANY_SAMPLES_PASSED_EXT:
- qType = QUERY_ANY_SAMPLES_PASSED;
- break;
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
- qType = QUERY_ANY_SAMPLES_PASSED_CONSERVATIVE;
- break;
- default:
- ASSERT(false);
- return;
- }
-
- Query *queryObject = mState.activeQuery[qType].get();
+ Query *queryObject = mState.activeQueries[target].get();
if (queryObject == NULL)
{
@@ -1391,7 +1349,7 @@
queryObject->end();
- mState.activeQuery[qType].set(NULL);
+ mState.activeQueries[target].set(NULL);
}
void Context::setFramebufferZero(Framebuffer *buffer)