From 13ce0358b00e108b6253ec2a4d1e6e8d94349dcb Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Mon, 5 Jun 2023 04:22:34 +0800 Subject: [PATCH] panfrost/shared: avoid use gallium helper in pan_minmax_cache.* Signed-off-by: Yonggang Luo Reviewed-by: Erik Faye-Lund Reviewed-by: Boris Brezillon Part-of: --- src/gallium/drivers/lima/lima_resource.c | 6 ++++-- src/gallium/drivers/panfrost/pan_resource.c | 8 ++++++-- src/panfrost/shared/pan_minmax_cache.c | 10 ++++------ src/panfrost/shared/pan_minmax_cache.h | 6 ++++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/lima/lima_resource.c b/src/gallium/drivers/lima/lima_resource.c index 8d8e3756de8..1e263e95e57 100644 --- a/src/gallium/drivers/lima/lima_resource.c +++ b/src/gallium/drivers/lima/lima_resource.c @@ -708,7 +708,7 @@ lima_transfer_map(struct pipe_context *pctx, ptrans->layer_stride = res->levels[level].layer_stride; if ((usage & PIPE_MAP_WRITE) && (usage & PIPE_MAP_DIRECTLY)) - panfrost_minmax_cache_invalidate(res->index_cache, ptrans); + panfrost_minmax_cache_invalidate(res->index_cache, ptrans->box.x, ptrans->box.width); return bo->map + res->levels[level].offset + box->z * res->levels[level].layer_stride + @@ -816,7 +816,9 @@ lima_transfer_unmap(struct pipe_context *pctx, lima_transfer_flush_region(pctx, ptrans, &box); if (trans->staging) free(trans->staging); - panfrost_minmax_cache_invalidate(res->index_cache, ptrans); + if (ptrans->usage & PIPE_MAP_WRITE) { + panfrost_minmax_cache_invalidate(res->index_cache, ptrans->box.x, ptrans->box.width); + } pipe_resource_reference(&ptrans->resource, NULL); slab_free(&ctx->transfer_pool, trans); diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index ddf8c55ce4a..31e464795a8 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -1308,7 +1308,8 @@ panfrost_ptr_map(struct pipe_context *pctx, struct pipe_resource *resource, if (usage & PIPE_MAP_WRITE) { BITSET_SET(rsrc->valid.data, level); - panfrost_minmax_cache_invalidate(rsrc->index_cache, &transfer->base); + panfrost_minmax_cache_invalidate( + rsrc->index_cache, transfer->base.box.x, transfer->base.box.width); } return bo->ptr.cpu + rsrc->image.layout.slices[level].offset + @@ -1664,7 +1665,10 @@ panfrost_ptr_unmap(struct pipe_context *pctx, struct pipe_transfer *transfer) util_range_add(&prsrc->base, &prsrc->valid_buffer_range, transfer->box.x, transfer->box.x + transfer->box.width); - panfrost_minmax_cache_invalidate(prsrc->index_cache, transfer); + if (transfer->usage & PIPE_MAP_WRITE) { + panfrost_minmax_cache_invalidate(prsrc->index_cache, transfer->box.x, + transfer->box.width); + } /* Derefence the resource */ pipe_resource_reference(&transfer->resource, NULL); diff --git a/src/panfrost/shared/pan_minmax_cache.c b/src/panfrost/shared/pan_minmax_cache.c index 1da7ee51e1e..11f46973405 100644 --- a/src/panfrost/shared/pan_minmax_cache.c +++ b/src/panfrost/shared/pan_minmax_cache.c @@ -39,6 +39,7 @@ */ #include "pan_minmax_cache.h" +#include "util/macros.h" bool panfrost_minmax_cache_get(struct panfrost_minmax_cache *cache, unsigned start, @@ -94,15 +95,12 @@ panfrost_minmax_cache_add(struct panfrost_minmax_cache *cache, unsigned start, void panfrost_minmax_cache_invalidate(struct panfrost_minmax_cache *cache, - struct pipe_transfer *transfer) + size_t offset, size_t size) { /* Ensure there is a cache to invalidate and a write */ if (!cache) return; - if (!(transfer->usage & PIPE_MAP_WRITE)) - return; - unsigned valid_count = 0; for (unsigned i = 0; i < cache->size; ++i) { @@ -112,8 +110,8 @@ panfrost_minmax_cache_invalidate(struct panfrost_minmax_cache *cache, uint32_t count = key >> 32; /* 1D range intersection */ - bool invalid = MAX2(transfer->box.x, start) < - MIN2(transfer->box.x + transfer->box.width, start + count); + bool invalid = MAX2(offset, start) < + MIN2(offset + size, start + count); if (!invalid) { cache->keys[valid_count] = key; cache->values[valid_count] = cache->values[i]; diff --git a/src/panfrost/shared/pan_minmax_cache.h b/src/panfrost/shared/pan_minmax_cache.h index 651e6436cd6..417745e5064 100644 --- a/src/panfrost/shared/pan_minmax_cache.h +++ b/src/panfrost/shared/pan_minmax_cache.h @@ -27,7 +27,9 @@ #ifndef H_PAN_MINMAX_CACHE #define H_PAN_MINMAX_CACHE -#include "util/u_transfer.h" +#include +#include +#include #define PANFROST_MINMAX_SIZE 64 @@ -47,6 +49,6 @@ void panfrost_minmax_cache_add(struct panfrost_minmax_cache *cache, unsigned min_index, unsigned max_index); void panfrost_minmax_cache_invalidate(struct panfrost_minmax_cache *cache, - struct pipe_transfer *transfer); + size_t offset, size_t size); #endif