On Wed, 09 Mar 2016 09:58:48 +0100, Xavier B <xavi...@gmail.com> wrote:

From: xavier <xavi...@gmail.com>

Previously it was doing this transformation for a Trine 3 shader:
     MUL     R6.x.12,    R13.x.23, 0.5|3f000000
-    MULADD     R4.x.12,    -R6.x.12, 2|40000000, 1|3f800000
+    MULADD     R4.x.12,    -R13.x.23, -1|bf800000, 1|3f800000

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94412
Signed-off-by: Xavier Bouchoux <xavi...@gmail.com>
---
 src/gallium/drivers/r600/sb/sb_expr.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_expr.cpp 
b/src/gallium/drivers/r600/sb/sb_expr.cpp
index 556a05d..3dd3a48 100644
--- a/src/gallium/drivers/r600/sb/sb_expr.cpp
+++ b/src/gallium/drivers/r600/sb/sb_expr.cpp
@@ -598,9 +598,13 @@ bool expr_handler::fold_assoc(alu_node *n) {
        unsigned op = n->bc.op;
        bool allow_neg = false, cur_neg = false;
+       bool distribute_neg = false;
        switch(op) {
        case ALU_OP2_ADD:
+               distribute_neg = true;

+               allow_neg = true;

I'm not sure this change belongs in this patch, or even if its correct.

+               break;
        case ALU_OP2_MUL:
        case ALU_OP2_MUL_IEEE:
                allow_neg = true;
@@ -632,7 +636,7 @@ bool expr_handler::fold_assoc(alu_node *n) {
                if (v1->is_const()) {
                        literal arg = v1->get_const_value();
                        apply_alu_src_mod(a->bc, 1, arg);
-                       if (cur_neg)
+                       if (cur_neg && distribute_neg)
                                arg.f = -arg.f;
                        if (a == n)
@@ -660,7 +664,7 @@ bool expr_handler::fold_assoc(alu_node *n) {
                if (v0->is_const()) {
                        literal arg = v0->get_const_value();
                        apply_alu_src_mod(a->bc, 0, arg);
-                       if (cur_neg)
+                       if (cur_neg && distribute_neg)
                                arg.f = -arg.f;
                        if (last_arg == 0) {


With the allow_neg change removed, patch is
Reviewed-by: Glenn Kennard <glenn.kenn...@gmail.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to