[Mesa-dev] [PATCH 4/4] i965/blorp: Make post draw flush more explicit
Pohjolainen, Topi
topi.pohjolainen at gmail.com
Thu Jan 19 07:55:03 UTC 2017
On Thu, Jan 19, 2017 at 09:25:19AM +0200, Pohjolainen, Topi wrote:
> On Wed, Jan 18, 2017 at 01:54:43PM -0800, Jason Ekstrand wrote:
> > On Jan 18, 2017 1:47 PM, "Francisco Jerez" <[1]currojerez at riseup.net>
> > wrote:
> >
> > Topi Pohjolainen <[2]topi.pohjolainen at gmail.com> writes:
> > > Blits do not need any special treatment as the target buffer
> > > object is added to render cache just as one does for normal draw.
> > > Color clears and resolves in turn require explicit "end of pipe
> > > synchronization". It is not clear what this means exactly but the
> > > assumption is that render cache flush with command stream stall
> > > should be sufficient.
> > >
> >
> > Don't the clear and resolve paths end up calling genX(blorp_exec),
> > where
> > you used the render cache mechanism to flush a superset of the
> > caches
> > flushed below? Why do you need to synchronize and flush twice?
> >
> > Thanks. I recall having that same thought but apparently forgot it. I
> > think we may still bed the resolve flush (there are extra flushes
> > required around resolves) but not the color clear flush.
>
> I was hesitant to drop them as the spec specifically chooses to point them
> out (see below). Otherwise they wouldn't be any different than normal renders
> which require render target flush before using the buffers again, right?
>
>
> Anyway, I tried dropping both flushes, the one after clear and the one
> after resolve. Jenkins gives me some 16k regressions. Jason, you say that
> resolves need the extra flushes but not clears. Is there something more in the
> specs than the IVB quote I have below? I'm going to check what jenkins says
> about dropping the flush after clear alone.
Dropping the flush only in case of clears but leaving it in place for resolves
gives me 15k regressions.
>
> >
> > > Signed-off-by: Topi Pohjolainen <[3]topi.pohjolainen at intel.com>
> > > ---
> > > src/mesa/drivers/dri/i965/brw_blorp.c | 22
> > ++++++++++++++++++++++
> > > src/mesa/drivers/dri/i965/genX_blorp_exec.c | 5 -----
> > > 2 files changed, 22 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c
> > b/src/mesa/drivers/dri/i965/brw_blorp.c
> > > index 8d58616..845abe3 100644
> > > --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> > > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> > > @@ -908,6 +908,17 @@ do_single_blorp_clear(struct brw_context *brw,
> > struct gl_framebuffer *fb,
> > > blorp_batch_finish(&batch);
> > > }
> > >
> > > + /*
> > > + * IvyBrigde PRM Vol 2, Part 1, "11.7 MCS Buffer for Render
> > Target(s)":
> > > + *
> > > + * Any transition from any value in {Clear, Render, Resolve} to
> > a
> > > + * different value in {Clear, Render, Resolve} requires end of
> > pipe
> > > + * synchronization.
> > > + */
> > > + brw_emit_pipe_control_flush(brw,
> > > + PIPE_CONTROL_RENDER_TARGET_FLUSH |
> > > + PIPE_CONTROL_CS_STALL);
> > > +
> > > return true;
> > > }
> > >
> > > @@ -975,6 +986,17 @@ brw_blorp_resolve_color(struct brw_context *brw,
> > struct intel_mipmap_tree *mt,
> > > brw_blorp_to_isl_format(brw, format, true),
> > > resolve_op);
> > > blorp_batch_finish(&batch);
> > > +
> > > + /*
> > > + * IvyBrigde PRM Vol 2, Part 1, "11.7 MCS Buffer for Render
> > Target(s)":
> > > + *
> > > + * Any transition from any value in {Clear, Render, Resolve} to
> > a
> > > + * different value in {Clear, Render, Resolve} requires end of
> > pipe
> > > + * synchronization.
> > > + */
> > > + brw_emit_pipe_control_flush(brw,
> > > + PIPE_CONTROL_RENDER_TARGET_FLUSH |
> > > + PIPE_CONTROL_CS_STALL);
> > > }
> > >
> > > static void
> > > diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > > index c0cbde5..2c53444 100644
> > > --- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > > +++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > > @@ -260,9 +260,4 @@ retry:
> > > brw->ib.type = -1;
> > >
> > > brw_render_cache_set_add_bo(brw, params->dst.addr.buffer);
> > > -
> > > - /* Flush the sampler cache so any texturing from the destination
> > is
> > > - * coherent.
> > > - */
> > > - brw_emit_mi_flush(brw);
> > > }
> > > --
> > > 2.5.5
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > [4]mesa-dev at lists.freedesktop.org
> > > [5]https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> > _______________________________________________
> > mesa-dev mailing list
> > [6]mesa-dev at lists.freedesktop.org
> > [7]https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> > References
> >
> > 1. mailto:currojerez at riseup.net
> > 2. mailto:topi.pohjolainen at gmail.com
> > 3. mailto:topi.pohjolainen at intel.com
> > 4. mailto:mesa-dev at lists.freedesktop.org
> > 5. https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > 6. mailto:mesa-dev at lists.freedesktop.org
> > 7. https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list