i965: Move the post-HiZ-clear flush/stall to intel_hiz_exec
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 6 Jun 2017 00:05:02 +0000 (17:05 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Jun 2017 15:54:54 +0000 (08:54 -0700)
This also changes it to be predicated so we only do the flush/stall on
clears and HiZ resolves.  The docs only say it's needed for clears but
empirical evidence says it's also needed for HiZ resolves.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_blorp.c
src/mesa/drivers/dri/i965/gen8_depth_state.c

index 834f43249a9551789a403cbdfae58853a15e12cd..568ff6980e88762a3d5573ac05887906be78c4e8 100644 (file)
@@ -1098,6 +1098,24 @@ intel_hiz_exec(struct brw_context *brw, struct intel_mipmap_tree *mt,
          brw_emit_pipe_control_flush(brw,
                                      PIPE_CONTROL_DEPTH_CACHE_FLUSH |
                                      PIPE_CONTROL_CS_STALL);
+      } else if (brw->gen >= 8) {
+         /*
+          * From the Broadwell PRM, volume 7, "Depth Buffer Clear":
+          *
+          *    "Depth buffer clear pass using any of the methods (WM_STATE,
+          *    3DSTATE_WM or 3DSTATE_WM_HZ_OP) must be followed by a
+          *    PIPE_CONTROL command with DEPTH_STALL bit and Depth FLUSH bits
+          *    "set" before starting to render.  DepthStall and DepthFlush are
+          *    not needed between consecutive depth clear passes nor is it
+          *    required if the depth clear pass was done with
+          *    'full_surf_clear' bit set in the 3DSTATE_WM_HZ_OP."
+          *
+          *  TODO: Such as the spec says, this could be conditional.
+          */
+         brw_emit_pipe_control_flush(brw,
+                                     PIPE_CONTROL_DEPTH_CACHE_FLUSH |
+                                     PIPE_CONTROL_DEPTH_STALL);
+
       }
    }
 }
index 0fafd7c74599a480554d14282c0b8739d9d13aae..e7c7b9a4bd7f75251a680de74ae67cd494a7e1c5 100644 (file)
@@ -524,22 +524,6 @@ gen8_hiz_exec(struct brw_context *brw, struct intel_mipmap_tree *mt,
    OUT_BATCH(0);
    ADVANCE_BATCH();
 
-   /*
-    * From the Broadwell PRM, volume 7, "Depth Buffer Clear":
-    *
-    *  Depth buffer clear pass using any of the methods (WM_STATE, 3DSTATE_WM
-    *  or 3DSTATE_WM_HZ_OP) must be followed by a PIPE_CONTROL command with
-    *  DEPTH_STALL bit and Depth FLUSH bits "set" before starting to render.
-    *  DepthStall and DepthFlush are not needed between consecutive depth
-    *  clear passes nor is it required if th e depth clear pass was done with
-    *  "full_surf_clear" bit set in the 3DSTATE_WM_HZ_OP.
-    *
-    *  TODO: Such as the spec says, this could be conditional.
-    */
-   brw_emit_pipe_control_flush(brw, 
-                               PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                               PIPE_CONTROL_DEPTH_STALL);
-
    /* Mark this buffer as needing a TC flush, as we've rendered to it. */
    brw_render_cache_set_add_bo(brw, mt->bo);