R-b
On Thu, Sep 05, 2019 at 09:41:38PM +0200, Boris Brezillon wrote: > Rename panfrost_is_scanout() into panfrost_batch_is_scanout(), pass it > a batch instead of a context and move the code to pan_job.c. > > With this in place, we can now test if a batch is targeting a scanout > FB even if this batch is not bound to the context. > > Signed-off-by: Boris Brezillon <boris.brezil...@collabora.com> > --- > src/gallium/drivers/panfrost/pan_context.c | 20 +------------------- > src/gallium/drivers/panfrost/pan_context.h | 3 --- > src/gallium/drivers/panfrost/pan_job.c | 18 ++++++++++++++++++ > src/gallium/drivers/panfrost/pan_job.h | 3 +++ > src/gallium/drivers/panfrost/pan_mfbd.c | 3 +-- > 5 files changed, 23 insertions(+), 24 deletions(-) > > diff --git a/src/gallium/drivers/panfrost/pan_context.c > b/src/gallium/drivers/panfrost/pan_context.c > index f0cd8cdb12ea..e34f5757b1cf 100644 > --- a/src/gallium/drivers/panfrost/pan_context.c > +++ b/src/gallium/drivers/panfrost/pan_context.c > @@ -152,24 +152,6 @@ panfrost_emit_mfbd(struct panfrost_context *ctx, > unsigned vertex_count) > return framebuffer; > } > > -/* Are we currently rendering to the screen (rather than an FBO)? */ > - > -bool > -panfrost_is_scanout(struct panfrost_context *ctx) > -{ > - /* If there is no color buffer, it's an FBO */ > - if (ctx->pipe_framebuffer.nr_cbufs != 1) > - return false; > - > - /* If we're too early that no framebuffer was sent, it's scanout */ > - if (!ctx->pipe_framebuffer.cbufs[0]) > - return true; > - > - return ctx->pipe_framebuffer.cbufs[0]->texture->bind & > PIPE_BIND_DISPLAY_TARGET || > - ctx->pipe_framebuffer.cbufs[0]->texture->bind & > PIPE_BIND_SCANOUT || > - ctx->pipe_framebuffer.cbufs[0]->texture->bind & > PIPE_BIND_SHARED; > -} > - > static void > panfrost_clear( > struct pipe_context *pipe, > @@ -2397,7 +2379,7 @@ panfrost_set_framebuffer_state(struct pipe_context > *pctx, > */ > > struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); > - bool is_scanout = panfrost_is_scanout(ctx); > + bool is_scanout = panfrost_batch_is_scanout(batch); > bool has_draws = batch->last_job.gpu; > > /* Bail out early when the current and new states are the same. */ > diff --git a/src/gallium/drivers/panfrost/pan_context.h > b/src/gallium/drivers/panfrost/pan_context.h > index 586b6d854b6c..02552ed23de2 100644 > --- a/src/gallium/drivers/panfrost/pan_context.h > +++ b/src/gallium/drivers/panfrost/pan_context.h > @@ -315,9 +315,6 @@ panfrost_flush( > struct pipe_fence_handle **fence, > unsigned flags); > > -bool > -panfrost_is_scanout(struct panfrost_context *ctx); > - > mali_ptr panfrost_sfbd_fragment(struct panfrost_context *ctx, bool > has_draws); > mali_ptr panfrost_mfbd_fragment(struct panfrost_context *ctx, bool > has_draws); > > diff --git a/src/gallium/drivers/panfrost/pan_job.c > b/src/gallium/drivers/panfrost/pan_job.c > index 56aab13d7d5a..0f7e139f1a64 100644 > --- a/src/gallium/drivers/panfrost/pan_job.c > +++ b/src/gallium/drivers/panfrost/pan_job.c > @@ -374,6 +374,24 @@ panfrost_batch_intersection_scissor(struct > panfrost_batch *batch, > batch->maxy = MIN2(batch->maxy, maxy); > } > > +/* Are we currently rendering to the screen (rather than an FBO)? */ > + > +bool > +panfrost_batch_is_scanout(struct panfrost_batch *batch) > +{ > + /* If there is no color buffer, it's an FBO */ > + if (batch->key.nr_cbufs != 1) > + return false; > + > + /* If we're too early that no framebuffer was sent, it's scanout */ > + if (!batch->key.cbufs[0]) > + return true; > + > + return batch->key.cbufs[0]->texture->bind & PIPE_BIND_DISPLAY_TARGET > || > + batch->key.cbufs[0]->texture->bind & PIPE_BIND_SCANOUT || > + batch->key.cbufs[0]->texture->bind & PIPE_BIND_SHARED; > +} > + > void > panfrost_batch_init(struct panfrost_context *ctx) > { > diff --git a/src/gallium/drivers/panfrost/pan_job.h > b/src/gallium/drivers/panfrost/pan_job.h > index e885d0b9fbd5..ea832f2c3efe 100644 > --- a/src/gallium/drivers/panfrost/pan_job.h > +++ b/src/gallium/drivers/panfrost/pan_job.h > @@ -195,4 +195,7 @@ panfrost_scoreboard_queue_fused_job_prepend( > void > panfrost_scoreboard_link_batch(struct panfrost_batch *batch); > > +bool > +panfrost_batch_is_scanout(struct panfrost_batch *batch); > + > #endif > diff --git a/src/gallium/drivers/panfrost/pan_mfbd.c > b/src/gallium/drivers/panfrost/pan_mfbd.c > index 618ebd3c4a19..c89b0b44a47c 100644 > --- a/src/gallium/drivers/panfrost/pan_mfbd.c > +++ b/src/gallium/drivers/panfrost/pan_mfbd.c > @@ -455,9 +455,8 @@ panfrost_mfbd_fragment(struct panfrost_context *ctx, bool > has_draws) > * The exception is ReadPixels, but this is not supported on GLES so > we > * can safely ignore it. */ > > - if (panfrost_is_scanout(ctx)) { > + if (panfrost_batch_is_scanout(batch)) > batch->requirements &= ~PAN_REQ_DEPTH_WRITE; > - } > > /* Actualize the requirements */ > > -- > 2.21.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev