/**
- * Delete a query object. Called via ctx->Driver.DeleteQuery().
+ * Delete a query object. Called via ctx->Driver.DeleteQuery(), if not
+ * overwritten by driver. In the latter case, called from the driver
+ * after all driver-specific clean-up has been done.
* Not removed from hash table here.
+ *
+ * \param ctx GL context to wich query object belongs.
+ * \param q query object due to be deleted.
*/
-static void
+void
_mesa_delete_query(struct gl_context *ctx, struct gl_query_object *q)
{
free(q->Label);
static struct gl_query_object **
get_query_binding_point(struct gl_context *ctx, GLenum target, GLuint index)
{
-
- /* From GL_EXT_occlusion_query_boolean spec:
- *
- * "Accepted by the <target> parameter of BeginQueryEXT, EndQueryEXT,
- * and GetQueryivEXT:
- *
- * ANY_SAMPLES_PASSED_EXT 0x8C2F
- * ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A"
- */
- if ((_mesa_is_gles(ctx) && ctx->Version == 20) &&
- (target != GL_ANY_SAMPLES_PASSED &&
- target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE))
- return NULL;
-
switch (target) {
case GL_SAMPLES_PASSED:
if (_mesa_has_ARB_occlusion_query(ctx) ||
return NULL;
case GL_PRIMITIVES_GENERATED:
if (_mesa_has_EXT_transform_feedback(ctx) ||
+ _mesa_has_EXT_tessellation_shader(ctx) ||
_mesa_has_OES_geometry_shader(ctx))
return &ctx->Query.PrimitivesGenerated[index];
else
else
return NULL;
case GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW:
- if (ctx->Extensions.ARB_transform_feedback_overflow_query)
+ if (_mesa_has_ARB_transform_feedback_overflow_query(ctx))
return &ctx->Query.TransformFeedbackOverflow[index];
else
return NULL;
case GL_TRANSFORM_FEEDBACK_OVERFLOW:
- if (ctx->Extensions.ARB_transform_feedback_overflow_query)
+ if (_mesa_has_ARB_transform_feedback_overflow_query(ctx))
return &ctx->Query.TransformFeedbackOverflowAny;
else
return NULL;
}
if (target == GL_TIMESTAMP) {
- if (!ctx->Extensions.ARB_timer_query) {
+ if (!_mesa_has_ARB_timer_query(ctx) &&
+ !_mesa_has_EXT_disjoint_timer_query(ctx)) {
_mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryARB(target)");
return;
}
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) {
+ if (!_mesa_has_ARB_query_buffer_object(ctx)) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(not supported)", func);
return;
}
value = q->Result;
break;
case GL_QUERY_RESULT_NO_WAIT:
- if (!ctx->Extensions.ARB_query_buffer_object)
+ if (!_mesa_has_ARB_query_buffer_object(ctx))
goto invalid_enum;
ctx->Driver.CheckQuery(ctx, q);
if (!q->Ready)