gallium/auxiliary: optimize rgb9e5 helper a bit
authorRoland Scheidegger <sroland@vmware.com>
Sun, 9 Aug 2015 00:03:33 +0000 (02:03 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Wed, 26 Aug 2015 00:57:37 +0000 (02:57 +0200)
commit941346a80323c9419b70e3987b900a69ebb08fb4
tree50d34b353c5cdb19cae1e0f79b25b4dca81574c3
parentc1452983b44cc8ee238b8c7e2cfca1105c707487
gallium/auxiliary: optimize rgb9e5 helper a bit

This code (lifted straight from the extension) was doing things the most
inefficient way you could think of.
This drops some of the more expensive float operations, in particular
- int-cast floors (pointless, values always positive)
- 2 raised to (signed) integers (replace with simple exponent manipulation),
  getting rid of a misguided comment in the process (implement with table...)
- float division (replace with mul of reverse of those exponents)
This is like 3 times faster (measured for float3_to_rgb9e5), though it depends
(e.g. llvm is clever enough to replace exp2 with ldexp whereas gcc is not,
division is not too bad on cpus with early-exit divs).
Note that keeping the double math for now (float x + 0.5), as the results may
otherwise differ.

Acked-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/util/u_format_rgb9e5.h