asahi: Legalize compression before blitting
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Wed, 9 Aug 2023 18:15:35 +0000 (14:15 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 11 Aug 2023 20:31:28 +0000 (20:31 +0000)
Fixes invalid recursive blitting.

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

src/gallium/drivers/asahi/agx_blit.c
src/gallium/drivers/asahi/agx_state.c
src/gallium/drivers/asahi/agx_state.h

index 5e104ba..71763ac 100644 (file)
@@ -63,6 +63,15 @@ agx_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
       unreachable("Unsupported blit");
    }
 
+   /* Legalize compression /before/ calling into u_blitter to avoid recursion.
+    * u_blitter bans recursive usage.
+    */
+   agx_legalize_compression(ctx, agx_resource(info->dst.resource),
+                            info->dst.format);
+
+   agx_legalize_compression(ctx, agx_resource(info->src.resource),
+                            info->src.format);
+
    agx_blitter_save(ctx, ctx->blitter, info->render_condition_enable);
    util_blitter_blit(ctx->blitter, info);
 }
index aa8cec2..aeaaf81 100644 (file)
@@ -45,7 +45,7 @@
 #include "agx_tilebuffer.h"
 #include "pool.h"
 
-static void
+void
 agx_legalize_compression(struct agx_context *ctx, struct agx_resource *rsrc,
                          enum pipe_format format)
 {
index 8aaa9e9..29fc6fe 100644 (file)
@@ -657,6 +657,10 @@ agx_map_texture_gpu(struct agx_resource *rsrc, unsigned z)
 void agx_decompress(struct agx_context *ctx, struct agx_resource *rsrc,
                     const char *reason);
 
+void agx_legalize_compression(struct agx_context *ctx,
+                              struct agx_resource *rsrc,
+                              enum pipe_format format);
+
 struct agx_transfer {
    struct pipe_transfer base;
    void *map;