lima: add missing resolve check for damage and reload
authorQiang Yu <yuq825@gmail.com>
Wed, 12 Feb 2020 03:07:03 +0000 (11:07 +0800)
committerMarge Bot <eric+marge@anholt.net>
Mon, 17 Feb 2020 02:54:15 +0000 (02:54 +0000)
If color buffer is not touched, we do not need to reload or get
damage region from it.

Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3755>

src/gallium/drivers/lima/lima_draw.c

index 97e03bd5af3c77165e7d0289918d3747dea89118..c6c231f39e56cd0b6fa2e2b53b6ab29852bb3f2e 100644 (file)
@@ -218,7 +218,7 @@ lima_ctx_dirty(struct lima_context *ctx)
 static inline struct lima_damage_region *
 lima_ctx_get_damage(struct lima_context *ctx)
 {
-   if (!ctx->framebuffer.base.nr_cbufs)
+   if (!(ctx->framebuffer.base.nr_cbufs && (ctx->resolve & PIPE_CLEAR_COLOR0)))
       return NULL;
 
    struct lima_surface *surf = lima_surface(ctx->framebuffer.base.cbufs[0]);
@@ -230,7 +230,7 @@ static bool
 lima_fb_need_reload(struct lima_context *ctx)
 {
    /* Depth buffer is always discarded */
-   if (!ctx->framebuffer.base.nr_cbufs)
+   if (!(ctx->framebuffer.base.nr_cbufs && (ctx->resolve & PIPE_CLEAR_COLOR0)))
       return false;
 
    struct lima_surface *surf = lima_surface(ctx->framebuffer.base.cbufs[0]);
@@ -1914,7 +1914,7 @@ _lima_flush(struct lima_context *ctx, bool end_of_frame)
 
    ctx->plb_index = (ctx->plb_index + 1) % lima_ctx_num_plb;
 
-   if (ctx->framebuffer.base.nr_cbufs) {
+   if (ctx->framebuffer.base.nr_cbufs && (ctx->resolve & PIPE_CLEAR_COLOR0)) {
       /* Set reload flag for next draw. It'll be unset if buffer is cleared */
       struct lima_surface *surf = lima_surface(ctx->framebuffer.base.cbufs[0]);
       surf->reload = true;