Patch 1-7 of this series are Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
- Bas (Adding mesa-dev ML this time) On Thu, Aug 18, 2016 at 9:46 PM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > If the kernel driver doesn't support it, it returns 0. > --- > src/gallium/drivers/radeon/r600_query.c | 8 ++++++-- > src/gallium/drivers/radeon/r600_query.h | 1 + > src/gallium/drivers/radeon/radeon_winsys.h | 1 + > src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 7 +++++++ > src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 ++ > 5 files changed, 17 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/radeon/r600_query.c > b/src/gallium/drivers/radeon/r600_query.c > index 5825e8b..bd0a906 100644 > --- a/src/gallium/drivers/radeon/r600_query.c > +++ b/src/gallium/drivers/radeon/r600_query.c > @@ -49,20 +49,21 @@ static void r600_query_sw_destroy(struct > r600_common_context *rctx, > static enum radeon_value_id winsys_id_from_type(unsigned type) > { > switch (type) { > case R600_QUERY_REQUESTED_VRAM: return RADEON_REQUESTED_VRAM_MEMORY; > case R600_QUERY_REQUESTED_GTT: return RADEON_REQUESTED_GTT_MEMORY; > case R600_QUERY_MAPPED_VRAM: return RADEON_MAPPED_VRAM; > case R600_QUERY_MAPPED_GTT: return RADEON_MAPPED_GTT; > case R600_QUERY_BUFFER_WAIT_TIME: return RADEON_BUFFER_WAIT_TIME_NS; > case R600_QUERY_NUM_CS_FLUSHES: return RADEON_NUM_CS_FLUSHES; > case R600_QUERY_NUM_BYTES_MOVED: return RADEON_NUM_BYTES_MOVED; > + case R600_QUERY_NUM_EVICTIONS: return RADEON_NUM_EVICTIONS; > case R600_QUERY_VRAM_USAGE: return RADEON_VRAM_USAGE; > case R600_QUERY_GTT_USAGE: return RADEON_GTT_USAGE; > case R600_QUERY_GPU_TEMPERATURE: return RADEON_GPU_TEMPERATURE; > case R600_QUERY_CURRENT_GPU_SCLK: return RADEON_CURRENT_SCLK; > case R600_QUERY_CURRENT_GPU_MCLK: return RADEON_CURRENT_MCLK; > default: unreachable("query type does not correspond to winsys id"); > } > } > > static bool r600_query_sw_begin(struct r600_common_context *rctx, > @@ -96,21 +97,22 @@ static bool r600_query_sw_begin(struct > r600_common_context *rctx, > case R600_QUERY_VRAM_USAGE: > case R600_QUERY_GTT_USAGE: > case R600_QUERY_GPU_TEMPERATURE: > case R600_QUERY_CURRENT_GPU_SCLK: > case R600_QUERY_CURRENT_GPU_MCLK: > case R600_QUERY_BACK_BUFFER_PS_DRAW_RATIO: > query->begin_result = 0; > break; > case R600_QUERY_BUFFER_WAIT_TIME: > case R600_QUERY_NUM_CS_FLUSHES: > - case R600_QUERY_NUM_BYTES_MOVED: { > + case R600_QUERY_NUM_BYTES_MOVED: > + 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_GPU_LOAD: > query->begin_result = r600_gpu_load_begin(rctx->screen); > break; > case R600_QUERY_NUM_COMPILATIONS: > query->begin_result = > p_atomic_read(&rctx->screen->num_compilations); > break; > @@ -160,21 +162,22 @@ static bool r600_query_sw_end(struct > r600_common_context *rctx, > case R600_QUERY_REQUESTED_GTT: > case R600_QUERY_MAPPED_VRAM: > case R600_QUERY_MAPPED_GTT: > case R600_QUERY_VRAM_USAGE: > case R600_QUERY_GTT_USAGE: > case R600_QUERY_GPU_TEMPERATURE: > case R600_QUERY_CURRENT_GPU_SCLK: > case R600_QUERY_CURRENT_GPU_MCLK: > case R600_QUERY_BUFFER_WAIT_TIME: > case R600_QUERY_NUM_CS_FLUSHES: > - case R600_QUERY_NUM_BYTES_MOVED: { > + case R600_QUERY_NUM_BYTES_MOVED: > + 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_GPU_LOAD: > query->end_result = r600_gpu_load_end(rctx->screen, > query->begin_result); > query->begin_result = 0; > break; > case R600_QUERY_NUM_COMPILATIONS: > @@ -1179,20 +1182,21 @@ static struct pipe_driver_query_info > r600_driver_query_list[] = { > X("compute-calls", COMPUTE_CALLS, UINT64, > AVERAGE), > X("spill-compute-calls", SPILL_COMPUTE_CALLS, UINT64, > AVERAGE), > X("dma-calls", DMA_CALLS, 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-cs-flushes", NUM_CS_FLUSHES, UINT64, > AVERAGE), > X("num-bytes-moved", NUM_BYTES_MOVED, BYTES, > CUMULATIVE), > + X("num-evictions", NUM_EVICTIONS, UINT64, > CUMULATIVE), > X("VRAM-usage", VRAM_USAGE, BYTES, > AVERAGE), > X("GTT-usage", GTT_USAGE, BYTES, > AVERAGE), > X("back-buffer-ps-draw-ratio", BACK_BUFFER_PS_DRAW_RATIO, UINT64, > AVERAGE), > > /* GPIN queries are for the benefit of old versions of GPUPerfStudio, > * which use it as a fallback path to detect the GPU type. > * > * Note: The names of these queries are significant for GPUPerfStudio > * (and possibly their order as well). */ > XG(GPIN, "GPIN_000", GPIN_ASIC_ID, UINT, > AVERAGE), > diff --git a/src/gallium/drivers/radeon/r600_query.h > b/src/gallium/drivers/radeon/r600_query.h > index 7aa684c..0bb7cdd 100644 > --- a/src/gallium/drivers/radeon/r600_query.h > +++ b/src/gallium/drivers/radeon/r600_query.h > @@ -46,20 +46,21 @@ enum { > R600_QUERY_COMPUTE_CALLS, > R600_QUERY_SPILL_COMPUTE_CALLS, > R600_QUERY_DMA_CALLS, > R600_QUERY_REQUESTED_VRAM, > R600_QUERY_REQUESTED_GTT, > R600_QUERY_MAPPED_VRAM, > R600_QUERY_MAPPED_GTT, > R600_QUERY_BUFFER_WAIT_TIME, > R600_QUERY_NUM_CS_FLUSHES, > R600_QUERY_NUM_BYTES_MOVED, > + R600_QUERY_NUM_EVICTIONS, > R600_QUERY_VRAM_USAGE, > R600_QUERY_GTT_USAGE, > R600_QUERY_GPU_TEMPERATURE, > R600_QUERY_CURRENT_GPU_SCLK, > R600_QUERY_CURRENT_GPU_MCLK, > R600_QUERY_GPU_LOAD, > R600_QUERY_NUM_COMPILATIONS, > R600_QUERY_NUM_SHADERS_CREATED, > R600_QUERY_BACK_BUFFER_PS_DRAW_RATIO, > R600_QUERY_GPIN_ASIC_ID, > diff --git a/src/gallium/drivers/radeon/radeon_winsys.h > b/src/gallium/drivers/radeon/radeon_winsys.h > index f4e3773..741dc99 100644 > --- a/src/gallium/drivers/radeon/radeon_winsys.h > +++ b/src/gallium/drivers/radeon/radeon_winsys.h > @@ -153,20 +153,21 @@ enum ring_type { > > enum radeon_value_id { > RADEON_REQUESTED_VRAM_MEMORY, > RADEON_REQUESTED_GTT_MEMORY, > RADEON_MAPPED_VRAM, > RADEON_MAPPED_GTT, > RADEON_BUFFER_WAIT_TIME_NS, > RADEON_TIMESTAMP, > RADEON_NUM_CS_FLUSHES, > RADEON_NUM_BYTES_MOVED, > + RADEON_NUM_EVICTIONS, > RADEON_VRAM_USAGE, > RADEON_GTT_USAGE, > RADEON_GPU_TEMPERATURE, /* DRM 2.42.0 */ > RADEON_CURRENT_SCLK, > RADEON_CURRENT_MCLK, > RADEON_GPU_RESET_COUNTER, /* DRM 2.43.0 */ > }; > > /* Each group of four has the same priority. */ > enum radeon_bo_priority { > diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c > b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c > index 9556777..d8aed8b 100644 > --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c > +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c > @@ -52,20 +52,24 @@ > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_16x16_8x16 8 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_16x32_8x16 9 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_8x16 10 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_16x32_16x16 11 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_16x16 12 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_16x32 13 > #define CIK__PIPE_CONFIG__ADDR_SURF_P8_32x64_32x32 14 > #define CIK__PIPE_CONFIG__ADDR_SURF_P16_32X32_8X16 16 > #define CIK__PIPE_CONFIG__ADDR_SURF_P16_32X32_16X16 17 > > +#ifndef AMDGPU_INFO_NUM_EVICTIONS > +#define AMDGPU_INFO_NUM_EVICTIONS 0x18 > +#endif > + > static struct util_hash_table *dev_tab = NULL; > pipe_static_mutex(dev_tab_mutex); > > static unsigned cik_get_num_tile_pipes(struct amdgpu_gpu_info *info) > { > unsigned mode2d = info->gb_tile_mode[CIK_TILE_MODE_COLOR_2D]; > > switch (CIK__GB_TILE_MODE__PIPE_CONFIG(mode2d)) { > case CIK__PIPE_CONFIG__ADDR_SURF_P2: > return 2; > @@ -386,20 +390,23 @@ static uint64_t amdgpu_query_value(struct radeon_winsys > *rws, > case RADEON_BUFFER_WAIT_TIME_NS: > return ws->buffer_wait_time; > case RADEON_TIMESTAMP: > amdgpu_query_info(ws->dev, AMDGPU_INFO_TIMESTAMP, 8, &retval); > return retval; > case RADEON_NUM_CS_FLUSHES: > return ws->num_cs_flushes; > case RADEON_NUM_BYTES_MOVED: > amdgpu_query_info(ws->dev, AMDGPU_INFO_NUM_BYTES_MOVED, 8, &retval); > return retval; > + case RADEON_NUM_EVICTIONS: > + amdgpu_query_info(ws->dev, AMDGPU_INFO_NUM_EVICTIONS, 8, &retval); > + return retval; > case RADEON_VRAM_USAGE: > amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_VRAM, 0, &heap); > return heap.heap_usage; > case RADEON_GTT_USAGE: > amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_GTT, 0, &heap); > return heap.heap_usage; > case RADEON_GPU_TEMPERATURE: > case RADEON_CURRENT_SCLK: > case RADEON_CURRENT_MCLK: > return 0; > diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c > b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c > index b1cc3d5..d73b7f4 100644 > --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c > +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c > @@ -617,20 +617,22 @@ static uint64_t radeon_query_value(struct radeon_winsys > *rws, > > radeon_get_drm_value(ws->fd, RADEON_INFO_TIMESTAMP, "timestamp", > (uint32_t*)&retval); > return retval; > case RADEON_NUM_CS_FLUSHES: > return ws->num_cs_flushes; > case RADEON_NUM_BYTES_MOVED: > radeon_get_drm_value(ws->fd, RADEON_INFO_NUM_BYTES_MOVED, > "num-bytes-moved", (uint32_t*)&retval); > return retval; > + case RADEON_NUM_EVICTIONS: > + return 0; /* unimplemented */ > case RADEON_VRAM_USAGE: > radeon_get_drm_value(ws->fd, RADEON_INFO_VRAM_USAGE, > "vram-usage", (uint32_t*)&retval); > return retval; > case RADEON_GTT_USAGE: > radeon_get_drm_value(ws->fd, RADEON_INFO_GTT_USAGE, > "gtt-usage", (uint32_t*)&retval); > return retval; > case RADEON_GPU_TEMPERATURE: > radeon_get_drm_value(ws->fd, RADEON_INFO_CURRENT_GPU_TEMP, > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev