[Mesa-stable] [PATCH 3/3] i965: Avoid applying negate to wrong MAD source.
Emil Velikov
emil.l.velikov at gmail.com
Sat Mar 7 10:25:45 PST 2015
On 7 March 2015 at 18:00, Matt Turner <mattst88 at gmail.com> wrote:
> On Sat, Mar 7, 2015 at 9:54 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
>> On 27 February 2015 at 19:34, Matt Turner <mattst88 at gmail.com> wrote:
>>> For some given GLSL IR like (+ (neg x) (* 1.2 x)), the try_emit_mad
>>> function would see that one of the +'s sources was a negate expression
>>> and set mul_negate = true without confirming that it was actually a
>>> multiply.
>>>
>> Hi Matt,
>>
>> This commit does not pick cleanly due to with commit
>> 8cfd1e2ac6b(i965/fs: Emit MAD instructions when possible.) and
>> 3654b6d43ce(i965/fs: Emit MADs from (x + abs(y * z)).)
>
> Those commits are why this one is needed. I think the problem is that
> the i965/vec4 versions of those commits aren't on 10.5, so you can
> simply drop the changes to i965_vec4_visitor.cpp from this patch for
> 10.5.
Thank you Matt. The vec4 changes were during 10.6-devel, thus dropping
leaves the following trivial conflict. I'll give the branch a quick
piglit test and push it.
-Emil
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@@ -452,15 -449,13 +447,18 @@@ fs_visitor::try_emit_mad(ir_expression
mul_negate = true;
}
- if (!mul || mul->operation != ir_binop_mul)
- return false;
+ if (mul && mul->operation == ir_binop_mul)
+ break;
}
+ if (!mul || mul->operation != ir_binop_mul)
+ return false;
+
+ if (nonmul->as_constant() ||
+ mul->operands[0]->as_constant() ||
+ mul->operands[1]->as_constant())
+ return false;
+
nonmul->accept(this);
fs_reg src0 = this->result;
More information about the mesa-stable
mailing list