Mesa (master): i965: Don' t try to apply the opt_sampler_eot extension for vs

Neil Roberts nroberts at kemper.freedesktop.org
Wed Apr 29 14:40:57 UTC 2015


Module: Mesa
Branch: master
Commit: 5d4f085a43ccd1122301421f2013e42a3f0a7604
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5d4f085a43ccd1122301421f2013e42a3f0a7604

Author: Neil Roberts <neil at linux.intel.com>
Date:   Tue Apr 28 14:20:06 2015 +0100

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 at bitplanet.net>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 61ee056..255ddf4 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2548,6 +2548,9 @@ fs_visitor::opt_sampler_eot()
 {
    brw_wm_prog_key *key = (brw_wm_prog_key*) this->key;
 
+   if (stage != MESA_SHADER_FRAGMENT)
+      return false;
+
    if (devinfo->gen < 9 && !devinfo->is_cherryview)
       return false;
 




More information about the mesa-commit mailing list