diff --git a/src/gallium/drivers/etnaviv/etnaviv_blt.c b/src/gallium/drivers/etnaviv/etnaviv_blt.c index 00daea00439..0592b4083f8 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_blt.c +++ b/src/gallium/drivers/etnaviv/etnaviv_blt.c @@ -579,7 +579,14 @@ etna_try_blt_blit(struct pipe_context *pctx, resource_written(ctx, &dst->base); etna_resource_level_mark_changed(dst_lev); - etna_resource_level_ts_mark_invalid(dst_lev); + + /* We don't need to mark the TS as invalid if this was just a flush without + * compression, as in that case only clear tiles are filled and the tile + * status still matches the blit target buffer. For compressed formats the + * tiles are decompressed, so tile status doesn't match anymore. + */ + if (src != dst || src_lev->ts_compress_fmt >= 0) + etna_resource_level_ts_mark_invalid(dst_lev); return true; } diff --git a/src/gallium/drivers/etnaviv/etnaviv_rs.c b/src/gallium/drivers/etnaviv/etnaviv_rs.c index eeae7dcd124..659ed0d7762 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_rs.c +++ b/src/gallium/drivers/etnaviv/etnaviv_rs.c @@ -807,7 +807,15 @@ etna_try_rs_blit(struct pipe_context *pctx, resource_read(ctx, &src->base); resource_written(ctx, &dst->base); etna_resource_level_mark_changed(dst_lev); - etna_resource_level_ts_mark_invalid(dst_lev); + + /* We don't need to mark the TS as invalid if this was just a flush without + * compression, as in that case only clear tiles are filled and the tile + * status still matches the blit target buffer. For compressed formats the + * tiles are decompressed, so tile status doesn't match anymore. + */ + if (src != dst || src_lev->ts_compress_fmt >= 0) + etna_resource_level_ts_mark_invalid(dst_lev); + ctx->dirty |= ETNA_DIRTY_DERIVE_TS; return true;