Mesa (master): radeonsi: add SI_QUERY_TIME_ELAPSED_SDMA_SI for measuring DMA on SI

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 29 19:32:05 UTC 2018


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Tue Aug 21 00:46:53 2018 -0400

radeonsi: add SI_QUERY_TIME_ELAPSED_SDMA_SI for measuring DMA on SI

DMA on SI doesn't support the timestamp packet, so it's emulated.

---

 src/gallium/drivers/radeonsi/si_query.c | 19 +++++++++++++++++++
 src/gallium/drivers/radeonsi/si_query.h |  1 +
 2 files changed, 20 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_query.c b/src/gallium/drivers/radeonsi/si_query.c
index 93efbd4ef4..80e84c2393 100644
--- a/src/gallium/drivers/radeonsi/si_query.c
+++ b/src/gallium/drivers/radeonsi/si_query.c
@@ -92,6 +92,19 @@ static enum radeon_value_id winsys_id_from_type(unsigned type)
 	}
 }
 
+static int64_t si_finish_dma_get_cpu_time(struct si_context *sctx)
+{
+	struct pipe_fence_handle *fence = NULL;
+
+	si_flush_dma_cs(sctx, 0, &fence);
+	if (fence) {
+		sctx->ws->fence_wait(sctx->ws, fence, PIPE_TIMEOUT_INFINITE);
+		sctx->ws->fence_reference(&fence, NULL);
+	}
+
+	return os_time_get_nano();
+}
+
 static bool si_query_sw_begin(struct si_context *sctx,
 			      struct si_query *rquery)
 {
@@ -102,6 +115,9 @@ static bool si_query_sw_begin(struct si_context *sctx,
 	case PIPE_QUERY_TIMESTAMP_DISJOINT:
 	case PIPE_QUERY_GPU_FINISHED:
 		break;
+	case SI_QUERY_TIME_ELAPSED_SDMA_SI:
+		query->begin_result = si_finish_dma_get_cpu_time(sctx);
+		break;
 	case SI_QUERY_DRAW_CALLS:
 		query->begin_result = sctx->num_draw_calls;
 		break;
@@ -262,6 +278,9 @@ static bool si_query_sw_end(struct si_context *sctx,
 	case PIPE_QUERY_GPU_FINISHED:
 		sctx->b.flush(&sctx->b, &query->fence, PIPE_FLUSH_DEFERRED);
 		break;
+	case SI_QUERY_TIME_ELAPSED_SDMA_SI:
+		query->end_result = si_finish_dma_get_cpu_time(sctx);
+		break;
 	case SI_QUERY_DRAW_CALLS:
 		query->end_result = sctx->num_draw_calls;
 		break;
diff --git a/src/gallium/drivers/radeonsi/si_query.h b/src/gallium/drivers/radeonsi/si_query.h
index bc3eb397bc..cf2eccd862 100644
--- a/src/gallium/drivers/radeonsi/si_query.h
+++ b/src/gallium/drivers/radeonsi/si_query.h
@@ -110,6 +110,7 @@ enum {
 	SI_QUERY_GPIN_NUM_SPI,
 	SI_QUERY_GPIN_NUM_SE,
 	SI_QUERY_TIME_ELAPSED_SDMA,
+	SI_QUERY_TIME_ELAPSED_SDMA_SI, /* emulated, measured on the CPU */
 
 	SI_QUERY_FIRST_PERFCOUNTER = PIPE_QUERY_DRIVER_SPECIFIC + 100,
 };




More information about the mesa-commit mailing list