<div dir="ltr">Reviewed-by: Bas Nieuwenhuizen <<a href="mailto:bas@basnieuwenhuizen.nl">bas@basnieuwenhuizen.nl</a>></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 25, 2018 at 3:46 PM, Samuel Pitoiset <span dir="ltr"><<a href="mailto:samuel.pitoiset@gmail.com" target="_blank">samuel.pitoiset@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The GPU hangs when the driver forces a PS_PARTIAL_FLUSH after<br>
a dispatch call (and vice versa for graphics). Something has<br>
changed in the kernel driver because it used to work.<br>
<br>
Signed-off-by: Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com">samuel.pitoiset@gmail.com</a>><br>
---<br>
 src/amd/vulkan/radv_cmd_<wbr>buffer.c | 15 +++++++--------<br>
 1 file changed, 7 insertions(+), 8 deletions(-)<br>
<br>
diff --git a/src/amd/vulkan/radv_cmd_<wbr>buffer.c b/src/amd/vulkan/radv_cmd_<wbr>buffer.c<br>
index 6d512c6070a..ba5fd92f2a1 100644<br>
--- a/src/amd/vulkan/radv_cmd_<wbr>buffer.c<br>
+++ b/src/amd/vulkan/radv_cmd_<wbr>buffer.c<br>
@@ -429,15 +429,14 @@ void radv_cmd_buffer_trace_emit(<wbr>struct radv_cmd_buffer *cmd_buffer)<br>
 }<br>
<br>
 static void<br>
-radv_cmd_buffer_after_draw(<wbr>struct radv_cmd_buffer *cmd_buffer)<br>
+radv_cmd_buffer_after_draw(<wbr>struct radv_cmd_buffer *cmd_buffer,<br>
+                          enum radv_cmd_flush_bits flags)<br>
 {<br>
        if (cmd_buffer->device->instance-<wbr>>debug_flags & RADV_DEBUG_SYNC_SHADERS) {<br>
-               enum radv_cmd_flush_bits flags;<br>
-<br>
-               /* Force wait for graphics/compute engines to be idle. */<br>
-               flags = RADV_CMD_FLAG_PS_PARTIAL_FLUSH |<br>
-                       RADV_CMD_FLAG_CS_PARTIAL_<wbr>FLUSH;<br>
+               assert(flags & (RADV_CMD_FLAG_PS_PARTIAL_<wbr>FLUSH |<br>
+                               RADV_CMD_FLAG_CS_PARTIAL_<wbr>FLUSH));<br>
<br>
+               /* Force wait for graphics or compute engines to be idle. */<br>
                si_cs_emit_cache_flush(cmd_<wbr>buffer->cs, false,<br>
                                       cmd_buffer->device->physical_<wbr>device->rad_info.chip_class,<br>
                                       NULL, 0,<br>
@@ -3501,7 +3500,7 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer,<br>
        }<br>
<br>
        assert(cmd_buffer->cs->cdw <= cdw_max);<br>
-       radv_cmd_buffer_after_draw(<wbr>cmd_buffer);<br>
+       radv_cmd_buffer_after_draw(<wbr>cmd_buffer, RADV_CMD_FLAG_PS_PARTIAL_<wbr>FLUSH);<br>
 }<br>
<br>
 void radv_CmdDraw(<br>
@@ -3821,7 +3820,7 @@ radv_dispatch(struct radv_cmd_buffer *cmd_buffer,<br>
                radv_emit_dispatch_packets(<wbr>cmd_buffer, info);<br>
        }<br>
<br>
-       radv_cmd_buffer_after_draw(<wbr>cmd_buffer);<br>
+       radv_cmd_buffer_after_draw(<wbr>cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_<wbr>FLUSH);<br>
 }<br>
<br>
 void radv_CmdDispatch(<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.16.1<br>
<br>
______________________________<wbr>_________________<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" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>