R-b, nice fix :)
On Fri, Sep 20, 2019 at 04:53:38PM +0200, Boris Brezillon wrote: > 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 <boris.brezil...@collabora.com> > --- > There might be a more optimal solution to do that (like not passing the > color bufs to the fragment job?), but this solution seems to fix a few > deqp tests. > --- > src/gallium/drivers/panfrost/pan_context.c | 2 +- > src/gallium/drivers/panfrost/pan_job.c | 16 ++++++++++++++-- > 2 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/src/gallium/drivers/panfrost/pan_context.c > b/src/gallium/drivers/panfrost/pan_context.c > index b2f2a9da7a51..c99bf1b26ce7 100644 > --- a/src/gallium/drivers/panfrost/pan_context.c > +++ b/src/gallium/drivers/panfrost/pan_context.c > @@ -1333,7 +1333,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 4ec2aa0565d7..a2df31f96f00 100644 > --- a/src/gallium/drivers/panfrost/pan_job.c > +++ b/src/gallium/drivers/panfrost/pan_job.c > @@ -698,10 +698,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]; > @@ -923,8 +936,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.21.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev