util: return 0 for NaNs in float_to_ubyte
authorRoland Scheidegger <sroland@vmware.com>
Fri, 3 Aug 2018 03:34:07 +0000 (05:34 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 3 Aug 2018 15:07:38 +0000 (17:07 +0200)
commitc72f91debab68d2c0ac7f71807a451b696859afd
tree7a8e2bb9aeba697e0f55c8fa85e9bc51e39f4f15
parent1d900e55fd5587d06184e01e57859cedbbdc9af8
util: return 0 for NaNs in float_to_ubyte

d3d10 requires NaNs to get converted to 0 for float->unorm conversions
(and float->int etc.). GL spec probably doesn't care in general, but it
would make sense to have reasonable behavior in any case imho - the
old code was converting negative NaNs to 0, and positive NaNs to 255.
(Note that using float comparison isn't actually all that much more
effort in any case, at least with sse2 it's just float comparison
(ucommiss) instead of int one - I converted the second comparison
to float too simply because it saves the probably somewhat expensive
transfer of the float from simd to int domain (with sse2 via stack),
so the generated code actually has 2 less instructions, although float
comparisons are more expensive than int ones.)

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/auxiliary/util/u_math.h