diff options
author | marha <marha@users.sourceforge.net> | 2013-07-29 08:51:48 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-07-29 08:51:48 +0200 |
commit | 04f3d1515878e535b7e3876264eaa4d43a1e6d54 (patch) | |
tree | 58867d9fa0097be91f1717a693a7ca4b3eb77d71 /mesalib/src/gallium | |
parent | ff986553659472cf191804eadb13c21e8f2b44c0 (diff) | |
parent | 4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a (diff) | |
download | vcxsrv-04f3d1515878e535b7e3876264eaa4d43a1e6d54.tar.gz vcxsrv-04f3d1515878e535b7e3876264eaa4d43a1e6d54.tar.bz2 vcxsrv-04f3d1515878e535b7e3876264eaa4d43a1e6d54.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
libX11 mesa xserver git update 29 July 2013
Diffstat (limited to 'mesalib/src/gallium')
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_format_r11g11b10f.h | 14 | ||||
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_half.h | 12 |
2 files changed, 17 insertions, 9 deletions
diff --git a/mesalib/src/gallium/auxiliary/util/u_format_r11g11b10f.h b/mesalib/src/gallium/auxiliary/util/u_format_r11g11b10f.h index b883b318e..57516c39c 100644 --- a/mesalib/src/gallium/auxiliary/util/u_format_r11g11b10f.h +++ b/mesalib/src/gallium/auxiliary/util/u_format_r11g11b10f.h @@ -69,10 +69,10 @@ static INLINE unsigned f32_to_uf11(float val) */ uf11 = UF11_MAX_EXPONENT; if (mantissa) { - uf11 |= 1; /* NaN */ + uf11 |= 1; /* NaN */ } else { - if (sign) - uf11 = 0; /* 0.0 */ + if (sign) + uf11 = 0; /* 0.0 */ } } else if (sign) { return 0; @@ -155,14 +155,14 @@ static INLINE unsigned f32_to_uf10(float val) */ uf10 = UF10_MAX_EXPONENT; if (mantissa) { - uf10 |= 1; /* NaN */ + uf10 |= 1; /* NaN */ } else { - if (sign) - uf10 = 0; /* 0.0 */ + if (sign) + uf10 = 0; /* 0.0 */ } } else if (sign) { return 0; - } else if (val > 64512.0f) { /* Overflow - flush to Infinity */ + } else if (val > 64512.0f) { /* From the GL_EXT_packed_float spec: * * "Likewise, finite positive values greater than 64512 (the maximum diff --git a/mesalib/src/gallium/auxiliary/util/u_half.h b/mesalib/src/gallium/auxiliary/util/u_half.h index f7009f548..d340b9a7a 100644 --- a/mesalib/src/gallium/auxiliary/util/u_half.h +++ b/mesalib/src/gallium/auxiliary/util/u_half.h @@ -75,9 +75,17 @@ util_float_to_half(float f) f32.f *= magic.f; f32.ui -= round_mask; - /* Clamp to infinity if overflowed */ + /* + * Clamp to max finite value if overflowed. + * OpenGL has completely undefined rounding behavior for float to + * half-float conversions, and this matches what is mandated for float + * to fp11/fp10, which recommend round-to-nearest-finite too. + * (d3d10 is deeply unhappy about flushing such values to infinity, and + * while it also mandates round-to-zero it doesn't care nearly as much + * about that.) + */ if (f32.ui > f16inf) - f32.ui = f16inf; + f32.ui = f16inf - 1; f16 = f32.ui >> 13; } |