<div dir="ltr">Forgot to mention it in the commit message, but no shader-db changes on Broadwell.<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 17, 2016 at 10:21 AM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 src/mesa/drivers/dri/i965/brw_fs.cpp | 74 +++++++++---------------------------<br>
 1 file changed, 18 insertions(+), 56 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
index 365231e..9f303d5 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
@@ -2097,28 +2097,27 @@ fs_visitor::opt_algebraic()<br>
    bool progress = false;<br>
<br>
    foreach_block_and_inst(block, fs_inst, inst, cfg) {<br>
-      switch (inst->opcode) {<br>
-      case BRW_OPCODE_MOV:<br>
-         if (inst->src[0].file != IMM)<br>
-            break;<br>
-<br>
-         if (inst->saturate) {<br>
-            if (inst->dst.type != inst->src[0].type)<br>
-               assert(!"unimplemented: saturate mixed types");<br>
+      /* We don't want to do any float algebraic optimizations in the backend<br>
+       * because they aren't bit-for-bit safe and the backend doesn't know<br>
+       * when a value is declared precise or invariant.<br>
+       */<br>
+      if (inst->dst.type == BRW_REGISTER_TYPE_F)<br>
+         continue;<br>
<br>
-            if (brw_saturate_immediate(inst->dst.type,<br>
-                                       &inst->src[0].as_brw_reg())) {<br>
-               inst->saturate = false;<br>
-               progress = true;<br>
-            }<br>
-         }<br>
-         break;<br>
+      bool has_float_src = false;<br>
+      for (unsigned i = 0; i < inst->sources; i++) {<br>
+         if (inst->src[i].type == BRW_REGISTER_TYPE_F)<br>
+            has_float_src = true;<br>
+      }<br>
+      if (has_float_src)<br>
+         continue;<br>
<br>
+      switch (inst->opcode) {<br>
       case BRW_OPCODE_MUL:<br>
         if (inst->src[1].file != IMM)<br>
            continue;<br>
<br>
-        /* a * 1.0 = a */<br>
+        /* a * 1 = a */<br>
         if (inst->src[1].is_one()) {<br>
            inst->opcode = BRW_OPCODE_MOV;<br>
            inst->src[1] = reg_undef;<br>
@@ -2126,7 +2125,7 @@ fs_visitor::opt_algebraic()<br>
            break;<br>
         }<br>
<br>
-         /* a * -1.0 = -a */<br>
+         /* a * -1 = -a */<br>
          if (inst->src[1].is_negative_one()) {<br>
             inst->opcode = BRW_OPCODE_MOV;<br>
             inst->src[0].negate = !inst->src[0].negate;<br>
@@ -2135,7 +2134,7 @@ fs_visitor::opt_algebraic()<br>
             break;<br>
          }<br>
<br>
-         /* a * 0.0 = 0.0 */<br>
+         /* a * 0 = 0 */<br>
          if (inst->src[1].is_zero()) {<br>
             inst->opcode = BRW_OPCODE_MOV;<br>
             inst->src[0] = inst->src[1];<br>
@@ -2157,7 +2156,7 @@ fs_visitor::opt_algebraic()<br>
          if (inst->src[1].file != IMM)<br>
             continue;<br>
<br>
-         /* a + 0.0 = a */<br>
+         /* a + 0 = a */<br>
          if (inst->src[1].is_zero()) {<br>
             inst->opcode = BRW_OPCODE_MOV;<br>
             inst->src[1] = reg_undef;<br>
@@ -2182,16 +2181,6 @@ fs_visitor::opt_algebraic()<br>
             break;<br>
          }<br>
          break;<br>
-      case BRW_OPCODE_LRP:<br>
-         if (inst->src[1].equals(inst->src[2])) {<br>
-            inst->opcode = BRW_OPCODE_MOV;<br>
-            inst->src[0] = inst->src[1];<br>
-            inst->src[1] = reg_undef;<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-            break;<br>
-         }<br>
-         break;<br>
       case BRW_OPCODE_CMP:<br>
          if (inst->conditional_mod == BRW_CONDITIONAL_GE &&<br>
              inst->src[0].abs &&<br>
@@ -2213,33 +2202,6 @@ fs_visitor::opt_algebraic()<br>
             progress = true;<br>
          }<br>
          break;<br>
-      case BRW_OPCODE_MAD:<br>
-         if (inst->src[1].is_zero() || inst->src[2].is_zero()) {<br>
-            inst->opcode = BRW_OPCODE_MOV;<br>
-            inst->src[1] = reg_undef;<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-         } else if (inst->src[0].is_zero()) {<br>
-            inst->opcode = BRW_OPCODE_MUL;<br>
-            inst->src[0] = inst->src[2];<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-         } else if (inst->src[1].is_one()) {<br>
-            inst->opcode = BRW_OPCODE_ADD;<br>
-            inst->src[1] = inst->src[2];<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-         } else if (inst->src[2].is_one()) {<br>
-            inst->opcode = BRW_OPCODE_ADD;<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-         } else if (inst->src[1].file == IMM && inst->src[2].file == IMM) {<br>
-            inst->opcode = BRW_OPCODE_ADD;<br>
-            inst->src[1].f *= inst->src[2].f;<br>
-            inst->src[2] = reg_undef;<br>
-            progress = true;<br>
-         }<br>
-         break;<br>
       case SHADER_OPCODE_BROADCAST:<br>
          if (is_uniform(inst->src[0])) {<br>
             inst->opcode = BRW_OPCODE_MOV;<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.5.0.400.gff86faf<br>
<br>
</font></span></blockquote></div><br></div></div></div>