i965: Don't try to apply the opt_sampler_eot extension for vs
authorNeil Roberts <neil@linux.intel.com>
Tue, 28 Apr 2015 13:20:06 +0000 (14:20 +0100)
committerNeil Roberts <neil@linux.intel.com>
Wed, 29 Apr 2015 14:31:45 +0000 (15:31 +0100)
commit5d4f085a43ccd1122301421f2013e42a3f0a7604
tree90a0724ed8d324214ab86a7e75e500a660eddc79
parentb124dc2b70a1ba546d1ce46578036d263a4287fe
i965: Don't try to apply the opt_sampler_eot extension for vs

The opt_sampler_eot optimisation of fs_visitor effectively assumes
that it is running on a fragment shader because it casts the program
key to a brw_wm_prog_key. However on Skylake fs_visitor can also be
used for vertex shaders. It looks like this usually works anyway
because the optimisation is skipped if key->nr_color_regions != 1.
However for a vertex shader the key is actually a brw_vs_prog_key so
the space for nr_color_regions is probably taken up by
key->base.program_string_id. This can end up making nr_color_regions
be 1 in which case the function will later assert when the last
instruction is not FS_OPCODE_FB_WRITE. This was making the DEQP test
suite assert. Presumably this only happens there because that compiles
a lot of shaders so it would end up with a high value for
program_string_id.

Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp