i965/gen9+: Switch thread scratch space to non-coherent stateless access.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 23 Nov 2015 17:18:26 +0000 (19:18 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Thu, 26 Nov 2015 12:07:58 +0000 (14:07 +0200)
commit55ffa64daf765b1229364518106a4124bd84b9a7
treebbc31d37dc2eebaf480f08a1b3ba55ba4162d9f7
parentbc8182808aea111aea3cfcba4da3dd861689d890
i965/gen9+: Switch thread scratch space to non-coherent stateless access.

The thread scratch space is thread-local so using the full IA-coherent
stateless surface index (255 since Gen8) is unnecessary and
potentially expensive.  On Gen8 and early steppings of Gen9 this is
not a functional change because the kernel already sets bit 4 of
HDC_CHICKEN0 which overrides all HDC memory access to be non-coherent
in order to workaround a hardware bug.

This happens to fix a full system hang when running any spilling code
on a pre-production SKL GT4e machine I have on my desk (forcing all
HDC access to non-coherent from the kernel up to stepping F0 might be
a good idea though regardless of this patch), and improves performance
of the OglPSBump2 SynMark benchmark run with INTEL_DEBUG=spill_fs by
33% (11 runs, 5% significance) on a production SKL GT2 (on which HDC
IA-coherency is apparently functional so it wouldn't make sense to
disable globally).

Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
src/mesa/drivers/dri/i965/brw_eu.h
src/mesa/drivers/dri/i965/brw_eu_emit.c
src/mesa/drivers/dri/i965/brw_vec4_generator.cpp