From: Alyssa Rosenzweig Date: Wed, 9 Aug 2023 18:15:35 +0000 (-0400) Subject: asahi: Legalize compression before blitting X-Git-Tag: upstream/23.3.3~3431 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ae81eb9d5013709a955d8290bbc91c30100c4bab;p=platform%2Fupstream%2Fmesa.git asahi: Legalize compression before blitting Fixes invalid recursive blitting. Signed-off-by: Alyssa Rosenzweig Part-of: --- diff --git a/src/gallium/drivers/asahi/agx_blit.c b/src/gallium/drivers/asahi/agx_blit.c index 5e104ba..71763ac 100644 --- a/src/gallium/drivers/asahi/agx_blit.c +++ b/src/gallium/drivers/asahi/agx_blit.c @@ -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); } diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index aa8cec2..aeaaf81 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -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) { diff --git a/src/gallium/drivers/asahi/agx_state.h b/src/gallium/drivers/asahi/agx_state.h index 8aaa9e9..29fc6fe 100644 --- a/src/gallium/drivers/asahi/agx_state.h +++ b/src/gallium/drivers/asahi/agx_state.h @@ -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;