From 8c6e789c24027a9b1410f93b82a3e3a901ceec7b Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 18 Jun 2021 11:37:11 -0700 Subject: [PATCH] freedreno: Add perf warning for WC readback Signed-off-by: Rob Clark Part-of: --- src/freedreno/drm/freedreno_bo.c | 6 ++++++ src/freedreno/drm/freedreno_drmif.h | 1 + src/gallium/drivers/freedreno/freedreno_resource.c | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/freedreno/drm/freedreno_bo.c b/src/freedreno/drm/freedreno_bo.c index 23644b7b2f1..69a1d8628db 100644 --- a/src/freedreno/drm/freedreno_bo.c +++ b/src/freedreno/drm/freedreno_bo.c @@ -445,6 +445,12 @@ fd_bo_size(struct fd_bo *bo) return bo->size; } +bool +fd_bo_is_cached(struct fd_bo *bo) +{ + return !!(bo->alloc_flags & FD_BO_CACHED_COHERENT); +} + void * fd_bo_map(struct fd_bo *bo) { diff --git a/src/freedreno/drm/freedreno_drmif.h b/src/freedreno/drm/freedreno_drmif.h index bcddf49b75e..258ed0d4de5 100644 --- a/src/freedreno/drm/freedreno_drmif.h +++ b/src/freedreno/drm/freedreno_drmif.h @@ -210,6 +210,7 @@ uint32_t fd_bo_size(struct fd_bo *bo); void *fd_bo_map(struct fd_bo *bo); int fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op); void fd_bo_cpu_fini(struct fd_bo *bo); +bool fd_bo_is_cached(struct fd_bo *bo); #ifdef __cplusplus } /* end of extern "C" */ diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index 0ad70703cd1..9c90055038f 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -824,6 +824,9 @@ resource_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, return buf; } + } else if ((usage & PIPE_MAP_READ) && !fd_bo_is_cached(rsc->bo)) { + perf_debug_ctx(ctx, "wc readback: prsc=%p, level=%u, usage=%x, box=%dx%d+%d,%d", + prsc, level, usage, box->width, box->height, box->x, box->y); } if (usage & PIPE_MAP_DISCARD_WHOLE_RESOURCE) {