From 71eda74f7c8c9536f231bc7dc92f3ddfae83ad00 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Fri, 20 Sep 2019 08:55:54 +0200 Subject: [PATCH] panfrost: Draw the wallpaper when only depth/stencil bufs are cleared When only the depth/stencil bufs are cleared, we should make sure the color content is reloaded into the tile buffers if we want to preserve their content. Signed-off-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig --- .gitlab-ci/deqp-panfrost-t760-fails.txt | 1 - .gitlab-ci/deqp-panfrost-t860-fails.txt | 1 - src/gallium/drivers/panfrost/pan_context.c | 2 +- src/gallium/drivers/panfrost/pan_job.c | 16 ++++++++++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci/deqp-panfrost-t760-fails.txt b/.gitlab-ci/deqp-panfrost-t760-fails.txt index 8ce1e424680..c2a2ef73e9d 100644 --- a/.gitlab-ci/deqp-panfrost-t760-fails.txt +++ b/.gitlab-ci/deqp-panfrost-t760-fails.txt @@ -935,7 +935,6 @@ dEQP-GLES2.functional.fragment_ops.random.92 Fail dEQP-GLES2.functional.fragment_ops.random.96 Fail dEQP-GLES2.functional.fragment_ops.random.99 Fail dEQP-GLES2.functional.fragment_ops.random.9 Fail -dEQP-GLES2.functional.polygon_offset.default_factor_1_slope Fail dEQP-GLES2.functional.polygon_offset.default_render_with_units Fail dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope Fail dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units Fail diff --git a/.gitlab-ci/deqp-panfrost-t860-fails.txt b/.gitlab-ci/deqp-panfrost-t860-fails.txt index fbafe8eedc9..91c1f14ce1a 100644 --- a/.gitlab-ci/deqp-panfrost-t860-fails.txt +++ b/.gitlab-ci/deqp-panfrost-t860-fails.txt @@ -714,7 +714,6 @@ dEQP-GLES2.functional.fragment_ops.random.75 Fail dEQP-GLES2.functional.fragment_ops.random.81 Fail dEQP-GLES2.functional.fragment_ops.random.87 Fail dEQP-GLES2.functional.fragment_ops.random.96 Fail -dEQP-GLES2.functional.polygon_offset.default_factor_1_slope Fail dEQP-GLES2.functional.polygon_offset.default_render_with_units Fail dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope Fail dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units Fail diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index b8edf302803..bb605280c36 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1334,7 +1334,7 @@ panfrost_queue_draw(struct panfrost_context *ctx) if (rasterizer_discard) panfrost_scoreboard_queue_vertex_job(batch, vertex, FALSE); - else if (ctx->wallpaper_batch) + else if (ctx->wallpaper_batch && batch->first_tiler.gpu) panfrost_scoreboard_queue_fused_job_prepend(batch, vertex, tiler); else panfrost_scoreboard_queue_fused_job(batch, vertex, tiler); diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index ae482a9a7a6..8ba75cde6c4 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -686,10 +686,23 @@ panfrost_batch_get_tiler_dummy(struct panfrost_batch *batch) static void panfrost_batch_draw_wallpaper(struct panfrost_batch *batch) { + /* Color 0 is cleared, no need to draw the wallpaper. + * TODO: MRT wallpapers. + */ + if (batch->clear & PIPE_CLEAR_COLOR0) + return; + /* Nothing to reload? TODO: MRT wallpapers */ if (batch->key.cbufs[0] == NULL) return; + /* No draw calls, and no clear on the depth/stencil bufs. + * Drawing the wallpaper would be useless. + */ + if (!batch->last_tiler.gpu && + !(batch->clear & PIPE_CLEAR_DEPTHSTENCIL)) + return; + /* Check if the buffer has any content on it worth preserving */ struct pipe_surface *surf = batch->key.cbufs[0]; @@ -911,8 +924,7 @@ panfrost_batch_submit(struct panfrost_batch *batch) goto out; } - if (!batch->clear && batch->last_tiler.gpu) - panfrost_batch_draw_wallpaper(batch); + panfrost_batch_draw_wallpaper(batch); panfrost_scoreboard_link_batch(batch); -- 2.30.2