[Mesa-dev] [PATCH 10/16] main: Added entry point for glCreateQueries
Martin Peres
martin.peres at linux.intel.com
Thu Mar 19 09:35:37 PDT 2015
On 27/02/15 01:20, Laura Ekstrand wrote:
>
>
> On Mon, Feb 16, 2015 at 6:14 AM, Martin Peres
> <martin.peres at linux.intel.com <mailto:martin.peres at linux.intel.com>>
> wrote:
>
> Signed-off-by: Martin Peres <martin.peres at linux.intel.com
> <mailto:martin.peres at linux.intel.com>>
> ---
> src/mapi/glapi/gen/ARB_direct_state_access.xml | 8 +++
> src/mesa/main/queryobj.c | 76
> +++++++++++++++++++++++---
> src/mesa/main/queryobj.h | 2 +
> src/mesa/main/tests/dispatch_sanity.cpp | 1 +
> 4 files changed, 80 insertions(+), 7 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 340dbba..652e8bc 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -308,5 +308,13 @@
> <param name="params" type="GLint *" />
> </function>
>
> + <!-- Query object functions -->
> +
> + <function name="CreateQueries" offset="assign">
> + <param name="target" type="GLenum" />
> + <param name="n" type="GLsizei" />
> + <param name="ids" type="GLuint *" />
> + </function>
> +
> </category>
> </OpenGLAPI>
> diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
> index 17eaaac..1bb74c9 100644
> --- a/src/mesa/main/queryobj.c
> +++ b/src/mesa/main/queryobj.c
> @@ -188,18 +188,22 @@ get_query_binding_point(struct gl_context
> *ctx, GLenum target, GLuint index)
> }
> }
>
> -
> -void GLAPIENTRY
> -_mesa_GenQueries(GLsizei n, GLuint *ids)
> +/**
> + * Create $n query objects and store them in *ids. Make them of
> type $target
> + * if dsa is set. Called from _mesa_GenQueries() and
> _mesa_CreateQueries().
> + */
> +static void
> +create_queries(struct gl_context *ctx, GLenum target, GLsizei n,
> GLuint *ids,
> + bool dsa)
> {
> + const char *func = dsa ? "glGenQueries" : "glCreateQueries";
> GLuint first;
> - GET_CURRENT_CONTEXT(ctx);
>
> if (MESA_VERBOSE & VERBOSE_API)
> - _mesa_debug(ctx, "glGenQueries(%d)\n", n);
> + _mesa_debug(ctx, "%s(%d)\n", func, n);
>
> if (n < 0) {
> - _mesa_error(ctx, GL_INVALID_VALUE, "glGenQueriesARB(n < 0)");
> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);
> return;
> }
>
> @@ -210,8 +214,12 @@ _mesa_GenQueries(GLsizei n, GLuint *ids)
> struct gl_query_object *q
> = ctx->Driver.NewQueryObject(ctx, first + i);
> if (!q) {
> - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenQueriesARB");
> + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
> return;
> + } else if (dsa) {
> + /* Do the equivalent of binding the buffer with a
> target */
> + q->Target = target;
> + q->EverBound = GL_TRUE;
> }
> ids[i] = first + i;
> _mesa_HashInsert(ctx->Query.QueryObjects, first + i, q);
> @@ -219,6 +227,36 @@ _mesa_GenQueries(GLsizei n, GLuint *ids)
> }
> }
>
> +void GLAPIENTRY
> +_mesa_GenQueries(GLsizei n, GLuint *ids)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> + create_queries(ctx, 0, n, ids, false);
> +}
> +
> +void GLAPIENTRY
> +_mesa_CreateQueries(GLenum target, GLsizei n, GLuint *ids)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + switch (target) {
> + case GL_SAMPLES_PASSED:
> + case GL_ANY_SAMPLES_PASSED:
> + case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
> + case GL_TIME_ELAPSED:
> + case GL_TIMESTAMP:
> + case GL_PRIMITIVES_GENERATED:
> + case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
> + break;
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM, "glCreateQueries(invalid
> target = %i)",
> + target);
>
> I think it would be nicer to have "invalid target = %s",
> _mesa_lookup_enum_by_nr(target) in your error message, because
> otherwise the user might have to go looking through Mesa to find out
> which incorrect target they passed. For example, not everyone knows
> that 3553 = GL_TEXTURE_2D. (Although I do, for some sick reason :))
Indeed, this is much nicer like that! However, why do you know that
GL_TEXTURE_2D == 3553? Isn't it the point of enums not to have to care
about this? :D
>
> + return;
> + }
> +
> + create_queries(ctx, target, n, ids, true);
> +}
> +
>
> void GLAPIENTRY
> _mesa_DeleteQueries(GLsizei n, const GLuint *ids)
> @@ -363,6 +401,18 @@ _mesa_BeginQueryIndexed(GLenum target, GLuint
> index, GLuint id)
> }
> }
>
> + /* This possibly changes the target of a buffer allocated by
> + * CreateQueries. Issue 39) in the ARB_direct_state_access
> extension states
> + * the following:
> + *
> + * "CreateQueries adds a <target>, so strictly speaking the
> <target>
> + * command isn't needed for BeginQuery/EndQuery, but in the
> end, this also
> + * isn't a selector, so we decided not to change it."
> + *
> + * Updating the target of the query object should be
> acceptable, so let's
> + * do that.
> + */
> +
> q->Target = target;
> q->Active = GL_TRUE;
> q->Result = 0;
> @@ -480,6 +530,18 @@ _mesa_QueryCounter(GLuint id, GLenum target)
> return;
> }
>
> + /* This possibly changes the target of a buffer allocated by
> + * CreateQueries. Issue 39) in the ARB_direct_state_access
> extension states
> + * the following:
> + *
> + * "CreateQueries adds a <target>, so strictly speaking the
> <target>
> + * command isn't needed for BeginQuery/EndQuery, but in the
> end, this also
> + * isn't a selector, so we decided not to change it."
> + *
> + * Updating the target of the query object should be
> acceptable, so let's
> + * do that.
> + */
> +
> q->Target = target;
> q->Result = 0;
> q->Ready = GL_FALSE;
> diff --git a/src/mesa/main/queryobj.h b/src/mesa/main/queryobj.h
> index 6cbcabd..431d420 100644
> --- a/src/mesa/main/queryobj.h
> +++ b/src/mesa/main/queryobj.h
> @@ -51,6 +51,8 @@ _mesa_free_queryobj_data(struct gl_context *ctx);
> void GLAPIENTRY
> _mesa_GenQueries(GLsizei n, GLuint *ids);
> void GLAPIENTRY
> +_mesa_CreateQueries(GLenum target, GLsizei n, GLuint *ids);
> +void GLAPIENTRY
> _mesa_DeleteQueries(GLsizei n, const GLuint *ids);
> GLboolean GLAPIENTRY
> _mesa_IsQuery(GLuint id);
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp
> b/src/mesa/main/tests/dispatch_sanity.cpp
> index ad5da83..ee448f1 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -993,6 +993,7 @@ const struct function
> gl_core_functions_possible[] = {
> { "glTextureStorage2DMultisample", 45, -1 },
> { "glTextureStorage3DMultisample", 45, -1 },
> { "glTextureBuffer", 45, -1 },
> + { "glCreateQueries", 45, -1 },
>
> /* GL_EXT_polygon_offset_clamp */
> { "glPolygonOffsetClampEXT", 11, -1 },
> --
> 2.3.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
> Otherwise, looks good to me.
>
> Reviewed-by: Laura Ekstrand <laura at jlekstrand.net
> <mailto:laura at jlekstrand.net>>
>
More information about the mesa-dev
mailing list