lima: fix tile buffer reloading
authorVasily Khoruzhick <anarsoul@gmail.com>
Wed, 8 May 2019 02:03:34 +0000 (19:03 -0700)
committerVasily Khoruzhick <anarsoul@gmail.com>
Fri, 10 May 2019 04:45:04 +0000 (21:45 -0700)
Buffer needs to be reloaded every time unless explicit clear() was
called.

Fixes rendering issues with wayland compositors.

Reviewed-by: Qiang Yu <yuq825@gmail.com>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
src/gallium/drivers/lima/lima_draw.c
src/gallium/drivers/lima/lima_resource.c

index e0a1e181937f5ce2010b6da7172ba9ff3ef34b91..99b2675cb1e07b50d2f7231562796265a9cf899a 100644 (file)
@@ -1675,9 +1675,9 @@ _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) {
-      /* this surface may need reload when next draw if not end of frame */
+      /* 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 = !end_of_frame;
+      surf->reload = true;
    }
 }
 
index 4e215e9e08f6a4a27ab5447e097882ca7d51d69f..0aefb2c79009cffac3ada31315356f0bf86121bc 100644 (file)
@@ -382,6 +382,8 @@ lima_surface_create(struct pipe_context *pctx,
    surf->tiled_w = align(psurf->width, 16) >> 4;
    surf->tiled_h = align(psurf->height, 16) >> 4;
 
+   surf->reload = true;
+
    struct lima_context *ctx = lima_context(pctx);
    if (ctx->plb_pp_stream) {
       struct lima_ctx_plb_pp_stream_key key = {