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