From dc4cf64a7687d64c1dc8fee18a9ef8f6ab906ce8 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 1 Dec 2022 22:42:47 -0500 Subject: [PATCH] asahi: Don't reload uninitialized surfaces Pointless. This should save some bandwidth in some cases (possibly mipmap generation?) Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/asahi/agx_state.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 8caa4aafb5e..6386c626eff 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -1581,14 +1581,19 @@ agx_build_meta(struct agx_batch *batch, bool store, bool partial_render) /* TODO: Suppress stores to discarded render targets */ key.op[rt] = AGX_META_OP_STORE; } else { - bool load = !(batch->clear & (PIPE_CLEAR_COLOR0 << rt)); + struct agx_resource *rsrc = agx_resource(surf->texture); + bool valid = BITSET_TEST(rsrc->data_valid, surf->u.tex.level); + bool clear = (batch->clear & (PIPE_CLEAR_COLOR0 << rt)); + bool load = valid && !clear; /* The background program used for partial renders must always load * whatever was stored in the mid-frame end-of-tile program. */ load |= partial_render; - key.op[rt] = load ? AGX_META_OP_LOAD : AGX_META_OP_CLEAR; + key.op[rt] = load ? AGX_META_OP_LOAD : + clear ? AGX_META_OP_CLEAR : + AGX_META_OP_NONE; } }