aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Antognolli <[email protected]>2017-01-20 09:53:23 -0800
committerKenneth Graunke <[email protected]>2017-02-21 16:28:31 -0800
commita80ebff1b9954173308b35cd1d6c73c8366522c0 (patch)
tree80280540051803329fa67e52958c0b7287603967
parent273bab26af543535d34b5e8accfd20c9314debde (diff)
mesa: Track transform feedback overflow query objects.
Also update checks on conditional rendering. Signed-off-by: Rafael Antognolli <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/main/condrender.c4
-rw-r--r--src/mesa/main/queryobj.c21
-rw-r--r--src/mesa/state_tracker/st_cb_queryobj.c6
3 files changed, 30 insertions, 1 deletions
diff --git a/src/mesa/main/condrender.c b/src/mesa/main/condrender.c
index 46c6036d2a5..2ea2c8821d8 100644
--- a/src/mesa/main/condrender.c
+++ b/src/mesa/main/condrender.c
@@ -99,7 +99,9 @@ _mesa_BeginConditionalRender(GLuint queryId, GLenum mode)
*/
if ((q->Target != GL_SAMPLES_PASSED &&
q->Target != GL_ANY_SAMPLES_PASSED &&
- q->Target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE) || q->Active) {
+ q->Target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE &&
+ q->Target != GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB &&
+ q->Target != GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB) || q->Active) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glBeginConditionalRender()");
return;
}
diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
index 1fa02795c1c..e4edb519344 100644
--- a/src/mesa/main/queryobj.c
+++ b/src/mesa/main/queryobj.c
@@ -197,6 +197,16 @@ get_query_binding_point(struct gl_context *ctx, GLenum target, GLuint index)
return &ctx->Query.PrimitivesWritten[index];
else
return NULL;
+ case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB:
+ if (ctx->Extensions.ARB_transform_feedback_overflow_query)
+ return &ctx->Query.TransformFeedbackOverflow[index];
+ else
+ return NULL;
+ case GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB:
+ if (ctx->Extensions.ARB_transform_feedback_overflow_query)
+ return &ctx->Query.TransformFeedbackOverflowAny;
+ else
+ return NULL;
case GL_VERTICES_SUBMITTED_ARB:
case GL_PRIMITIVES_SUBMITTED_ARB:
@@ -293,6 +303,8 @@ _mesa_CreateQueries(GLenum target, GLsizei n, GLuint *ids)
case GL_TIMESTAMP:
case GL_PRIMITIVES_GENERATED:
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB:
+ case GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB:
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glCreateQueries(invalid target = %s)",
@@ -368,6 +380,7 @@ query_error_check_index(struct gl_context *ctx, GLenum target, GLuint index)
switch (target) {
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
case GL_PRIMITIVES_GENERATED:
+ case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB:
if (index >= ctx->Const.MaxVertexStreams) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glBeginQueryIndexed(index>=MaxVertexStreams)");
@@ -677,6 +690,14 @@ _mesa_GetQueryIndexediv(GLenum target, GLuint index, GLenum pname,
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
*params = ctx->Const.QueryCounterBits.PrimitivesWritten;
break;
+ case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB:
+ case GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB:
+ /* The minimum value of this is 1 if it's nonzero, and the value
+ * is only ever GL_TRUE or GL_FALSE, so no sense in reporting more
+ * bits.
+ */
+ *params = 1;
+ break;
case GL_VERTICES_SUBMITTED_ARB:
*params = ctx->Const.QueryCounterBits.VerticesSubmitted;
break;
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index 24896762340..b1ac2aab6da 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -114,6 +114,12 @@ st_BeginQuery(struct gl_context *ctx, struct gl_query_object *q)
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
type = PIPE_QUERY_PRIMITIVES_EMITTED;
break;
+ case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB:
+ type = PIPE_QUERY_SO_OVERFLOW_PREDICATE;
+ break;
+ case GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB:
+ type = PIPE_QUERY_SO_OVERFLOW_PREDICATE;
+ break;
case GL_TIME_ELAPSED:
if (st->has_time_elapsed)
type = PIPE_QUERY_TIME_ELAPSED;