diff --git a/src/gallium/auxiliary/util/u_half.h b/src/gallium/auxiliary/util/u_half.h index bbcc843c310cdc70e9a1b19cf39ecd0515d0dac2..04c5930276550079338b9a6b836b4cd322a095cf 100644 --- a/src/gallium/auxiliary/util/u_half.h +++ b/src/gallium/auxiliary/util/u_half.h @@ -110,29 +110,7 @@ util_float_to_half_rtz(float f) static inline float util_half_to_float(uint16_t f16) { - union fi infnan; - union fi magic; - union fi f32; - - infnan.ui = 0x8f << 23; - infnan.f = 65536.0f; - magic.ui = 0xef << 23; - - /* Exponent / Mantissa */ - f32.ui = (f16 & 0x7fff) << 13; - - /* Adjust */ - f32.f *= magic.f; - /* XXX: The magic mul relies on denorms being available */ - - /* Inf / NaN */ - if (f32.f >= infnan.f) - f32.ui |= 0xff << 23; - - /* Sign */ - f32.ui |= (uint32_t)(f16 & 0x8000) << 16; - - return f32.f; + return _mesa_half_to_float(f16); } #ifdef __cplusplus diff --git a/src/util/half_float.c b/src/util/half_float.c index 61b512f48edd29fd04b618cee5bbf11eb82e8c18..0d1e6a9551e14d4a58f74724cb0994f3d145c603 100644 --- a/src/util/half_float.c +++ b/src/util/half_float.c @@ -142,7 +142,29 @@ _mesa_float_to_float16_rtz_slow(float val) float _mesa_half_to_float_slow(uint16_t val) { - return util_half_to_float(val); + union fi infnan; + union fi magic; + union fi f32; + + infnan.ui = 0x8f << 23; + infnan.f = 65536.0f; + magic.ui = 0xef << 23; + + /* Exponent / Mantissa */ + f32.ui = (val & 0x7fff) << 13; + + /* Adjust */ + f32.f *= magic.f; + /* XXX: The magic mul relies on denorms being available */ + + /* Inf / NaN */ + if (f32.f >= infnan.f) + f32.ui |= 0xff << 23; + + /* Sign */ + f32.ui |= (uint32_t)(val & 0x8000) << 16; + + return f32.f; } /**