gallium/radeon: add a new HUD query for the number of resident handles
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 14 Jun 2017 09:40:59 +0000 (11:40 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Sun, 18 Jun 2017 12:08:08 +0000 (14:08 +0200)
Useful for debugging performance issues when ARB_bindless_texture
is enabled. This query doesn't make a distinction between texture
and image handles.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@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_descriptors.c

index 45ed5ba..006b795 100644 (file)
@@ -598,6 +598,7 @@ struct r600_common_context {
        unsigned                        num_fb_cache_flushes;
        unsigned                        num_L2_invalidates;
        unsigned                        num_L2_writebacks;
+       unsigned                        num_resident_handles;
        uint64_t                        num_alloc_tex_transfer_bytes;
        unsigned                        last_tex_ps_draw_ratio; /* for query */
 
index bce4317..8bd94e6 100644 (file)
@@ -134,6 +134,9 @@ static bool r600_query_sw_begin(struct r600_common_context *rctx,
        case R600_QUERY_NUM_L2_WRITEBACKS:
                query->begin_result = rctx->num_L2_writebacks;
                break;
+       case R600_QUERY_NUM_RESIDENT_HANDLES:
+               query->begin_result = rctx->num_resident_handles;
+               break;
        case R600_QUERY_TC_OFFLOADED_SLOTS:
                query->begin_result = rctx->tc ? rctx->tc->num_offloaded_slots : 0;
                break;
@@ -276,6 +279,9 @@ static bool r600_query_sw_end(struct r600_common_context *rctx,
        case R600_QUERY_NUM_L2_WRITEBACKS:
                query->end_result = rctx->num_L2_writebacks;
                break;
+       case R600_QUERY_NUM_RESIDENT_HANDLES:
+               query->end_result = rctx->num_resident_handles;
+               break;
        case R600_QUERY_TC_OFFLOADED_SLOTS:
                query->end_result = rctx->tc ? rctx->tc->num_offloaded_slots : 0;
                break;
@@ -1834,6 +1840,7 @@ static struct pipe_driver_query_info r600_driver_query_list[] = {
        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("num-resident-handles",       NUM_RESIDENT_HANDLES,   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),
index ed607ec..9e6617f 100644 (file)
@@ -54,6 +54,7 @@ enum {
        R600_QUERY_NUM_FB_CACHE_FLUSHES,
        R600_QUERY_NUM_L2_INVALIDATES,
        R600_QUERY_NUM_L2_WRITEBACKS,
+       R600_QUERY_NUM_RESIDENT_HANDLES,
        R600_QUERY_TC_OFFLOADED_SLOTS,
        R600_QUERY_TC_DIRECT_SLOTS,
        R600_QUERY_TC_NUM_SYNCS,
index 375bcae..41f6e05 100644 (file)
@@ -2595,6 +2595,9 @@ void si_all_resident_buffers_begin_new_cs(struct si_context *sctx)
                                           RADEON_USAGE_READWRITE,
                                           false, false);
        }
+
+       sctx->b.num_resident_handles += num_resident_tex_handles +
+                                       num_resident_img_handles;
 }
 
 /* INIT/DEINIT/UPLOAD */