From a0bdbcbae6c1e2e8cba2be2fa4101d069a43c007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Molinari?= Date: Wed, 2 Jul 2025 07:07:47 +0200 Subject: [PATCH] panfrost: Async AFBC packing debug info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Print the AFBC-P state of a resource along its asynchronous packing process when PAN_MESA_DEBUG=forcepack. There's no need to prevent tiling in that case now that packing maintains the tiling state. Signed-off-by: Loïc Molinari Reviewed-by: Boris Brezillon Reviewed-by: Mary Guillemard Acked-by: Eric R. Smith Part-of: --- src/gallium/drivers/panfrost/pan_resource.c | 22 ++++++++++++++++++--- src/gallium/drivers/panfrost/pan_screen.h | 7 +++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 54c8f532632..e3b69d1f031 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -2011,6 +2011,11 @@ pan_resource_afbcp_get_payload_sizes(struct panfrost_context *ctx, { MESA_TRACE_FUNC(); + afbcp_debug(ctx, + "AFBC-P prsrc=%p: Get payload sizes (reads=%u bo_size=%zu)", + prsrc, prsrc->afbcp->nr_consecutive_reads, + panfrost_bo_size(prsrc->bo)); + struct panfrost_screen *screen = pan_screen(ctx->base.screen); struct panfrost_device *dev = pan_device(ctx->base.screen); uint64_t modifier = prsrc->modifier; @@ -2057,6 +2062,11 @@ pan_resource_afbcp_get_payload_offsets(struct panfrost_context *ctx, { MESA_TRACE_FUNC(); + afbcp_debug(ctx, + "AFBC-P prsrc=%p: Get payload offsets (reads=%u bo_size=%zu)", + prsrc, prsrc->afbcp->nr_consecutive_reads, + panfrost_bo_size(prsrc->bo)); + struct panfrost_device *dev = pan_device(ctx->base.screen); uint64_t modifier = prsrc->modifier; unsigned last_level = prsrc->base.last_level; @@ -2131,6 +2141,10 @@ pan_resource_afbcp_pack(struct panfrost_context *ctx, { MESA_TRACE_FUNC(); + afbcp_debug(ctx, "AFBC-P prsrc=%p: Pack (reads=%u bo_size=%zu ratio=%.2f)", + prsrc, prsrc->afbcp->nr_consecutive_reads, + panfrost_bo_size(prsrc->bo), prsrc->afbcp->ratio); + struct panfrost_screen *screen = pan_screen(ctx->base.screen); struct panfrost_device *dev = pan_device(ctx->base.screen); uint64_t modifier = prsrc->modifier & ~AFBC_FORMAT_MOD_SPARSE; @@ -2174,6 +2188,11 @@ pan_resource_afbcp_commit(struct panfrost_context *ctx, { MESA_TRACE_FUNC(); + afbcp_debug(ctx, + "AFBC-P prsrc=%p: Commit (reads=%u bo_size=%zu ratio=%.2f)", + prsrc, prsrc->afbcp->nr_consecutive_reads, + panfrost_bo_size(prsrc->bo), prsrc->afbcp->ratio); + uint64_t modifier = prsrc->modifier & ~AFBC_FORMAT_MOD_SPARSE; assert(!panfrost_is_emulated_mod(modifier)); prsrc->image.props.modifier = modifier; @@ -2245,9 +2264,6 @@ pan_resource_afbcp_update(struct panfrost_context *ctx, (float)panfrost_bo_size(prsrc->bo) / prsrc->afbcp->size; if (100.0f / prsrc->afbcp->ratio > screen->max_afbc_packing_ratio) goto stop_packing; - perf_debug(ctx, "AFBC-P ratio: %.2f (%zu KB -> %u KB)\n", - prsrc->afbcp->ratio, panfrost_bo_size(prsrc->bo) / 1024, - prsrc->afbcp->size / 1024); } /* 3rd async AFBC-P step: pack. */ diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h index a68c318d9d6..349ee898b6d 100644 --- a/src/gallium/drivers/panfrost/pan_screen.h +++ b/src/gallium/drivers/panfrost/pan_screen.h @@ -179,4 +179,11 @@ void panfrost_cmdstream_screen_init_v13(struct panfrost_screen *screen); util_debug_message(&ctx->base.debug, PERF_INFO, __VA_ARGS__); \ } while (0) +#define afbcp_debug(ctx, ...) \ + do { \ + if (unlikely(pan_device((ctx)->base.screen)->debug & PAN_DBG_FORCE_PACK)) \ + mesa_logw(__VA_ARGS__); \ + util_debug_message(&ctx->base.debug, INFO, __VA_ARGS__); \ + } while (0) + #endif /* PAN_SCREEN_H */