diff options
author | Eric Anholt <[email protected]> | 2015-08-21 00:08:13 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2015-08-21 13:29:26 -0700 |
commit | 89b1b33f44bc6ce71109ac8668529c30b6d6d910 (patch) | |
tree | a1a26d951a33898ee9ac9876308a8776d987da6f /src/gallium/drivers/vc4/vc4_program.c | |
parent | 7e0b868cf31003ada12063398fb91485ed8043dd (diff) |
vc4: Fold the 16-bit integer pack into the instructions generating it.
total instructions in shared programs: 97580 -> 96798 (-0.80%)
instructions in affected programs: 52826 -> 52044 (-1.48%)
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_program.c')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_program.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 6bf4c9eab9b..e002983fdbb 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -1186,22 +1186,23 @@ emit_frag_end(struct vc4_compile *c) static void emit_scaled_viewport_write(struct vc4_compile *c, struct qreg rcp_w) { - struct qreg xyi[2]; + struct qreg packed = qir_get_temp(c); for (int i = 0; i < 2; i++) { struct qreg scale = qir_uniform(c, QUNIFORM_VIEWPORT_X_SCALE + i, 0); - xyi[i] = qir_FTOI(c, qir_FMUL(c, - qir_FMUL(c, - c->outputs[c->output_position_index + i], - scale), - rcp_w)); + struct qreg packed_chan = packed; + packed_chan.pack = QPU_PACK_A_16A + i; + + qir_FTOI_dest(c, packed_chan, + qir_FMUL(c, + qir_FMUL(c, + c->outputs[c->output_position_index + i], + scale), + rcp_w)); } - struct qreg packed = qir_get_temp(c); - qir_PACK_16A_I(c, packed, xyi[0]); - qir_PACK_16B_I(c, packed, xyi[1]); qir_VPM_WRITE(c, packed); } |