intel/compiler/gen9: Pixel shader header only workaround
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Wed, 25 Oct 2017 13:50:11 +0000 (16:50 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Sat, 28 Oct 2017 07:07:29 +0000 (10:07 +0300)
commit97e01adfd549c260efd615289938265306d42a05
tree4ad088a5a01d06a752cf1e423a4672183e2eb0bf
parent2b612431f56e999243dc7f72b3da82a12e2bcac1
intel/compiler/gen9: Pixel shader header only workaround

Fixes intermittent GPU hangs on Broxton with an Intel internal
test case.

There are plenty of similar fragment shaders in piglit that do
not use any varyings and any uniforms. According to the
documentation special timing is needed between pipeline stages.
Apparently we just don't hit that with piglit. Even with the
failing test case one doesn't always get the hang.

Moreover, according to the error states the hang happens
significantly later than the execution of the problematic shader.
There are multiple render cycles (primitive submissions) in between.
I've also seen error states where the ACTHD points outside the
batch. Almost as if the hardware writes somewhere that gets used
later on. That would also explain why piglit doesn't suffer from
this - most tests kick off one render cycle and any corruption
is left unseen.

v2 (Ken): Instead of enabling push constants, enable one of the
          inputs (PSIZ).
v3 (Ken, Jason): Use LAYER instead making vulkan emit_3dstate_sbe()
                 happy.

Cc: "17.3 17.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/compiler/brw_fs.cpp