main: Added entry point for glCreateQueries
v2: - display the name of the target instead of its id (Laura) Reviewed-by: Laura Ekstrand <laura@jlekstrand.net> Signed-off-by: Martin Peres <martin.peres@linux.intel.com>
This commit is contained in:
@@ -420,5 +420,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>
|
||||
|
||||
@@ -233,18 +233,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;
|
||||
}
|
||||
|
||||
@@ -255,8 +259,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);
|
||||
@@ -264,6 +272,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 = %s)",
|
||||
_mesa_lookup_enum_by_nr(target));
|
||||
return;
|
||||
}
|
||||
|
||||
create_queries(ctx, target, n, ids, true);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_DeleteQueries(GLsizei n, const GLuint *ids)
|
||||
@@ -424,6 +462,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;
|
||||
@@ -541,6 +591,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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -976,6 +976,7 @@ const struct function gl_core_functions_possible[] = {
|
||||
{ "glTextureStorage3DMultisample", 45, -1 },
|
||||
{ "glTextureBuffer", 45, -1 },
|
||||
{ "glTextureBufferRange", 45, -1 },
|
||||
{ "glCreateQueries", 45, -1 },
|
||||
|
||||
/* GL_EXT_polygon_offset_clamp */
|
||||
{ "glPolygonOffsetClampEXT", 11, -1 },
|
||||
|
||||
Reference in New Issue
Block a user