<p dir="ltr"></p>
<p dir="ltr">On Nov 19, 2016 6:56 PM, "Jordan Justen" <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>> wrote:<br>
><br>
> On 2016-11-19 15:08:11, Jason Ekstrand wrote:<br>
> > Fixes 61 Vulkan CTS tests on Haswell<br>
> ><br>
> > Cc: "13.0" <<a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.org</a>><br>
> > ---<br>
> >  src/intel/vulkan/anv_genX.h        |  2 ++<br>
> >  src/intel/vulkan/genX_blorp_exec.c |  2 ++<br>
> >  src/intel/vulkan/genX_cmd_buffer.c | 31 +++++++++++++++++++++++++++++++<br>
> >  3 files changed, 35 insertions(+)<br>
> ><br>
> > diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h<br>
> > index 7937170..296b1ae 100644<br>
> > --- a/src/intel/vulkan/anv_genX.h<br>
> > +++ b/src/intel/vulkan/anv_genX.h<br>
> > @@ -42,6 +42,8 @@ void genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)<br>
> ><br>
> >  void genX(cmd_buffer_apply_pipe_flushes)(struct anv_cmd_buffer *cmd_buffer);<br>
> ><br>
> > +void genX(cmd_buffer_emit_gen7_depth_flush)(struct anv_cmd_buffer *cmd_buffer);<br>
> > +<br>
> >  void genX(flush_pipeline_select_3d)(struct anv_cmd_buffer *cmd_buffer);<br>
> >  void genX(flush_pipeline_select_gpgpu)(struct anv_cmd_buffer *cmd_buffer);<br>
> ><br>
> > diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c<br>
> > index a705de0..721b6e5 100644<br>
> > --- a/src/intel/vulkan/genX_blorp_exec.c<br>
> > +++ b/src/intel/vulkan/genX_blorp_exec.c<br>
> > @@ -150,6 +150,8 @@ genX(blorp_exec)(struct blorp_batch *batch,<br>
> ><br>
> >     genX(flush_pipeline_select_3d)(cmd_buffer);<br>
> ><br>
> > +   genX(cmd_buffer_emit_gen7_depth_flush)(cmd_buffer);<br>
> > +<br>
> >     blorp_exec(batch, params);<br>
> ><br>
> >     cmd_buffer->state.vb_dirty = ~0;<br>
> > diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c<br>
> > index 985bae0..b873a69 100644<br>
> > --- a/src/intel/vulkan/genX_cmd_buffer.c<br>
> > +++ b/src/intel/vulkan/genX_cmd_buffer.c<br>
> > @@ -1978,6 +1978,35 @@ genX(flush_pipeline_select_gpgpu)(struct anv_cmd_buffer *cmd_buffer)<br>
> >     }<br>
> >  }<br>
> ><br>
> > +void<br>
> > +genX(cmd_buffer_emit_gen7_depth_flush)(struct anv_cmd_buffer *cmd_buffer)<br>
> > +{<br>
> > +   if (GEN_GEN > 7)<br>
><br>
> Should it be?<br>
><br>
>    if (!GEN_IS_HASWELL)</p>
<p dir="ltr">I thought it applied to ivy bridge as well</p>
<p dir="ltr">> Reviewed-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>><br>
><br>
> > +      return;<br>
> > +<br>
> > +   /* From the Haswell PRM, documentation for 3DSTATE_DEPTH_BUFFER:<br>
> > +    *<br>
> > +    *    "Restriction: Prior to changing Depth/Stencil Buffer state (i.e., any<br>
> > +    *    combination of 3DSTATE_DEPTH_BUFFER, 3DSTATE_CLEAR_PARAMS,<br>
> > +    *    3DSTATE_STENCIL_BUFFER, 3DSTATE_HIER_DEPTH_BUFFER) SW must first<br>
> > +    *    issue a pipelined depth stall (PIPE_CONTROL with Depth Stall bit<br>
> > +    *    set), followed by a pipelined depth cache flush (PIPE_CONTROL with<br>
> > +    *    Depth Flush Bit set, followed by another pipelined depth stall<br>
> > +    *    (PIPE_CONTROL with Depth Stall Bit set), unless SW can otherwise<br>
> > +    *    guarantee that the pipeline from WM onwards is already flushed (e.g.,<br>
> > +    *    via a preceding MI_FLUSH)."<br>
> > +    */<br>
> > +   anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pipe) {<br>
> > +      pipe.DepthStallEnable = true;<br>
> > +   }<br>
> > +   anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pipe) {<br>
> > +      pipe.DepthCacheFlushEnable = true;<br>
> > +   }<br>
> > +   anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pipe) {<br>
> > +      pipe.DepthStallEnable = true;<br>
> > +   }<br>
> > +}<br>
> > +<br>
> >  static void<br>
> >  cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)<br>
> >  {<br>
> > @@ -1994,6 +2023,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)<br>
> >     /* FIXME: Implement the PMA stall W/A */<br>
> >     /* FIXME: Width and Height are wrong */<br>
> ><br>
> > +   genX(cmd_buffer_emit_gen7_depth_flush)(cmd_buffer);<br>
> > +<br>
> >     /* Emit 3DSTATE_DEPTH_BUFFER */<br>
> >     if (has_depth) {<br>
> >        anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_DEPTH_BUFFER), db) {<br>
> > --<br>
> > 2.5.0.400.gff86faf<br>
> ><br>
> > _______________________________________________<br>
> > mesa-dev mailing list<br>
> > <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> > <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br></p>