From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeon/r600_query.c | 12 ++++++++++++
 src/gallium/drivers/radeon/r600_query.h |  1 +
 2 files changed, 13 insertions(+)

diff --git a/src/gallium/drivers/radeon/r600_query.c 
b/src/gallium/drivers/radeon/r600_query.c
index 61fd662..0d960bc 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -163,20 +163,25 @@ static bool r600_query_sw_begin(struct 
r600_common_context *rctx,
        case R600_QUERY_NUM_EVICTIONS: {
                enum radeon_value_id ws_id = winsys_id_from_type(query->b.type);
                query->begin_result = rctx->ws->query_value(rctx->ws, ws_id);
                break;
        }
        case R600_QUERY_CS_THREAD_BUSY:
                ws_id = winsys_id_from_type(query->b.type);
                query->begin_result = rctx->ws->query_value(rctx->ws, ws_id);
                query->begin_time = os_time_get_nano();
                break;
+       case R600_QUERY_GALLIUM_THREAD_BUSY:
+               query->begin_result =
+                       rctx->tc ? 
util_queue_get_thread_time_nano(&rctx->tc->queue, 0) : 0;
+               query->begin_time = os_time_get_nano();
+               break;
        case R600_QUERY_GPU_LOAD:
        case R600_QUERY_GPU_SHADERS_BUSY:
        case R600_QUERY_GPU_TA_BUSY:
        case R600_QUERY_GPU_GDS_BUSY:
        case R600_QUERY_GPU_VGT_BUSY:
        case R600_QUERY_GPU_IA_BUSY:
        case R600_QUERY_GPU_SX_BUSY:
        case R600_QUERY_GPU_WD_BUSY:
        case R600_QUERY_GPU_BCI_BUSY:
        case R600_QUERY_GPU_SC_BUSY:
@@ -296,20 +301,25 @@ static bool r600_query_sw_end(struct r600_common_context 
*rctx,
        case R600_QUERY_NUM_EVICTIONS: {
                enum radeon_value_id ws_id = winsys_id_from_type(query->b.type);
                query->end_result = rctx->ws->query_value(rctx->ws, ws_id);
                break;
        }
        case R600_QUERY_CS_THREAD_BUSY:
                ws_id = winsys_id_from_type(query->b.type);
                query->end_result = rctx->ws->query_value(rctx->ws, ws_id);
                query->end_time = os_time_get_nano();
                break;
+       case R600_QUERY_GALLIUM_THREAD_BUSY:
+               query->end_result =
+                       rctx->tc ? 
util_queue_get_thread_time_nano(&rctx->tc->queue, 0) : 0;
+               query->end_time = os_time_get_nano();
+               break;
        case R600_QUERY_GPU_LOAD:
        case R600_QUERY_GPU_SHADERS_BUSY:
        case R600_QUERY_GPU_TA_BUSY:
        case R600_QUERY_GPU_GDS_BUSY:
        case R600_QUERY_GPU_VGT_BUSY:
        case R600_QUERY_GPU_IA_BUSY:
        case R600_QUERY_GPU_SX_BUSY:
        case R600_QUERY_GPU_WD_BUSY:
        case R600_QUERY_GPU_BCI_BUSY:
        case R600_QUERY_GPU_SC_BUSY:
@@ -373,20 +383,21 @@ static bool r600_query_sw_get_result(struct 
r600_common_context *rctx,
        case PIPE_QUERY_GPU_FINISHED: {
                struct pipe_screen *screen = rctx->b.screen;
                struct pipe_context *ctx = rquery->b.flushed ? NULL : &rctx->b;
 
                result->b = screen->fence_finish(screen, ctx, query->fence,
                                                 wait ? PIPE_TIMEOUT_INFINITE : 
0);
                return result->b;
        }
 
        case R600_QUERY_CS_THREAD_BUSY:
+       case R600_QUERY_GALLIUM_THREAD_BUSY:
                result->u64 = (query->end_result - query->begin_result) * 100 /
                              (query->end_time - query->begin_time);
                return true;
        case R600_QUERY_GPIN_ASIC_ID:
                result->u32 = 0;
                return true;
        case R600_QUERY_GPIN_NUM_SIMD:
                result->u32 = rctx->screen->info.num_good_compute_units;
                return true;
        case R600_QUERY_GPIN_NUM_RB:
@@ -1817,20 +1828,21 @@ static struct pipe_driver_query_info 
r600_driver_query_list[] = {
        X("num-vs-flushes",             NUM_VS_FLUSHES,         UINT64, 
AVERAGE),
        X("num-ps-flushes",             NUM_PS_FLUSHES,         UINT64, 
AVERAGE),
        X("num-cs-flushes",             NUM_CS_FLUSHES,         UINT64, 
AVERAGE),
        X("num-fb-cache-flushes",       NUM_FB_CACHE_FLUSHES,   UINT64, 
AVERAGE),
        X("num-L2-invalidates",         NUM_L2_INVALIDATES,     UINT64, 
AVERAGE),
        X("num-L2-writebacks",          NUM_L2_WRITEBACKS,      UINT64, 
AVERAGE),
        X("tc-offloaded-slots",         TC_OFFLOADED_SLOTS,     UINT64, 
AVERAGE),
        X("tc-direct-slots",            TC_DIRECT_SLOTS,        UINT64, 
AVERAGE),
        X("tc-num-syncs",               TC_NUM_SYNCS,           UINT64, 
AVERAGE),
        X("CS-thread-busy",             CS_THREAD_BUSY,         UINT64, 
AVERAGE),
+       X("gallium-thread-busy",        GALLIUM_THREAD_BUSY,    UINT64, 
AVERAGE),
        X("requested-VRAM",             REQUESTED_VRAM,         BYTES, AVERAGE),
        X("requested-GTT",              REQUESTED_GTT,          BYTES, AVERAGE),
        X("mapped-VRAM",                MAPPED_VRAM,            BYTES, AVERAGE),
        X("mapped-GTT",                 MAPPED_GTT,             BYTES, AVERAGE),
        X("buffer-wait-time",           BUFFER_WAIT_TIME,       MICROSECONDS, 
CUMULATIVE),
        X("num-mapped-buffers",         NUM_MAPPED_BUFFERS,     UINT64, 
AVERAGE),
        X("num-GFX-IBs",                NUM_GFX_IBS,            UINT64, 
AVERAGE),
        X("num-SDMA-IBs",               NUM_SDMA_IBS,           UINT64, 
AVERAGE),
        X("num-bytes-moved",            NUM_BYTES_MOVED,        BYTES, 
CUMULATIVE),
        X("num-evictions",              NUM_EVICTIONS,          UINT64, 
CUMULATIVE),
diff --git a/src/gallium/drivers/radeon/r600_query.h 
b/src/gallium/drivers/radeon/r600_query.h
index cf99d3a..9017fdf 100644
--- a/src/gallium/drivers/radeon/r600_query.h
+++ b/src/gallium/drivers/radeon/r600_query.h
@@ -51,20 +51,21 @@ enum {
        R600_QUERY_NUM_VS_FLUSHES,
        R600_QUERY_NUM_PS_FLUSHES,
        R600_QUERY_NUM_CS_FLUSHES,
        R600_QUERY_NUM_FB_CACHE_FLUSHES,
        R600_QUERY_NUM_L2_INVALIDATES,
        R600_QUERY_NUM_L2_WRITEBACKS,
        R600_QUERY_TC_OFFLOADED_SLOTS,
        R600_QUERY_TC_DIRECT_SLOTS,
        R600_QUERY_TC_NUM_SYNCS,
        R600_QUERY_CS_THREAD_BUSY,
+       R600_QUERY_GALLIUM_THREAD_BUSY,
        R600_QUERY_REQUESTED_VRAM,
        R600_QUERY_REQUESTED_GTT,
        R600_QUERY_MAPPED_VRAM,
        R600_QUERY_MAPPED_GTT,
        R600_QUERY_BUFFER_WAIT_TIME,
        R600_QUERY_NUM_MAPPED_BUFFERS,
        R600_QUERY_NUM_GFX_IBS,
        R600_QUERY_NUM_SDMA_IBS,
        R600_QUERY_NUM_BYTES_MOVED,
        R600_QUERY_NUM_EVICTIONS,
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to