[Mesa-dev] [PATCH v2 06/11] mesa: add core implementation of ARB_query_buffer_object

Marek Olšák maraeo at gmail.com
Wed Feb 3 10:22:16 UTC 2016


On Sun, Jan 31, 2016 at 9:31 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> Forwards query result writes to drivers.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/mesa/main/queryobj.c | 280 ++++++++++++++++++++++-------------------------
>  1 file changed, 133 insertions(+), 147 deletions(-)
>
> diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
> index 9836685..92d8f9a 100644
> --- a/src/mesa/main/queryobj.c
> +++ b/src/mesa/main/queryobj.c
> @@ -23,6 +23,7 @@
>   */
>
>
> +#include "bufferobj.h"
>  #include "glheader.h"
>  #include "context.h"
>  #include "enums.h"
> @@ -732,14 +733,16 @@ _mesa_GetQueryiv(GLenum target, GLenum pname, GLint *params)
>     _mesa_GetQueryIndexediv(target, 0, pname, params);
>  }
>
> -void GLAPIENTRY
> -_mesa_GetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
> +static void
> +get_query_object(struct gl_context *ctx, const char *func,
> +                 GLuint id, GLenum pname, GLenum ptype,
> +                 struct gl_buffer_object *buf, intptr_t offset)
>  {
>     struct gl_query_object *q = NULL;
> -   GET_CURRENT_CONTEXT(ctx);
> +   uint64_t value;
>
>     if (MESA_VERBOSE & VERBOSE_API)
> -      _mesa_debug(ctx, "glGetQueryObjectiv(%u, %s)\n", id,
> +      _mesa_debug(ctx, "%s(%u, %s)\n", func, id,
>                    _mesa_enum_to_string(pname));
>
>     if (id)
> @@ -747,96 +750,109 @@ _mesa_GetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
>
>     if (!q || q->Active || !q->EverBound) {
>        _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glGetQueryObjectivARB(id=%d is invalid or active)", id);
> +                  "%s(id=%d is invalid or active)", func, id);
>        return;
>     }
>
> -   switch (pname) {
> -      case GL_QUERY_RESULT_ARB:
> -         if (!q->Ready)
> -            ctx->Driver.WaitQuery(ctx, q);
> -         /* if result is too large for returned type, clamp to max value */
> -         if (q->Target == GL_ANY_SAMPLES_PASSED
> -             || q->Target == GL_ANY_SAMPLES_PASSED_CONSERVATIVE) {
> -            if (q->Result)
> -               *params = GL_TRUE;
> -            else
> -               *params = GL_FALSE;
> -         } else {
> -            if (q->Result > 0x7fffffff) {
> -               *params = 0x7fffffff;
> -            }
> -            else {
> -               *params = (GLint)q->Result;
> -            }
> -         }
> -         break;
> -      case GL_QUERY_RESULT_AVAILABLE_ARB:
> -         if (!q->Ready)
> -            ctx->Driver.CheckQuery( ctx, q );
> -         *params = q->Ready;
> -         break;
> +   if (buf && buf != ctx->Shared->NullBufferObj) {
> +      bool is_64bit = ptype == GL_INT64_ARB ||
> +         ptype == GL_UNSIGNED_INT64_ARB;
> +      if (!ctx->Extensions.ARB_query_buffer_object) {
> +         _mesa_error(ctx, GL_INVALID_OPERATION, func);

This causes:

main/queryobj.c: In function 'get_query_object':
main/queryobj.c:761:10: warning: format not a string literal and no
format arguments [-Wformat-security]

Marek


More information about the mesa-dev mailing list