diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.c b/src/gallium/auxiliary/driver_trace/tr_dump_state.c index fff9569d52e..ad946738a24 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.c +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.c @@ -780,6 +780,26 @@ void trace_dump_image_view(const struct pipe_image_view *state) } +void trace_dump_memory_info(const struct pipe_memory_info *state) +{ + if (!trace_dumping_enabled_locked()) + return; + + if (!state) { + trace_dump_null(); + return; + } + + trace_dump_struct_begin("pipe_memory_info"); + trace_dump_member(uint, state, total_device_memory); + trace_dump_member(uint, state, avail_device_memory); + trace_dump_member(uint, state, total_staging_memory); + trace_dump_member(uint, state, avail_staging_memory); + trace_dump_member(uint, state, device_memory_evicted); + trace_dump_member(uint, state, nr_device_memory_evictions); + trace_dump_struct_end(); +} + void trace_dump_draw_info(const struct pipe_draw_info *state) { if (!trace_dumping_enabled_locked()) diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.h b/src/gallium/auxiliary/driver_trace/tr_dump_state.h index 5b32cac4d87..f3d89ebd7a3 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.h +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.h @@ -99,4 +99,5 @@ void trace_dump_grid_info(const struct pipe_grid_info *state); void trace_dump_image_view(const struct pipe_image_view *view); +void trace_dump_memory_info(const struct pipe_memory_info *state); #endif /* TR_STATE_H */ diff --git a/src/gallium/auxiliary/driver_trace/tr_screen.c b/src/gallium/auxiliary/driver_trace/tr_screen.c index d937ef1d697..ea89f7cb4f1 100644 --- a/src/gallium/auxiliary/driver_trace/tr_screen.c +++ b/src/gallium/auxiliary/driver_trace/tr_screen.c @@ -850,6 +850,23 @@ trace_screen_destroy(struct pipe_screen *_screen) FREE(tr_scr); } +static void +trace_screen_query_memory_info(struct pipe_screen *_screen, struct pipe_memory_info *info) +{ + struct trace_screen *tr_scr = trace_screen(_screen); + struct pipe_screen *screen = tr_scr->screen; + + trace_dump_call_begin("pipe_screen", "query_memory_info"); + + trace_dump_arg(ptr, screen); + + screen->query_memory_info(screen, info); + + trace_dump_ret(memory_info, info); + + trace_dump_call_end(); +} + bool trace_enabled(void) { @@ -922,6 +939,7 @@ trace_screen_create(struct pipe_screen *screen) tr_scr->base.free_memory = trace_screen_free_memory; tr_scr->base.map_memory = trace_screen_map_memory; tr_scr->base.unmap_memory = trace_screen_unmap_memory; + SCR_INIT(query_memory_info); SCR_INIT(check_resource_capability); tr_scr->base.resource_get_handle = trace_screen_resource_get_handle; SCR_INIT(resource_get_param);