<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Aug 31, 2018 at 4:35 PM Nanley Chery <<a href="mailto:nanleychery@gmail.com">nanleychery@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Aug 31, 2018 at 04:04:22PM -0500, Jason Ekstrand wrote:<br>
> We had the flush/stall after the clear but missed the one that needs to<br>
> go before the clear.<br>
> <br>
<br>
Does this fix the GPU Hang in DiRT 3?<br></blockquote><div><br></div><div>It appears to mostly fix it, yes.  The remaining hanging seems like it's maybe a kernel hang?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> Cc: <a href="mailto:mesa-stable@lists.freedesktop.org" target="_blank">mesa-stable@lists.freedesktop.org</a><br>
> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=107760" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=107760</a><br>
> ---<br>
>  src/intel/vulkan/anv_blorp.c | 10 ++++++++++<br>
>  1 file changed, 10 insertions(+)<br>
> <br>
> diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c<br>
> index 3dfc8087630..532e8185c0e 100644<br>
> --- a/src/intel/vulkan/anv_blorp.c<br>
> +++ b/src/intel/vulkan/anv_blorp.c<br>
> @@ -1605,6 +1605,16 @@ anv_image_hiz_clear(struct anv_cmd_buffer *cmd_buffer,<br>
>                                     ISL_AUX_USAGE_NONE, &stencil);<br>
>     }<br>
>  <br>
> +   /* From the Sky Lake PRM Volume 7, "Depth Buffer Clear":<br>
> +    *<br>
> +    *    "If other rendering operations have preceded this clear, a<br>
> +    *    PIPE_CONTROL with depth cache flush enabled, Depth Stall bit enabled<br>
> +    *    must be issued before the rectangle primitive used for the depth<br>
> +    *    buffer clear operation."<br>
> +    */<br>
> +   cmd_buffer->state.pending_pipe_bits |=<br>
> +      ANV_PIPE_DEPTH_CACHE_FLUSH_BIT | ANV_PIPE_DEPTH_STALL_BIT;<br>
> +<br>
<br>
The PRMs say this pipecontrol is needed only if you're doing a clear<br>
with WM_STATE or 3DSTATE_WM.<br></blockquote><div><br></div><div>It does seem to imply that, yes.  In GL, we just pull out the big hammer and surrournd every HZ op with that pipe control on both ends regardless of what kind of HiZ op it is.  I know I found cases in GL where these sorts of flushes are needed around ambiguates as well.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I wonder if we should be doing the pipecontrol that comes after<br>
blorp_hiz_clear_depth_stencil() in the case of stencil-only HIZ clears<br>
as well?<br></blockquote><div><br></div><div>Probably?  But I don't think that's related.  The hang I observed was with a depth resolve immediately followed by a fast clear.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If that doesn't fix it, I think it'd be good to comment that we've<br>
observed this pipecontrol be necessary for 3DSTATE_WM_HZ_OP.<br></blockquote><div><br></div><div> I'm happy to add some comments.  We just need to decide how big of a hammer to use.  Like I said above, in GL we pull out a pretty big one.</div><div><br></div><div>--Jason<br></div></div></div>