<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hello,</div><div><br></div><div>Thanks for reviewing.</div><div>Please find my comment below.<br></div><div><br><div class="gmail_quote"><div dir="ltr">On Thu, Oct 11, 2018 at 12:37 AM 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">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 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 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 *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 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></blockquote><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 contains WARN_ONCE)<br>then regardless a reason (due to 'empty state' or 'failed try') we rather should log a warning<br>that there isn't left space to transfer a batch if it is true.<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.<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<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 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 = 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 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 *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 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 *brw);<br>
>  void intel_batchbuffer_reset_to_saved(struct brw_context *brw);<br>
>  void intel_batchbuffer_require_space(struct brw_context *brw, GLuint 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></blockquote><div>Regards,</div><div>Andrii.<br></div></div></div></div></div></div></div>