Mesa (master): iris/query: Implement PIPE_QUERY_GPU_FINISHED

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jan 6 11:11:12 UTC 2020


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

Author: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
Date:   Thu Sep 12 16:47:40 2019 +0300

iris/query: Implement PIPE_QUERY_GPU_FINISHED

Implementation is similar to radeonsi in 5f1cef76

Signed-off-by: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/gallium/drivers/iris/iris_query.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/gallium/drivers/iris/iris_query.c b/src/gallium/drivers/iris/iris_query.c
index 139d9521a66..a6e062ded0f 100644
--- a/src/gallium/drivers/iris/iris_query.c
+++ b/src/gallium/drivers/iris/iris_query.c
@@ -69,6 +69,9 @@ struct iris_query {
    int batch_idx;
 
    struct iris_monitor_object *monitor;
+
+   /* Fence for PIPE_QUERY_GPU_FINISHED. */
+   struct pipe_fence_handle *fence;
 };
 
 struct iris_query_snapshots {
@@ -480,6 +483,7 @@ iris_destroy_query(struct pipe_context *ctx, struct pipe_query *p_query)
       query->monitor = NULL;
    } else {
       iris_syncpt_reference(screen, &query->syncpt, NULL);
+      screen->base.fence_reference(ctx->screen, &query->fence, NULL);
    }
    free(query);
 }
@@ -543,6 +547,11 @@ iris_end_query(struct pipe_context *ctx, struct pipe_query *query)
    if (q->monitor)
       return iris_end_monitor(ctx, q->monitor);
 
+   if (q->type == PIPE_QUERY_GPU_FINISHED) {
+      ctx->flush(ctx, &q->fence, PIPE_FLUSH_DEFERRED);
+      return true;
+   }
+
    struct iris_batch *batch = &ice->batches[q->batch_idx];
 
    if (q->type == PIPE_QUERY_TIMESTAMP) {
@@ -606,6 +615,14 @@ iris_get_query_result(struct pipe_context *ctx,
       return true;
    }
 
+   if (q->type == PIPE_QUERY_GPU_FINISHED) {
+      struct pipe_screen *screen = ctx->screen;
+
+      result->b = screen->fence_finish(screen, ctx, q->fence,
+                                       wait ? PIPE_TIMEOUT_INFINITE : 0);
+      return result->b;
+   }
+
    if (!q->ready) {
       struct iris_batch *batch = &ice->batches[q->batch_idx];
       if (q->syncpt == iris_batch_get_signal_syncpt(batch))




More information about the mesa-commit mailing list