i965/fs: Detect GRF sources in split_virtual_grfs send-from-GRF code.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 28 Aug 2013 18:22:01 +0000 (11:22 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 30 Aug 2013 22:49:31 +0000 (15:49 -0700)
It is incorrect to assume that src[0] of a SEND-from-GRF opcode is the
GRF.  For example, FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD uses src[1] for
the GRF.

To be safe, loop over all the source registers and mark any GRFs.  We
probably won't ever have more than one, but it's simpler to just check
all three rather than attempting to bail early.

Not observed to fix anything yet, but likely to.  Parallels the bug fix
in the previous commit, which actually does fix known failures.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Cc: mesa-stable@lists.freedesktop.org
src/mesa/drivers/dri/i965/brw_fs.cpp

index b770c0e9e19e04bf5ed0b4dc15e044bd31c591bf..96cb2ee5a60cbd76e20f7316e3a9843e638c8cf2 100644 (file)
@@ -1359,7 +1359,11 @@ fs_visitor::split_virtual_grfs()
        * the send is reading the whole thing.
        */
       if (inst->is_send_from_grf()) {
-         split_grf[inst->src[0].reg] = false;
+         for (int i = 0; i < 3; i++) {
+            if (inst->src[i].file == GRF) {
+               split_grf[inst->src[i].reg] = false;
+            }
+         }
       }
    }