Without this stall, the test group ES3-CTS.functional.fbo.msaa.\* hangs
about 1 out of every 2 or 3 times on my Sky Lake GT3 laptop.  With the
flush and stall, I can run it 6 times in a row without a hang.

Cc: "17.1" <mesa-sta...@lists.freedesktop.org>
---
 src/mesa/drivers/dri/i965/brw_blorp.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c 
b/src/mesa/drivers/dri/i965/brw_blorp.c
index 763ce05..38925d9 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -1021,6 +1021,23 @@ intel_hiz_exec(struct brw_context *brw, struct 
intel_mipmap_tree *mt,
 {
    const char *opname = NULL;
 
+   /* From the Ivy Bridge PRM, Vol. 2, pt. 1, section 11.5.3.1 "Depth
+    * Buffer Clear":
+    *
+    *    "If other rendering operations have preceded this clear, a
+    *    PIPE_CONTROL with depth cache flush enabled, Depth Stall bit enabled
+    *    must be issued before the rectangle primitive used for the depth
+    *    buffer clear operation."
+    *
+    * In the Sky Lake and Broadwell docs, this text only appears in the
+    * section on legacy HiZ ops.  However, adding it seems to solve some hangs
+    * on Sky Lake so it appears it's needed regardless of which kind of HiZ
+    * operation is performed.
+    */
+   brw_emit_pipe_control_flush(brw,
+                               PIPE_CONTROL_DEPTH_CACHE_FLUSH |
+                               PIPE_CONTROL_DEPTH_STALL);
+
    switch (op) {
    case BLORP_HIZ_OP_DEPTH_RESOLVE:
       opname = "depth resolve";
-- 
2.5.0.400.gff86faf

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to