diff options
author | Eric Anholt <[email protected]> | 2015-01-08 18:32:29 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2015-01-10 13:54:12 +1300 |
commit | 72cb6619cb75a92901d372d687505a747a384571 (patch) | |
tree | 90568090fa72cec2f3c6aa78cd274dd5453cece0 /src/gallium/drivers/vc4/vc4_qir.h | |
parent | 3093bfacf042516cd2a0fa2346da1e9df5f321ec (diff) |
vc4: Restructure color packing as a series of channel replacements.
I'm using this in some WIP commits for doing blending in 8888 instead of
vec4. But it also gives us these results immediately, thanks to allowing
more uniforms/immediates in the arguments:
total instructions in shared programs: 41027 -> 40960 (-0.16%)
instructions in affected programs: 4381 -> 4314 (-1.53%)
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_qir.h')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_qir.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h index f7d59a80dac..6dac00fbbd8 100644 --- a/src/gallium/drivers/vc4/vc4_qir.h +++ b/src/gallium/drivers/vc4/vc4_qir.h @@ -100,7 +100,11 @@ enum qop { QOP_VW_SETUP, QOP_VR_SETUP, QOP_PACK_SCALED, - QOP_PACK_COLORS, + QOP_PACK_8888_F, + QOP_PACK_8A_F, + QOP_PACK_8B_F, + QOP_PACK_8C_F, + QOP_PACK_8D_F, QOP_VPM_READ, QOP_TLB_DISCARD_SETUP, QOP_TLB_STENCIL_SETUP, @@ -473,6 +477,11 @@ QIR_ALU1(RSQ) QIR_ALU1(EXP2) QIR_ALU1(LOG2) QIR_ALU2(PACK_SCALED) +QIR_ALU1(PACK_8888_F) +QIR_ALU2(PACK_8A_F) +QIR_ALU2(PACK_8B_F) +QIR_ALU2(PACK_8C_F) +QIR_ALU2(PACK_8D_F) QIR_ALU1(VARY_ADD_C) QIR_NODST_2(TEX_S) QIR_NODST_2(TEX_T) @@ -539,6 +548,14 @@ qir_UNPACK_16_I(struct vc4_compile *c, struct qreg src, int i) } static inline struct qreg +qir_PACK_8_F(struct vc4_compile *c, struct qreg rest, struct qreg val, int chan) +{ + struct qreg t = qir_get_temp(c); + qir_emit(c, qir_inst(QOP_PACK_8A_F + chan, t, rest, val)); + return t; +} + +static inline struct qreg qir_POW(struct vc4_compile *c, struct qreg x, struct qreg y) { return qir_EXP2(c, qir_FMUL(c, |