radeonsi: add SI_QUERY_TIME_ELAPSED_SDMA_SI for measuring DMA on SI
authorMarek Olšák <marek.olsak@amd.com>
Tue, 21 Aug 2018 04:46:53 +0000 (00:46 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 29 Aug 2018 19:31:42 +0000 (15:31 -0400)
DMA on SI doesn't support the timestamp packet, so it's emulated.

src/gallium/drivers/radeonsi/si_query.c
src/gallium/drivers/radeonsi/si_query.h

index 93efbd4ef4a1445a2fa9de89a3dd9cee2d3b4dac..80e84c23937a68f01c749b629df466d07964ca57 100644 (file)
@@ -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;
index bc3eb397bc559c42e3d5c262cb1895d9aed26abe..cf2eccd862b07f3cdbb8c3079324694246c96ace 100644 (file)
@@ -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,
 };