mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 01:30:08 +01:00
mesa: Track transform feedback overflow query objects.
Also update checks on conditional rendering. Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
273bab26af
commit
a80ebff1b9
3 changed files with 30 additions and 1 deletions
|
|
@ -99,7 +99,9 @@ _mesa_BeginConditionalRender(GLuint queryId, GLenum mode)
|
|||
*/
|
||||
if ((q->Target != GL_SAMPLES_PASSED &&
|
||||
q->Target != GL_ANY_SAMPLES_PASSED &&
|
||||
q->Target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE) || q->Active) {
|
||||
q->Target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE &&
|
||||
q->Target != GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB &&
|
||||
q->Target != GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB) || q->Active) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glBeginConditionalRender()");
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue