Mesa (main): zink: implement PIPE_QUERY_GPU_FINISHED

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Aug 27 01:59:49 UTC 2021


Module: Mesa
Branch: main
Commit: b192b9c88a0c436ceed3c278ad292a2e677fb477
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b192b9c88a0c436ceed3c278ad292a2e677fb477

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu Jul 15 08:33:23 2021 -0400

zink: implement PIPE_QUERY_GPU_FINISHED

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12573>

---

 src/gallium/drivers/zink/zink_query.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_query.c b/src/gallium/drivers/zink/zink_query.c
index cdfb15f3c50..4f1e9ddec37 100644
--- a/src/gallium/drivers/zink/zink_query.c
+++ b/src/gallium/drivers/zink/zink_query.c
@@ -49,7 +49,10 @@ struct zink_query {
    struct zink_batch_usage *batch_id; //batch that the query was started in
 
    struct list_head buffers;
-   struct zink_query_buffer *curr_qbo;
+   union {
+      struct zink_query_buffer *curr_qbo;
+      struct pipe_fence_handle *fence; //PIPE_QUERY_GPU_FINISHED
+   };
 
    struct zink_resource *predicate;
    bool predicate_dirty;
@@ -280,6 +283,8 @@ zink_create_query(struct pipe_context *pctx,
 
    query->index = index;
    query->type = query_type;
+   if (query->type == PIPE_QUERY_GPU_FINISHED)
+      return (struct pipe_query *)query;
    query->vkqtype = convert_query_type(query_type, &query->precise);
    if (query->vkqtype == -1)
       return NULL;
@@ -759,6 +764,11 @@ zink_end_query(struct pipe_context *pctx,
    struct zink_query *query = (struct zink_query *)q;
    struct zink_batch *batch = &ctx->batch;
 
+   if (query->type == PIPE_QUERY_GPU_FINISHED) {
+      pctx->flush(pctx, &query->fence, PIPE_FLUSH_DEFERRED);
+      return true;
+   }
+
    /* FIXME: this can be called from a thread, but it needs to write to the cmdbuf */
    threaded_context_unwrap_sync(pctx);
 
@@ -779,6 +789,14 @@ zink_get_query_result(struct pipe_context *pctx,
    struct zink_query *query = (void*)q;
    struct zink_context *ctx = zink_context(pctx);
 
+   if (query->type == PIPE_QUERY_GPU_FINISHED) {
+      struct pipe_screen *screen = pctx->screen;
+
+      result->b = screen->fence_finish(screen, query->base.flushed ? NULL : pctx,
+                                        query->fence, wait ? PIPE_TIMEOUT_INFINITE : 0);
+      return result->b;
+   }
+
    if (query->needs_update)
       update_qbo(ctx, query);
 



More information about the mesa-commit mailing list