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:
q->EverBound = GL_TRUE;
}
ids[i] = first + i;
- _mesa_HashInsert(ctx->Query.QueryObjects, first + i, q);
+ _mesa_HashInsertLocked(ctx->Query.QueryObjects, first + i, q);
}
}
}
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)",
q->Active = GL_FALSE;
ctx->Driver.EndQuery(ctx, q);
}
- _mesa_HashRemove(ctx->Query.QueryObjects, ids[i]);
+ _mesa_HashRemoveLocked(ctx->Query.QueryObjects, ids[i]);
ctx->Driver.DeleteQuery(ctx, q);
}
}
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)");
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glBeginQuery{Indexed}");
return;
}
- _mesa_HashInsert(ctx->Query.QueryObjects, id, q);
+ _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q);
}
}
else {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glQueryCounter");
return;
}
- _mesa_HashInsert(ctx->Query.QueryObjects, id, q);
+ _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q);
}
else {
if (q->Target && q->Target != GL_TIMESTAMP) {
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;
return;
}
+ if (offset < 0) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "%s(offset is negative)", func);
+ return;
+ }
+
switch (pname) {
case GL_QUERY_RESULT:
case GL_QUERY_RESULT_NO_WAIT: