[Mesa-dev] [PATCH] i965: Perform manual preemption checks between commands
Chris Wilson
chris at chris-wilson.co.uk
Tue Mar 5 19:50:24 UTC 2019
Quoting Rafael Antognolli (2019-03-05 19:33:03)
> On Tue, Mar 05, 2019 at 09:40:20AM +0000, Chris Wilson wrote:
> > Not all commands support being preempted as they execute, and for those
> > make sure we at least check for being preempted before we start so as to
> > try and minimise the latency of whomever is more important than
> > ourselves.
> >
> > Cc: Jari Tahvanainen <jari.tahvanainen at intel.com>,
> > Cc: Rafael Antognolli <rafael.antognolli at intel.com>
> > Cc: Kenneth Graunke <kenneth at whitecape.org>
> > ---
> > Always double check before you hit send.
> > ---
> > src/mesa/drivers/dri/i965/brw_defines.h | 1 +
> > src/mesa/drivers/dri/i965/brw_draw.c | 7 +++++++
> > 2 files changed, 8 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
> > index 2729a54e144..ef71c556cca 100644
> > --- a/src/mesa/drivers/dri/i965/brw_defines.h
> > +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> > @@ -1420,6 +1420,7 @@ enum brw_pixel_shader_coverage_mask_mode {
> >
> > #define MI_NOOP (CMD_MI | 0)
> >
> > +#define MI_ARB_CHECK (CMD_MI | 0x5 << 23)
> > #define MI_BATCH_BUFFER_END (CMD_MI | 0xA << 23)
> >
> > #define MI_FLUSH (CMD_MI | (4 << 23))
> > diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
> > index d07349419cc..a04e334ffc4 100644
> > --- a/src/mesa/drivers/dri/i965/brw_draw.c
> > +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> > @@ -196,6 +196,13 @@ brw_emit_prim(struct brw_context *brw,
> > if (verts_per_instance == 0 && !prim->is_indirect && !xfb_obj)
> > return;
> >
> > + /* If this object is not itself preemptible, check before we begin. */
> > + if (!brw->object_preemption) {
> > + BEGIN_BATCH(1);
> > + OUT_BATCH(MI_ARB_CHECK);
> > + ADVANCE_BATCH();
> > + }
> > +
>
> "The command streamer will preempt in the case arbitration is enabled,
> there is a pending execution list and this command is currently being
> parsed."
>
> If there is a pending execution list, shouldn't we have been preempted
> already, since mid-batch preemption is supposed to be enabled?
No, it still only occurs on certain instructions, not every instruction
boundary.
-Chris
More information about the mesa-dev
mailing list