zink: reset query on-demand when beginning a new query from resume
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 20 May 2020 13:53:45 +0000 (09:53 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 22 May 2020 13:24:10 +0000 (13:24 +0000)
the current query pool implementation expects queries to be reset at
the time they're initiated, which means queries started at this point
need to also be explicitly reset

the zink_begin_query() function can't be reused here or else the
query will be double-added to the active list, triggering an infinite loop

ref mesa/mesa#3000

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5120>

src/gallium/drivers/zink/zink_query.c

index 8f06256bf5b0a76a614e057ffca2badfda4b7515..b5b37cff259a60bfb44f67e2f4f8c224897e84c3 100644 (file)
@@ -244,6 +244,7 @@ zink_resume_queries(struct zink_context *ctx, struct zink_batch *batch)
 {
    struct zink_query *query;
    LIST_FOR_EACH_ENTRY(query, &ctx->active_queries, active_list) {
+      vkCmdResetQueryPool(batch->cmdbuf, query->query_pool, query->curr_query, 1);
       begin_query(ctx, query);
    }
 }