[Mesa-dev] [PATCH 1/4] mesa: Add constants for the GL_QUERY_COUNTER_BITS per target.

Brian Paul brianp at vmware.com
Thu Aug 23 13:35:34 PDT 2012


On 08/23/2012 02:22 PM, Eric Anholt wrote:
> Drivers need to be able to communicate their actual number of bits populated
> in the field in order for applications to be able to properly handle rollover.
>
> There's a small behavior change here: Instead of reporting the
> GL_SAMPLES_PASSED bits for GL_ANY_SAMPLES_PASSED (which would also be valid),
> just return 1, because more bits don't make any sense.
> ---
>   src/mesa/main/mtypes.h   |    8 ++++++++
>   src/mesa/main/queryobj.c |   37 ++++++++++++++++++++++++++++++++++++-
>   2 files changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 8fcb6b4..40b8860 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -2821,6 +2821,14 @@ struct gl_constants
>      GLuint MaxProgramMatrices;
>      GLuint MaxProgramMatrixStackDepth;
>
> +   struct {
> +      GLuint SamplesPassed;
> +      GLuint TimeElapsed;
> +      GLuint Timestamp;
> +      GLuint PrimitivesGenerated;
> +      GLuint PrimitivesWritten;
> +   } QueryCounterBits;
> +
>      /** vertex array / buffer object bounds checking */
>      GLboolean CheckArrayBounds;
>
> diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
> index 4492a17..6f5c79a 100644
> --- a/src/mesa/main/queryobj.c
> +++ b/src/mesa/main/queryobj.c
> @@ -482,7 +482,36 @@ _mesa_GetQueryIndexediv(GLenum target, GLuint index, GLenum pname,
>
>      switch (pname) {
>         case GL_QUERY_COUNTER_BITS_ARB:
> -         *params = 8 * sizeof(q->Result);
> +         switch (target) {
> +         case GL_SAMPLES_PASSED:
> +            *params = ctx->Const.QueryCounterBits.SamplesPassed;
> +            break;
> +         case GL_ANY_SAMPLES_PASSED:
> +            /* 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_TIME_ELAPSED:
> +            *params = ctx->Const.QueryCounterBits.TimeElapsed;
> +            break;
> +         case GL_TIMESTAMP:
> +            *params = ctx->Const.QueryCounterBits.Timestamp;
> +            break;
> +         case GL_PRIMITIVES_GENERATED:
> +            *params = ctx->Const.QueryCounterBits.PrimitivesGenerated;
> +            break;
> +         case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
> +            *params = ctx->Const.QueryCounterBits.PrimitivesWritten;
> +            break;
> +         default:
> +            _mesa_problem(ctx,
> +                          "Unknown target in glGetQueryIndexediv(target = %s",

Missing closing ')' in the string.


> +                          _mesa_lookup_enum_by_nr(target));
> +            *params = 0;
> +            break;
> +         }
>            break;
>         case GL_CURRENT_QUERY_ARB:
>            *params = q ? q->Id : 0;
> @@ -716,6 +745,12 @@ _mesa_init_queryobj(struct gl_context *ctx)
>   {
>      ctx->Query.QueryObjects = _mesa_NewHashTable();
>      ctx->Query.CurrentOcclusionObject = NULL;
> +
> +   ctx->Const.QueryCounterBits.SamplesPassed = 64;
> +   ctx->Const.QueryCounterBits.TimeElapsed = 64;
> +   ctx->Const.QueryCounterBits.Timestamp = 64;
> +   ctx->Const.QueryCounterBits.PrimitivesGenerated = 64;
> +   ctx->Const.QueryCounterBits.PrimitivesWritten = 64;
>   }

Otherwise LGTM.  I'll let someone else review the i965 patches.

Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list