ir_to_mesa: Implement ir_binop_logic_or using an add w/saturate or add w/SLT
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 30 Jul 2011 17:49:49 +0000 (10:49 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 16 Aug 2011 21:09:40 +0000 (14:09 -0700)
commit41f8ffe5e07c4f389eb13d17ecf0ff776890e9bc
tree60bd671415336847a09be7d09a124fb829d93c1f
parent6ad08989d7c10892919ce1cb9c88c4cf8b73e1dc
ir_to_mesa: Implement ir_binop_logic_or using an add w/saturate or add w/SLT

Logical-or is implemented using addition (followed by clampling to
[0,1]) on values of 0.0 and 1.0.  Replacing the logical-or operators
with addition gives a + b which has a result on the range [0, 2].

Previously a SNE instruction was used to clamp the resulting logic
value to [0,1].  In a fragment shader, using a saturate on the add has
the same effect.  Adding the saturate to the add is free, so (at
least) one instruction is saved.

In a vertex shader, using an SLT on the negation of the add result has
the same effect.  Many older shader architectures do not support the
SNE instruction.  It must be emulated using two SLT instructions and
an ADD.  On these architectures, the single SLT saves two
instructions.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/program/ir_to_mesa.cpp