summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-04-01 16:42:36 -0700
committerMatt Turner <mattst88@gmail.com>2014-04-30 11:41:29 -0700
commit1e50bc9ee170b6a4c212c4fd8e019beb43a99603 (patch)
tree4ed6f9489f48a45ec72e362d5f4749a8c7a3f2b4 /src/mesa
parent475f5ff64d7f64a9df2d7aabc772487bf24d1dd5 (diff)
i965/fs: Remove 'mul_arg' from try_emit_mad().
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.h2
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_visitor.cpp17
2 files changed, 12 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 2a1a81d670d..24d995bb625 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -422,7 +422,7 @@ public:
void emit_minmax(uint32_t conditionalmod, const fs_reg &dst,
const fs_reg &src0, const fs_reg &src1);
bool try_emit_saturate(ir_expression *ir);
- bool try_emit_mad(ir_expression *ir, int mul_arg);
+ bool try_emit_mad(ir_expression *ir);
void try_replace_with_sel();
bool opt_peephole_sel();
bool opt_peephole_predicated_break();
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 2aa3acddcf6..aa177cbd276 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -291,7 +291,7 @@ fs_visitor::try_emit_saturate(ir_expression *ir)
}
bool
-fs_visitor::try_emit_mad(ir_expression *ir, int mul_arg)
+fs_visitor::try_emit_mad(ir_expression *ir)
{
/* 3-src instructions were introduced in gen6. */
if (brw->gen < 6)
@@ -301,11 +301,16 @@ fs_visitor::try_emit_mad(ir_expression *ir, int mul_arg)
if (ir->type != glsl_type::float_type)
return false;
- ir_rvalue *nonmul = ir->operands[1 - mul_arg];
- ir_expression *mul = ir->operands[mul_arg]->as_expression();
+ ir_rvalue *nonmul = ir->operands[1];
+ ir_expression *mul = ir->operands[0]->as_expression();
- if (!mul || mul->operation != ir_binop_mul)
- return false;
+ if (!mul || mul->operation != ir_binop_mul) {
+ nonmul = ir->operands[0];
+ mul = ir->operands[1]->as_expression();
+
+ if (!mul || mul->operation != ir_binop_mul)
+ return false;
+ }
if (nonmul->as_constant() ||
mul->operands[0]->as_constant() ||
@@ -339,7 +344,7 @@ fs_visitor::visit(ir_expression *ir)
if (try_emit_saturate(ir))
return;
if (ir->operation == ir_binop_add) {
- if (try_emit_mad(ir, 0) || try_emit_mad(ir, 1))
+ if (try_emit_mad(ir))
return;
}