From e3f5b8ac168fe3d3afa48906ea56465a5836ac58 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 16 Jun 2017 16:36:43 -0600 Subject: [PATCH] svga: add new num-failed-allocations HUD query This counter is incremented if we fail to allocate memory for vertex/index/const buffers, textures, etc. Reviewed-by: Neha Bhende --- src/gallium/drivers/svga/svga_context.h | 1 + src/gallium/drivers/svga/svga_pipe_query.c | 7 +++++++ src/gallium/drivers/svga/svga_resource.c | 17 +++++++++++++++-- src/gallium/drivers/svga/svga_screen.c | 2 ++ src/gallium/drivers/svga/svga_screen.h | 1 + 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h index 2987c709ac9..b1ccfc8775d 100644 --- a/src/gallium/drivers/svga/svga_context.h +++ b/src/gallium/drivers/svga/svga_context.h @@ -72,6 +72,7 @@ enum svga_hud { SVGA_QUERY_NUM_STATE_OBJECTS, SVGA_QUERY_NUM_SURFACE_VIEWS, SVGA_QUERY_NUM_GENERATE_MIPMAP, + SVGA_QUERY_NUM_FAILED_ALLOCATIONS, /*SVGA_QUERY_MAX has to be last because it is size of an array*/ SVGA_QUERY_MAX diff --git a/src/gallium/drivers/svga/svga_pipe_query.c b/src/gallium/drivers/svga/svga_pipe_query.c index 76360fdd4d0..6703b729c6e 100644 --- a/src/gallium/drivers/svga/svga_pipe_query.c +++ b/src/gallium/drivers/svga/svga_pipe_query.c @@ -747,6 +747,7 @@ svga_create_query(struct pipe_context *pipe, case SVGA_QUERY_NUM_BUFFER_UPLOADS: case SVGA_QUERY_NUM_CONST_BUF_UPDATES: case SVGA_QUERY_NUM_CONST_UPDATES: + case SVGA_QUERY_NUM_FAILED_ALLOCATIONS: break; case SVGA_QUERY_FLUSH_TIME: case SVGA_QUERY_MAP_BUFFER_TIME: @@ -826,6 +827,7 @@ svga_destroy_query(struct pipe_context *pipe, struct pipe_query *q) case SVGA_QUERY_NUM_BUFFER_UPLOADS: case SVGA_QUERY_NUM_CONST_BUF_UPDATES: case SVGA_QUERY_NUM_CONST_UPDATES: + case SVGA_QUERY_NUM_FAILED_ALLOCATIONS: /* nothing */ break; default: @@ -937,6 +939,7 @@ svga_begin_query(struct pipe_context *pipe, struct pipe_query *q) case SVGA_QUERY_NUM_STATE_OBJECTS: case SVGA_QUERY_NUM_SURFACE_VIEWS: case SVGA_QUERY_NUM_GENERATE_MIPMAP: + case SVGA_QUERY_NUM_FAILED_ALLOCATIONS: /* nothing */ break; default: @@ -1049,6 +1052,7 @@ svga_end_query(struct pipe_context *pipe, struct pipe_query *q) case SVGA_QUERY_NUM_STATE_OBJECTS: case SVGA_QUERY_NUM_SURFACE_VIEWS: case SVGA_QUERY_NUM_GENERATE_MIPMAP: + case SVGA_QUERY_NUM_FAILED_ALLOCATIONS: /* nothing */ break; default: @@ -1182,6 +1186,9 @@ svga_get_query_result(struct pipe_context *pipe, case SVGA_QUERY_NUM_GENERATE_MIPMAP: vresult->u64 = svga->hud.num_generate_mipmap; break; + case SVGA_QUERY_NUM_FAILED_ALLOCATIONS: + vresult->u64 = svgascreen->hud.num_failed_allocations; + break; default: assert(!"unexpected query type in svga_get_query_result"); } diff --git a/src/gallium/drivers/svga/svga_resource.c b/src/gallium/drivers/svga/svga_resource.c index 6a297a2ae02..874cfa07223 100644 --- a/src/gallium/drivers/svga/svga_resource.c +++ b/src/gallium/drivers/svga/svga_resource.c @@ -33,14 +33,27 @@ #include "svga_format.h" +/** + * This is the primary driver entrypoint for allocating graphics memory + * (vertex/index/constant buffers, textures, etc) + */ static struct pipe_resource * svga_resource_create(struct pipe_screen *screen, const struct pipe_resource *template) { + struct pipe_resource *r; + if (template->target == PIPE_BUFFER) - return svga_buffer_create(screen, template); + r = svga_buffer_create(screen, template); else - return svga_texture_create(screen, template); + r = svga_texture_create(screen, template); + + if (!r) { + struct svga_screen *svgascreen = svga_screen(screen); + svgascreen->hud.num_failed_allocations++; + } + + return r; } diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c index 3aa99452a8c..0b63525aaf2 100644 --- a/src/gallium/drivers/svga/svga_screen.c +++ b/src/gallium/drivers/svga/svga_screen.c @@ -916,6 +916,8 @@ svga_get_driver_query_info(struct pipe_screen *screen, PIPE_DRIVER_QUERY_TYPE_UINT64), QUERY("num-generate-mipmap", SVGA_QUERY_NUM_GENERATE_MIPMAP, PIPE_DRIVER_QUERY_TYPE_UINT64), + QUERY("num-failed-allocations", SVGA_QUERY_NUM_FAILED_ALLOCATIONS, + PIPE_DRIVER_QUERY_TYPE_UINT64), }; #undef QUERY diff --git a/src/gallium/drivers/svga/svga_screen.h b/src/gallium/drivers/svga/svga_screen.h index 68834a69e2e..12b93468da2 100644 --- a/src/gallium/drivers/svga/svga_screen.h +++ b/src/gallium/drivers/svga/svga_screen.h @@ -86,6 +86,7 @@ struct svga_screen /** Memory used by all resources (buffers and surfaces) */ uint64_t total_resource_bytes; uint64_t num_resources; + uint64_t num_failed_allocations; } hud; }; -- 2.30.2