On Tue, May 6, 2014 at 7:37 PM, Matt Turner <matts...@gmail.com> wrote: > On Tue, May 6, 2014 at 3:53 AM, Juha-Pekka Heikkila > <juhapekka.heikk...@gmail.com> wrote: >> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikk...@gmail.com> >> --- >> src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 15 ++++++++++----- >> 1 file changed, 10 insertions(+), 5 deletions(-) >> >> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp >> b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp >> index d2dc5fa..22ca528 100644 >> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp >> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp >> @@ -293,10 +293,6 @@ fs_visitor::try_emit_saturate(ir_expression *ir) >> bool >> fs_visitor::try_emit_mad(ir_expression *ir) >> { >> - /* 3-src instructions were introduced in gen6. */ >> - if (brw->gen < 6) >> - return false; >> - >> /* MAD can only handle floating-point data. */ >> if (ir->type != glsl_type::float_type) >> return false; >> @@ -327,7 +323,16 @@ fs_visitor::try_emit_mad(ir_expression *ir) >> fs_reg src2 = this->result; >> >> this->result = fs_reg(this, ir->type); >> - emit(BRW_OPCODE_MAD, this->result, src0, src1, src2); >> + >> + /* 3-src instructions were introduced in gen6. */ >> + if (brw->gen < 6) { >> + fs_reg temp = fs_reg(this, glsl_type::float_type); >> + >> + emit(MUL(temp, src1, src2)); >> + emit(ADD(this->result, src0, temp)); >> + } else { >> + emit(BRW_OPCODE_MAD, this->result, src0, src1, src2); >> + } >> >> return true; >> } >> -- >> 1.8.1.2 > > try_emit_mad is called every time we visit an add-expression, and on > platforms that don't have MAD it fails and the compiler generates > standard code for the expression tree. > > So, if your expression tree was a a multiply-add the compiler will > generate a multiply and an add instruction. Adding code to make > try_emit_mad do that doesn't actually change anything. > > I've made a branch that uses the LINE instruction to perform > multiply-adds when the arguments are immediates. Minus the shader size > explosion in unigine tropics, it seems to be a pretty nice > improvement. But the problem with unigine will have to be sorted out > before it can be committed. > > Maybe you'd be interested in taking a look at that? > > See https://bugs.freedesktop.org/show_bug.cgi?id=77544
I will take a look at your branch, thanks Matt. /Juha-Pekka _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev