[Mesa-dev] [RFC 1/6] mesa: Add types for ARB_transform_feedback_oveflow_query.

Rafael Antognolli rafael.antognolli at intel.com
Mon Dec 5 19:15:17 UTC 2016


On Mon, Dec 05, 2016 at 11:01:54AM -0800, Ian Romanick wrote:
> Aside from my comments on patch 5, you're missing some changes to
> _mesa_BeginConditionalRender.  See
> https://cgit.freedesktop.org/~idr/mesa/commit/?h=ARB_transform_feedback_overflow_query&id=c17cf16caa18e44f9d53e05a7279066f8cc2f33c.

I did it on patch #4, but yes, it should have been merged with this
patch. Will do it on next iteration.

> On 12/05/2016 10:16 AM, Rafael Antognolli wrote:
> > Add some basic types and storage for the queries of this extension.
> > 
> > Signed-off-by: Rafael Antognolli <rafael.antognolli at intel.com>
> > ---
> >  src/mesa/main/mtypes.h                  |  5 +++++
> >  src/mesa/main/queryobj.c                | 21 +++++++++++++++++++++
> >  src/mesa/state_tracker/st_cb_queryobj.c |  6 ++++++
> >  3 files changed, 32 insertions(+)
> > 
> > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> > index 459725b..dd6393d 100644
> > --- a/src/mesa/main/mtypes.h
> > +++ b/src/mesa/main/mtypes.h
> > @@ -3001,6 +3001,10 @@ struct gl_query_state
> >     struct gl_query_object *PrimitivesGenerated[MAX_VERTEX_STREAMS];
> >     struct gl_query_object *PrimitivesWritten[MAX_VERTEX_STREAMS];
> >  
> > +   /** GL_ARB_transform_feedback_overflow_query */
> > +   struct gl_query_object *TransformFeedbackOverflow[MAX_VERTEX_STREAMS];
> > +   struct gl_query_object *TransformFeedbackOverflowAny;
> > +
> >     /** GL_ARB_timer_query */
> >     struct gl_query_object *TimeElapsed;
> >  
> > @@ -3870,6 +3874,7 @@ struct gl_extensions
> >     GLboolean ARB_transform_feedback2;
> >     GLboolean ARB_transform_feedback3;
> >     GLboolean ARB_transform_feedback_instanced;
> > +   GLboolean ARB_transform_feedback_overflow_query;
> >     GLboolean ARB_uniform_buffer_object;
> >     GLboolean ARB_vertex_attrib_64bit;
> >     GLboolean ARB_vertex_program;
> > diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
> > index 1fa0279..e4edb51 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 2489676..b1ac2aa 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;
> > 
> 


More information about the mesa-dev mailing list