i965/fs: Add a helper for detecting texturing opcodes.
authorEric Anholt <eric@anholt.net>
Wed, 19 Jan 2011 05:10:03 +0000 (21:10 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 20 Jan 2011 00:29:10 +0000 (16:29 -0800)
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h

index 056bb999822eb26f2a0daeaf85109da92e6408fe..5b595a3c0e79f250367155eb6ec433b40e60c0cf 100644 (file)
@@ -2647,10 +2647,7 @@ fs_visitor::split_virtual_grfs()
       fs_inst *inst = (fs_inst *)iter.get();
 
       /* Texturing produces 4 contiguous registers, so no splitting. */
-      if ((inst->opcode == FS_OPCODE_TEX ||
-          inst->opcode == FS_OPCODE_TXB ||
-          inst->opcode == FS_OPCODE_TXL) &&
-         inst->dst.file == GRF) {
+      if (inst->is_tex()) {
         split_grf[inst->dst.reg] = false;
       }
    }
@@ -2938,7 +2935,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->opcode == FS_OPCODE_TEX)) {
+             scan_inst->is_tex())) {
            break;
         }
       }
@@ -3033,13 +3030,13 @@ 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->opcode == FS_OPCODE_TEX)) {
+                scan_inst->is_tex())) {
               interfered = true;
               break;
            }
            if (scan_inst->dst.reg == inst->src[0].reg &&
                (scan_inst->dst.reg_offset == inst->src[0].reg_offset ||
-                scan_inst->opcode == FS_OPCODE_TEX)) {
+                scan_inst->is_tex())) {
               interfered = true;
               break;
            }
@@ -3120,7 +3117,7 @@ fs_visitor::compute_to_mrf()
             * into a compute-to-MRF.
             */
 
-           if (scan_inst->opcode == FS_OPCODE_TEX) {
+           if (scan_inst->is_tex()) {
               /* texturing writes several continuous regs, so we can't
                * compute-to-mrf that.
                */
index 703e017f12f85ad6d135b1f30942b8e887bab009..65c8a1e020f4d6ceb5191f40898b10537f4dc908 100644 (file)
@@ -306,6 +306,13 @@ public:
              offset == inst->offset);
    }
 
+   bool is_tex()
+   {
+      return (opcode == FS_OPCODE_TEX ||
+             opcode == FS_OPCODE_TXB ||
+             opcode == FS_OPCODE_TXL);
+   }
+
    int opcode; /* BRW_OPCODE_* or FS_OPCODE_* */
    fs_reg dst;
    fs_reg src[3];