util: don't flush overflowing values to infinity in half-float conversion
authorRoland Scheidegger <sroland@vmware.com>
Sat, 27 Jul 2013 01:45:30 +0000 (03:45 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Sat, 27 Jul 2013 14:41:29 +0000 (16:41 +0200)
commitd86fddc87630c5a61d6b170dd6e213a16034bff5
treed5647c0edc6619b80c68b50c4b2b45c9df8fcf18
parent47e528b740c2a470fbf612029c0255d1224d77cd
util: don't flush overflowing values to infinity in half-float conversion

I am not able to find _any_ rounding behavior specified for OpenGL for
float to half-float conversions. However, it is specified for fp11/fp10
which suggests round to next finite value but round-to-zero would also
be allowed, but finite values must not be flushed to infinity in either
case.
Hence I believe it makes sense to do the same for half-floats too.
We could probably also use round-to-zero consistently, which is in fact
required by d3d10 (but it doesn't seem to matter much).
Does not match the mesa core function doing the same though (which is
saying it was built to match intel gpus which I don't believe for a
second as it would cause failures in d3d10, moreover the PRM (for
ivy bridge, not listed in older manuals) while not specifying rounding
behavior clearly states finite numbers are never flushed to infinity).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/util/u_format_r11g11b10f.h
src/gallium/auxiliary/util/u_half.h