Am 16.03.19 um 02:28 schrieb Qiang Yu: > Signed-off-by: Qiang Yu <yuq...@gmail.com> > --- > src/util/u_math.h | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/src/util/u_math.h b/src/util/u_math.h > index e7dbbe5ca22..ffadfb47282 100644 > --- a/src/util/u_math.h > +++ b/src/util/u_math.h > @@ -389,6 +389,37 @@ float_to_ubyte(float f) > } > } > > +/** > + * Convert ushort to float in [0, 1]. > + */ > +static inline float > +ushort_to_float(ushort us) > +{ > + return (float) us * (1.0f / 65535.0f); > +} > + > + > +/** > + * Convert float in [0,1] to ushort in [0,65535] with clamping. > + */ > +static inline ushort > +float_to_ushort(float f) > +{ > + union fi tmp; > + > + tmp.f = f; > + if (tmp.i < 0) { > + return (ushort) 0; > + } > + else if (tmp.i >= 0x3f800000 /* 1.0f */) { > + return (ushort) 65535; > + } This will convert NaNs to either 0 or 65535, depending on their sign. I think generally it's better to convert this consistently to 0 (gl usually doesn't require this, however d3d10 does).
Roland > + else { > + tmp.f = tmp.f * (65535.0f/65536.0f) + 128.0f; > + return (ushort) tmp.i; > + } > +} > + > static inline float > byte_to_float_tex(int8_t b) > { > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev