<div dir="ltr"><div>Hello,</div><div><br></div><div>Thanks a lot)<br></div><div><br></div><div>Regards,</div><div>Andrii.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 30, 2018 at 9:22 PM Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2018-10-26 01:06:52, andrey simiklit wrote:<br>
> Hi,<br>
> <br>
> Could you please help me with a push. I don't have a right for it :-)<br>
> <br>
<br>
I pushed these two patches. Thanks!<br>
<br>
e4e0fd5ffe1 i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'<br>
a9031bf9b55 i965/batch: avoid reverting batch buffer if saved state is an empty<br>
<br>
-Jordan<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> <br>
> On Thu, Oct 11, 2018 at 9:22 PM Jordan Justen <<a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>><br>
> wrote:<br>
> <br>
> > On 2018-10-11 03:01:56, andrey simiklit wrote:<br>
> > > Hello,<br>
> > ><br>
> > > Thanks for reviewing.<br>
> > > Please find my comment below.<br>
> > ><br>
> > > On Thu, Oct 11, 2018 at 12:37 AM Jordan Justen <<br>
> > <a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>><br>
> > > wrote:<br>
> > ><br>
> > > > On 2018-09-12 09:05:44,  wrote:<br>
> > > > > From: Andrii Simiklit <<a href="mailto:andrii.simiklit@globallogic.com" target="_blank">andrii.simiklit@globallogic.com</a>><br>
> > > > ><br>
> > > > > There's no point reverting to the last saved point if that save<br>
> > point is<br>
> > > > > the empty batch, we will just repeat ourselves.<br>
> > > > ><br>
> > > > > CC: Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk" target="_blank">chris@chris-wilson.co.uk</a>><br>
> > > > > Fixes: 3faf56ffbdeb "intel: Add an interface for saving/restoring<br>
> > > > >                      the batchbuffer state."<br>
> > > > > Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=107626" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=107626</a><br>
> > > > > ---<br>
> > > > >  src/mesa/drivers/dri/i965/brw_compute.c       | 3 ++-<br>
> > > > >  src/mesa/drivers/dri/i965/brw_draw.c          | 3 ++-<br>
> > > > >  src/mesa/drivers/dri/i965/genX_blorp_exec.c   | 3 ++-<br>
> > > > >  src/mesa/drivers/dri/i965/intel_batchbuffer.c | 7 +++++++<br>
> > > > >  src/mesa/drivers/dri/i965/intel_batchbuffer.h | 1 +<br>
> > > > >  5 files changed, 14 insertions(+), 3 deletions(-)<br>
> > > > ><br>
> > > > > diff --git a/src/mesa/drivers/dri/i965/brw_compute.c<br>
> > > > b/src/mesa/drivers/dri/i965/brw_compute.c<br>
> > > > > index de08fc3..5c8e3a5 100644<br>
> > > > > --- a/src/mesa/drivers/dri/i965/brw_compute.c<br>
> > > > > +++ b/src/mesa/drivers/dri/i965/brw_compute.c<br>
> > > > > @@ -167,7 +167,7 @@ static void<br>
> > > > >  brw_dispatch_compute_common(struct gl_context *ctx)<br>
> > > > >  {<br>
> > > > >     struct brw_context *brw = brw_context(ctx);<br>
> > > > > -   bool fail_next = false;<br>
> > > > > +   bool fail_next;<br>
> > > > ><br>
> > > > >     if (!_mesa_check_conditional_render(ctx))<br>
> > > > >        return;<br>
> > > > > @@ -185,6 +185,7 @@ brw_dispatch_compute_common(struct gl_context<br>
> > *ctx)<br>
> > > > >     intel_batchbuffer_require_space(brw, 600);<br>
> > > > >     brw_require_statebuffer_space(brw, 2500);<br>
> > > > >     intel_batchbuffer_save_state(brw);<br>
> > > > > +   fail_next = intel_batchbuffer_saved_state_is_empty(brw);<br>
> > > > ><br>
> > > > >   retry:<br>
> > > > >     brw->batch.no_wrap = true;<br>
> > > > > diff --git a/src/mesa/drivers/dri/i965/brw_draw.c<br>
> > > > b/src/mesa/drivers/dri/i965/brw_draw.c<br>
> > > > > index 8536c04..19ee396 100644<br>
> > > > > --- a/src/mesa/drivers/dri/i965/brw_draw.c<br>
> > > > > +++ b/src/mesa/drivers/dri/i965/brw_draw.c<br>
> > > > > @@ -885,7 +885,7 @@ brw_draw_single_prim(struct gl_context *ctx,<br>
> > > > >  {<br>
> > > > >     struct brw_context *brw = brw_context(ctx);<br>
> > > > >     const struct gen_device_info *devinfo = &brw->screen->devinfo;<br>
> > > > > -   bool fail_next = false;<br>
> > > > > +   bool fail_next;<br>
> > > > ><br>
> > > > >     /* Flag BRW_NEW_DRAW_CALL on every draw.  This allows us to have<br>
> > > > >      * atoms that happen on every draw call.<br>
> > > > > @@ -898,6 +898,7 @@ brw_draw_single_prim(struct gl_context *ctx,<br>
> > > > >     intel_batchbuffer_require_space(brw, 1500);<br>
> > > > >     brw_require_statebuffer_space(brw, 2400);<br>
> > > > >     intel_batchbuffer_save_state(brw);<br>
> > > > > +   fail_next = intel_batchbuffer_saved_state_is_empty(brw);<br>
> > > ><br>
> > > > It seems like this will cause the WARN_ONCE to be hit incorrectly.<br>
> > > > What about adding a 'bool empty_state', and checking that before<br>
> > > > fail_next in the code that follows. If empty_state is true, I guess<br>
> > > > you want to flush, but not emit the WARN_ONCE?<br>
> > > ><br>
> > ><br>
> > > We just predict that first step (non-failed branch without WARN_ONCE)<br>
> > > which should make the batch an empty will not make sense<br>
> > > because it is already empty and we immediately pass into a failed branch.<br>
> > > All WARN_ONCE calls are conditional ('ret == -ENOSPC') there.<br>
> > > I guess that if we came to the failed branch (I mean branch which<br>
> > contains<br>
> > > WARN_ONCE)<br>
> > > then regardless a reason (due to 'empty state' or 'failed try') we rather<br>
> > > should log a warning<br>
> > > that there isn't left space to transfer a batch if it is true.<br>
> ><br>
> > Oh. You are right. It sounds like a reasonable warning message for<br>
> > that case. So, there's no need to change the patch.<br>
> ><br>
> > -Jordan<br>
> ><br>
> > ><br>
> > > What do you think about it?<br>
> > > Should we log a warning if calls of<br>
> > > 'brw_upload_render_state' + 'brw_emit_prim' functions<br>
> > > for an empty batch lead to ENOSPC error?<br>
> > ><br>
> > > Anyway if it is unacceptable for you<br>
> > > I can implement the solution which you suggested.<br>
> > ><br>
> > ><br>
> > > ><br>
> > > > With that change,<br>
> > > > series Reviewed-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>><br>
> > > ><br>
> > > > As always, it could be nice to get an r-b, or acked-by from Ken. :)<br>
> > > ><br>
> > > > -Jordan<br>
> > > ><br>
> > > > ><br>
> > > > >     if (brw->num_instances != prim->num_instances ||<br>
> > > > >         brw->basevertex != prim->basevertex ||<br>
> > > > > diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c<br>
> > > > b/src/mesa/drivers/dri/i965/genX_blorp_exec.c<br>
> > > > > index 34bfcad..fd9ce93 100644<br>
> > > > > --- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c<br>
> > > > > +++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c<br>
> > > > > @@ -268,7 +268,7 @@ genX(blorp_exec)(struct blorp_batch *batch,<br>
> > > > >     assert(batch->blorp->driver_ctx == batch->driver_batch);<br>
> > > > >     struct brw_context *brw = batch->driver_batch;<br>
> > > > >     struct gl_context *ctx = &brw->ctx;<br>
> > > > > -   bool check_aperture_failed_once = false;<br>
> > > > > +   bool check_aperture_failed_once;<br>
> > > > ><br>
> > > > >  #if GEN_GEN >= 11<br>
> > > > >     /* The PIPE_CONTROL command description says:<br>
> > > > > @@ -309,6 +309,7 @@ retry:<br>
> > > > >     intel_batchbuffer_require_space(brw, 1400);<br>
> > > > >     brw_require_statebuffer_space(brw, 600);<br>
> > > > >     intel_batchbuffer_save_state(brw);<br>
> > > > > +   check_aperture_failed_once =<br>
> > > > intel_batchbuffer_saved_state_is_empty(brw);<br>
> > > > >     brw->batch.no_wrap = true;<br>
> > > > ><br>
> > > > >  #if GEN_GEN == 6<br>
> > > > > diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c<br>
> > > > b/src/mesa/drivers/dri/i965/intel_batchbuffer.c<br>
> > > > > index 4363b14..2dc6eb8 100644<br>
> > > > > --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c<br>
> > > > > +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c<br>
> > > > > @@ -299,6 +299,13 @@ intel_batchbuffer_save_state(struct brw_context<br>
> > > > *brw)<br>
> > > > >     brw->batch.saved.exec_count = brw->batch.exec_count;<br>
> > > > >  }<br>
> > > > ><br>
> > > > > +bool<br>
> > > > > +intel_batchbuffer_saved_state_is_empty(struct brw_context *brw)<br>
> > > > > +{<br>
> > > > > +   struct intel_batchbuffer *batch = &brw->batch;<br>
> > > > > +   return (batch->saved.map_next == batch->batch.map);<br>
> > > > > +}<br>
> > > > > +<br>
> > > > >  void<br>
> > > > >  intel_batchbuffer_reset_to_saved(struct brw_context *brw)<br>
> > > > >  {<br>
> > > > > diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h<br>
> > > > b/src/mesa/drivers/dri/i965/intel_batchbuffer.h<br>
> > > > > index 0632142..91720da 100644<br>
> > > > > --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h<br>
> > > > > +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h<br>
> > > > > @@ -24,6 +24,7 @@ struct intel_batchbuffer;<br>
> > > > >  void intel_batchbuffer_init(struct brw_context *brw);<br>
> > > > >  void intel_batchbuffer_free(struct intel_batchbuffer *batch);<br>
> > > > >  void intel_batchbuffer_save_state(struct brw_context *brw);<br>
> > > > > +bool intel_batchbuffer_saved_state_is_empty(struct brw_context<br>
> > *brw);<br>
> > > > >  void intel_batchbuffer_reset_to_saved(struct brw_context *brw);<br>
> > > > >  void intel_batchbuffer_require_space(struct brw_context *brw, GLuint<br>
> > > > sz);<br>
> > > > >  int _intel_batchbuffer_flush_fence(struct brw_context *brw,<br>
> > > > > --<br>
> > > > > 2.7.4<br>
> > > > ><br>
> > > > > _______________________________________________<br>
> > > > > mesa-dev mailing list<br>
> > > > > <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
> > > > > <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
> > ><br>
> > > Regards,<br>
> > > Andrii.<br>
> ><br>
</blockquote></div></div>