asahi: Implement invalidate_resource
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Thu, 24 Nov 2022 16:15:44 +0000 (11:15 -0500)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 11 Dec 2022 02:50:46 +0000 (21:50 -0500)
From Panfrost. This lets us avoid storing depth/stencil attachments at the end
of the frame in GLES.

On my 4K monitor, glmark2 -btexture at fullscreen goes from 705fps to 1150fps. I
assume gains on real workloads will be smaller.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20123>

src/gallium/drivers/asahi/agx_pipe.c

index 5758f06..684464a 100644 (file)
@@ -1117,9 +1117,22 @@ agx_destroy_context(struct pipe_context *pctx)
 }
 
 static void
-agx_invalidate_resource(struct pipe_context *ctx,
+agx_invalidate_resource(struct pipe_context *pctx,
                         struct pipe_resource *resource)
 {
+   struct agx_context *ctx = agx_context(pctx);
+   struct agx_batch *batch = agx_get_batch(ctx);
+
+   /* Handle the glInvalidateFramebuffer case */
+   if (batch->key.zsbuf && batch->key.zsbuf->texture == resource)
+      batch->resolve &= ~PIPE_CLEAR_DEPTHSTENCIL;
+
+   for (unsigned i = 0; i < batch->key.nr_cbufs; ++i) {
+      struct pipe_surface *surf = batch->key.cbufs[i];
+
+      if (surf && surf->texture == resource)
+         batch->resolve &= ~(PIPE_CLEAR_COLOR0 << i);
+   }
 }
 
 static struct pipe_context *