asahi: Always use resource size, not BO size

BOs can be oversized, as they can come from the BO cache. Make sure to
always use the resource layout size, not the BO size, when we need this
for some reason.

This fixes BO shadowing creating overlarge BOs, and also the attachment
size for submissions (probably doesn't matter, but it's more correct now).

Signed-off-by: Asahi Lina <lina@asahilina.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24635>
This commit is contained in:
Asahi Lina 2023-07-22 18:35:42 +09:00 committed by Marge Bot
parent f8f4f466f7
commit ccbd125468

View file

@ -658,6 +658,7 @@ agx_shadow(struct agx_context *ctx, struct agx_resource *rsrc, bool needs_copy)
{
struct agx_device *dev = agx_device(ctx->base.screen);
struct agx_bo *old = rsrc->bo;
size_t size = rsrc->layout.size_B;
unsigned flags = old->flags;
if (dev->debug & AGX_DBG_NOSHADOW)
@ -678,17 +679,17 @@ agx_shadow(struct agx_context *ctx, struct agx_resource *rsrc, bool needs_copy)
if (needs_copy)
flags |= AGX_BO_WRITEBACK;
struct agx_bo *new_ = agx_bo_create(dev, old->size, flags, old->label);
struct agx_bo *new_ = agx_bo_create(dev, size, flags, old->label);
/* If allocation failed, we can fallback on a flush gracefully*/
if (new_ == NULL)
return false;
if (needs_copy) {
perf_debug_ctx(ctx, "Shadowing %zu bytes on the CPU (%s)", old->size,
perf_debug_ctx(ctx, "Shadowing %zu bytes on the CPU (%s)", size,
(old->flags & AGX_BO_WRITEBACK) ? "cached" : "uncached");
memcpy(new_->ptr.cpu, old->ptr.cpu, old->size);
memcpy(new_->ptr.cpu, old->ptr.cpu, size);
}
/* Swap the pointers, dropping a reference */