[v3,18/25] panfrost: Use ctx->wallpaper_batch in panfrost_blit_wallpaper()

Submitted by Boris Brezillon on Sept. 5, 2019, 7:41 p.m.

Details

Message ID 20190905194150.17608-19-boris.brezillon@collabora.com
State Accepted
Commit bc0f6c0b152a70a0092cd79dde1de3e5f93aa924
Headers show
Series "panfrost: Rework the batch pipelining logic" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Boris Brezillon Sept. 5, 2019, 7:41 p.m.
We'll soon be able to flush a batch that's not currently bound to the
context, which means ctx->pipe_framebuffer will not necessarily be the
FBO targeted by the wallpaper draw. Let's prepare for this case and
use ctx->wallpaper_batch in panfrost_blit_wallpaper().

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 src/gallium/drivers/panfrost/pan_blit.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/drivers/panfrost/pan_blit.c b/src/gallium/drivers/panfrost/pan_blit.c
index 4be8c044ee2f..2d44f06227bf 100644
--- a/src/gallium/drivers/panfrost/pan_blit.c
+++ b/src/gallium/drivers/panfrost/pan_blit.c
@@ -105,16 +105,17 @@  panfrost_blit(struct pipe_context *pipe,
 void
 panfrost_blit_wallpaper(struct panfrost_context *ctx, struct pipe_box *box)
 {
+        struct panfrost_batch *batch = ctx->wallpaper_batch;
         struct pipe_blit_info binfo = { };
 
         panfrost_blitter_save(ctx, ctx->blitter_wallpaper);
 
-        struct pipe_surface *surf = ctx->pipe_framebuffer.cbufs[0];
+        struct pipe_surface *surf = batch->key.cbufs[0];
         unsigned level = surf->u.tex.level;
         unsigned layer = surf->u.tex.first_layer;
         assert(surf->u.tex.last_layer == layer);
 
-        binfo.src.resource = binfo.dst.resource = ctx->pipe_framebuffer.cbufs[0]->texture;
+        binfo.src.resource = binfo.dst.resource = batch->key.cbufs[0]->texture;
         binfo.src.level = binfo.dst.level = level;
         binfo.src.box.x = binfo.dst.box.x = box->x;
         binfo.src.box.y = binfo.dst.box.y = box->y;
@@ -123,9 +124,9 @@  panfrost_blit_wallpaper(struct panfrost_context *ctx, struct pipe_box *box)
         binfo.src.box.height = binfo.dst.box.height = box->height;
         binfo.src.box.depth = binfo.dst.box.depth = 1;
 
-        binfo.src.format = binfo.dst.format = ctx->pipe_framebuffer.cbufs[0]->format;
+        binfo.src.format = binfo.dst.format = batch->key.cbufs[0]->format;
 
-        assert(ctx->pipe_framebuffer.nr_cbufs == 1);
+        assert(batch->key.nr_cbufs == 1);
         binfo.mask = PIPE_MASK_RGBA;
         binfo.filter = PIPE_TEX_FILTER_LINEAR;
         binfo.scissor_enable = FALSE;

Comments

R-b

On Thu, Sep 05, 2019 at 09:41:43PM +0200, Boris Brezillon wrote:
> We'll soon be able to flush a batch that's not currently bound to the
> context, which means ctx->pipe_framebuffer will not necessarily be the
> FBO targeted by the wallpaper draw. Let's prepare for this case and
> use ctx->wallpaper_batch in panfrost_blit_wallpaper().
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
>  src/gallium/drivers/panfrost/pan_blit.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/drivers/panfrost/pan_blit.c b/src/gallium/drivers/panfrost/pan_blit.c
> index 4be8c044ee2f..2d44f06227bf 100644
> --- a/src/gallium/drivers/panfrost/pan_blit.c
> +++ b/src/gallium/drivers/panfrost/pan_blit.c
> @@ -105,16 +105,17 @@ panfrost_blit(struct pipe_context *pipe,
>  void
>  panfrost_blit_wallpaper(struct panfrost_context *ctx, struct pipe_box *box)
>  {
> +        struct panfrost_batch *batch = ctx->wallpaper_batch;
>          struct pipe_blit_info binfo = { };
>  
>          panfrost_blitter_save(ctx, ctx->blitter_wallpaper);
>  
> -        struct pipe_surface *surf = ctx->pipe_framebuffer.cbufs[0];
> +        struct pipe_surface *surf = batch->key.cbufs[0];
>          unsigned level = surf->u.tex.level;
>          unsigned layer = surf->u.tex.first_layer;
>          assert(surf->u.tex.last_layer == layer);
>  
> -        binfo.src.resource = binfo.dst.resource = ctx->pipe_framebuffer.cbufs[0]->texture;
> +        binfo.src.resource = binfo.dst.resource = batch->key.cbufs[0]->texture;
>          binfo.src.level = binfo.dst.level = level;
>          binfo.src.box.x = binfo.dst.box.x = box->x;
>          binfo.src.box.y = binfo.dst.box.y = box->y;
> @@ -123,9 +124,9 @@ panfrost_blit_wallpaper(struct panfrost_context *ctx, struct pipe_box *box)
>          binfo.src.box.height = binfo.dst.box.height = box->height;
>          binfo.src.box.depth = binfo.dst.box.depth = 1;
>  
> -        binfo.src.format = binfo.dst.format = ctx->pipe_framebuffer.cbufs[0]->format;
> +        binfo.src.format = binfo.dst.format = batch->key.cbufs[0]->format;
>  
> -        assert(ctx->pipe_framebuffer.nr_cbufs == 1);
> +        assert(batch->key.nr_cbufs == 1);
>          binfo.mask = PIPE_MASK_RGBA;
>          binfo.filter = PIPE_TEX_FILTER_LINEAR;
>          binfo.scissor_enable = FALSE;
> -- 
> 2.21.0