radeonsi: expose the number of decompress calls to the HUD
authorMarek Olšák <marek.olsak@amd.com>
Fri, 4 Aug 2017 13:26:55 +0000 (15:26 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 7 Aug 2017 19:12:24 +0000 (21:12 +0200)
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_pipe_common.h
src/gallium/drivers/radeon/r600_query.c
src/gallium/drivers/radeon/r600_query.h
src/gallium/drivers/radeonsi/si_state_draw.c

index 91058753456e67ce67ee5c120c4f934373697d74..67b3c874f4de3137b390be2f11e366d0213f8166 100644 (file)
@@ -595,6 +595,7 @@ struct r600_common_context {
        unsigned                        num_cs_dw_queries_suspend;
        /* Misc stats. */
        unsigned                        num_draw_calls;
+       unsigned                        num_decompress_calls;
        unsigned                        num_mrt_draw_calls;
        unsigned                        num_prim_restart_calls;
        unsigned                        num_spill_draw_calls;
index 5f1f7128b4e750a9eaf9d2ad5be8689f75b009f3..03ea04d48f7c3dd05b05059f8542f85baf67bca2 100644 (file)
@@ -101,6 +101,9 @@ static bool r600_query_sw_begin(struct r600_common_context *rctx,
        case R600_QUERY_DRAW_CALLS:
                query->begin_result = rctx->num_draw_calls;
                break;
+       case R600_QUERY_DECOMPRESS_CALLS:
+               query->begin_result = rctx->num_decompress_calls;
+               break;
        case R600_QUERY_MRT_DRAW_CALLS:
                query->begin_result = rctx->num_mrt_draw_calls;
                break;
@@ -258,6 +261,9 @@ static bool r600_query_sw_end(struct r600_common_context *rctx,
        case R600_QUERY_DRAW_CALLS:
                query->end_result = rctx->num_draw_calls;
                break;
+       case R600_QUERY_DECOMPRESS_CALLS:
+               query->end_result = rctx->num_decompress_calls;
+               break;
        case R600_QUERY_MRT_DRAW_CALLS:
                query->end_result = rctx->num_mrt_draw_calls;
                break;
@@ -1992,6 +1998,7 @@ static struct pipe_driver_query_info r600_driver_query_list[] = {
        X("num-shaders-created",        NUM_SHADERS_CREATED,    UINT64, CUMULATIVE),
        X("num-shader-cache-hits",      NUM_SHADER_CACHE_HITS,  UINT64, CUMULATIVE),
        X("draw-calls",                 DRAW_CALLS,             UINT64, AVERAGE),
+       X("decompress-calls",           DECOMPRESS_CALLS,       UINT64, AVERAGE),
        X("MRT-draw-calls",             MRT_DRAW_CALLS,         UINT64, AVERAGE),
        X("prim-restart-calls",         PRIM_RESTART_CALLS,     UINT64, AVERAGE),
        X("spill-draw-calls",           SPILL_DRAW_CALLS,       UINT64, AVERAGE),
index ca27be5c6ea5d7a5448e180b611805b755e16b88..815dc7fc3c2e5f2f15691e85af475dac8caf7383 100644 (file)
@@ -42,6 +42,7 @@ struct r600_resource;
 
 enum {
        R600_QUERY_DRAW_CALLS = PIPE_QUERY_DRIVER_SPECIFIC,
+       R600_QUERY_DECOMPRESS_CALLS,
        R600_QUERY_MRT_DRAW_CALLS,
        R600_QUERY_PRIM_RESTART_CALLS,
        R600_QUERY_SPILL_DRAW_CALLS,
index 605dfdbd0a4897e0339c9e9c85cbd65b92495098..9df5b7a588644381c2b0dbb213a738348eeda770 100644 (file)
@@ -1394,13 +1394,17 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
                sctx->b.flags |= SI_CONTEXT_VGT_STREAMOUT_SYNC;
        }
 
-       sctx->b.num_draw_calls++;
-       if (sctx->framebuffer.state.nr_cbufs > 1)
-               sctx->b.num_mrt_draw_calls++;
-       if (info->primitive_restart)
-               sctx->b.num_prim_restart_calls++;
-       if (G_0286E8_WAVESIZE(sctx->spi_tmpring_size))
-               sctx->b.num_spill_draw_calls++;
+       if (unlikely(sctx->decompression_enabled)) {
+               sctx->b.num_decompress_calls++;
+       } else {
+               sctx->b.num_draw_calls++;
+               if (sctx->framebuffer.state.nr_cbufs > 1)
+                       sctx->b.num_mrt_draw_calls++;
+               if (info->primitive_restart)
+                       sctx->b.num_prim_restart_calls++;
+               if (G_0286E8_WAVESIZE(sctx->spi_tmpring_size))
+                       sctx->b.num_spill_draw_calls++;
+       }
        if (index_size && indexbuf != info->index.resource)
                pipe_resource_reference(&indexbuf, NULL);
 }