summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2015-08-18 22:19:12 -0700
committerEric Anholt <eric@anholt.net>2015-08-20 23:43:04 -0700
commit8cae9f2fda37b9868ea973a665e1acc115172b45 (patch)
treeb55d1429f42c32bdc6c977ca38065554b86ca205
parentc800fef2e2c65f7d81215cb316de6f73b15ba6c5 (diff)
vc4: Add algebraic opt for rcp(1.0).
We're generating rcps as part of backend lowering of the packed coordinate in the CS, and we don't want to lower them in NIR because of the extra newton-raphson steps in the common case. However, GLB2.7 is moving a vertex attribute with a 1.0 W component to the position, and that makes us produce some silly RCPs. total instructions in shared programs: 97590 -> 97580 (-0.01%) instructions in affected programs: 74 -> 64 (-13.51%)
-rw-r--r--src/gallium/drivers/vc4/vc4_opt_algebraic.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc4/vc4_opt_algebraic.c b/src/gallium/drivers/vc4/vc4_opt_algebraic.c
index 77028bc026..5b435832b9 100644
--- a/src/gallium/drivers/vc4/vc4_opt_algebraic.c
+++ b/src/gallium/drivers/vc4/vc4_opt_algebraic.c
@@ -275,6 +275,14 @@ qir_opt_algebraic(struct vc4_compile *c)
}
break;
+ case QOP_RCP:
+ if (is_1f(c, inst->src[0])) {
+ replace_with_mov(c, inst, inst->src[0]);
+ progress = true;
+ break;
+ }
+ break;
+
default:
break;
}