diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_bufmgr.c | 30 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_bufmgr.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_resource.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_state.c | 3 |
4 files changed, 41 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c index 0653f882323..9c4cc4cba88 100644 --- a/src/gallium/drivers/vc4/vc4_bufmgr.c +++ b/src/gallium/drivers/vc4/vc4_bufmgr.c @@ -48,6 +48,32 @@ static bool dump_stats = false; static void vc4_bo_cache_free_all(struct vc4_bo_cache *cache); +void +vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...) +{ + /* Perform BO labeling by default on debug builds (so that you get + * whole-system allocation information), or if VC4_DEBUG=surf is set + * (for debugging a single app's allocation). + */ +#ifndef DEBUG + if (!(VC4_DEBUG & VC4_DEBUG_SURFACE)) + return; +#endif + va_list va; + va_start(va, fmt); + char *name = ralloc_vasprintf(NULL, fmt, va); + va_end(va); + + struct drm_vc4_label_bo label = { + .handle = bo->handle, + .len = strlen(name), + .name = (uintptr_t)name, + }; + drmIoctl(screen->fd, DRM_IOCTL_VC4_LABEL_BO, &label); + + ralloc_free(name); +} + static void vc4_bo_dump_stats(struct vc4_screen *screen) { @@ -114,6 +140,7 @@ vc4_bo_from_cache(struct vc4_screen *screen, uint32_t size, const char *name) pipe_reference_init(&bo->reference, 1); vc4_bo_remove_from_cache(cache, bo); + vc4_bo_label(screen, bo, "%s", name); bo->name = name; } mtx_unlock(&cache->lock); @@ -176,6 +203,8 @@ vc4_bo_alloc(struct vc4_screen *screen, uint32_t size, const char *name) vc4_bo_dump_stats(screen); } + vc4_bo_label(screen, bo, "%s", name); + return bo; } @@ -307,6 +336,7 @@ vc4_bo_last_unreference_locked_timed(struct vc4_bo *bo, time_t time) vc4_bo_dump_stats(screen); } bo->name = NULL; + vc4_bo_label(screen, bo, "mesa cache"); free_stale_bos(screen, time); } diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.h b/src/gallium/drivers/vc4/vc4_bufmgr.h index 838314f43df..4e7b23e0862 100644 --- a/src/gallium/drivers/vc4/vc4_bufmgr.h +++ b/src/gallium/drivers/vc4/vc4_bufmgr.h @@ -132,6 +132,9 @@ vc4_wait_seqno(struct vc4_screen *screen, uint64_t seqno, uint64_t timeout_ns, const char *reason); void +vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...); + +void vc4_bufmgr_destroy(struct pipe_screen *pscreen); #endif /* VC4_BUFMGR_H */ diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c index 853f7bbfa17..cdcbcc917e0 100644 --- a/src/gallium/drivers/vc4/vc4_resource.c +++ b/src/gallium/drivers/vc4/vc4_resource.c @@ -675,6 +675,11 @@ vc4_resource_create_with_modifiers(struct pipe_screen *pscreen, goto fail; } + vc4_bo_label(screen, rsc->bo, "%sresource %dx%d@%d/%d", + (tmpl->bind & PIPE_BIND_SCANOUT) ? "scanout " : "", + tmpl->width0, tmpl->height0, + rsc->cpp * 8, prsc->last_level); + return prsc; fail: vc4_resource_destroy(pscreen, prsc); diff --git a/src/gallium/drivers/vc4/vc4_state.c b/src/gallium/drivers/vc4/vc4_state.c index d6d44793e38..17aa7eb3971 100644 --- a/src/gallium/drivers/vc4/vc4_state.c +++ b/src/gallium/drivers/vc4/vc4_state.c @@ -587,6 +587,9 @@ vc4_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc, return NULL; } rsc = vc4_resource(prsc); + vc4_bo_label(vc4_screen(pctx->screen), rsc->bo, + "tiling shadow %dx%d", + tmpl.width0, tmpl.height0); /* Flag it as needing update of the contents from the parent. */ rsc->writes = shadow_parent->writes - 1; |