From f3ca47d9f389404aa9c2098a865d0becc53cc189 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 12 Sep 2019 16:47:40 +0300 Subject: [PATCH] iris/query: Implement PIPE_QUERY_GPU_FINISHED Implementation is similar to radeonsi in 5f1cef76 Signed-off-by: Danylo Piliaiev Reviewed-by: Kenneth Graunke --- 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 139d952..a6e062d 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)) -- 2.7.4