drm/i915: Enable the HiZ RAW Stall Optimization on Broadwell.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 13 Jan 2015 20:46:52 +0000 (12:46 -0800)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Sat, 17 Jan 2015 04:01:19 +0000 (05:01 +0100)
This is an important optimization for avoiding read-after-write (RAW)
stalls in the HiZ buffer.  Certain workloads would run very slowly with
HiZ enabled, but run much faster with the "hiz=false" driconf option.
With this patch, they run at full speed even with HiZ.

Improves performance in OglVSInstancing by 3.2x on Broadwell GT3e
(Iris Pro 6200).

Thanks to Jesse Barnes and Ben Widawsky for their help in tracking this
down.  Thanks to Chris Wilson for showing me the new workarounds system.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_ringbuffer.c

index dabc1d8d2ae3ce5ce1409978e85c4036afaa319c..0df15a4ad47f34bf5345d6d786ef3c6c3315a696 100644 (file)
@@ -796,6 +796,16 @@ static int bdw_init_workarounds(struct intel_engine_cs *ring)
                          HDC_DONOT_FETCH_MEM_WHEN_MASKED |
                          (IS_BDW_GT3(dev) ? HDC_FENCE_DEST_SLM_DISABLE : 0));
 
+       /* From the Haswell PRM, Command Reference: Registers, CACHE_MODE_0:
+        * "The Hierarchical Z RAW Stall Optimization allows non-overlapping
+        *  polygons in the same 8x4 pixel/sample area to be processed without
+        *  stalling waiting for the earlier ones to write to Hierarchical Z
+        *  buffer."
+        *
+        * This optimization is off by default for Broadwell; turn it on.
+        */
+       WA_CLR_BIT_MASKED(CACHE_MODE_0_GEN7, HIZ_RAW_STALL_OPT_DISABLE);
+
        /* Wa4x4STCOptimizationDisable:bdw */
        WA_SET_BIT_MASKED(CACHE_MODE_1,
                          GEN8_4x4_STC_OPTIMIZATION_DISABLE);