summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/vc4/vc4_bufmgr.c30
-rw-r--r--src/gallium/drivers/vc4/vc4_bufmgr.h3
-rw-r--r--src/gallium/drivers/vc4/vc4_resource.c5
-rw-r--r--src/gallium/drivers/vc4/vc4_state.c3
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;