In these places, we care about any sort of send that hits more than one reg,
not just textures.  We don't yet have anything else returning more than one
reg, so there's no change.
---
 src/mesa/drivers/dri/i965/brw_fs.cpp |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index c201f90..374a059 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -1063,8 +1063,10 @@ fs_visitor::split_virtual_grfs()
    foreach_list(node, &this->instructions) {
       fs_inst *inst = (fs_inst *)node;
 
-      /* Texturing produces 4 contiguous registers, so no splitting. */
-      if (inst->is_tex()) {
+      /* If there's a SEND message that requires contiguous destination
+       * registers, no splitting is allowed.
+       */
+      if (inst->regs_written() > 1) {
         split_grf[inst->dst.reg] = false;
       }
    }
@@ -1400,7 +1402,7 @@ fs_visitor::propagate_constants()
         if (scan_inst->dst.file == GRF &&
             scan_inst->dst.reg == inst->dst.reg &&
             (scan_inst->dst.reg_offset == inst->dst.reg_offset ||
-             scan_inst->is_tex())) {
+             scan_inst->regs_written() > 1)) {
            break;
         }
       }
@@ -1602,14 +1604,14 @@ fs_visitor::register_coalesce()
         if (scan_inst->dst.file == GRF) {
            if (scan_inst->dst.reg == inst->dst.reg &&
                (scan_inst->dst.reg_offset == inst->dst.reg_offset ||
-                scan_inst->is_tex())) {
+                scan_inst->regs_written() > 1)) {
               interfered = true;
               break;
            }
            if (inst->src[0].file == GRF &&
                scan_inst->dst.reg == inst->src[0].reg &&
                (scan_inst->dst.reg_offset == inst->src[0].reg_offset ||
-                scan_inst->is_tex())) {
+                scan_inst->regs_written() > 1)) {
               interfered = true;
               break;
            }
@@ -1729,10 +1731,8 @@ fs_visitor::compute_to_mrf()
             * into a compute-to-MRF.
             */
 
+            /* SENDs can only write to GRFs, so no compute-to-MRF. */
            if (scan_inst->is_tex()) {
-              /* texturing writes several continuous regs, so we can't
-               * compute-to-mrf that.
-               */
               break;
            }
 
-- 
1.7.10

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to