diff options
author | marha <marha@users.sourceforge.net> | 2013-07-29 08:50:02 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-07-29 08:50:02 +0200 |
commit | 4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a (patch) | |
tree | 30b754ce6f4bb714f948a1bcec554335d402e42b /mesalib/src/gallium | |
parent | 8647aa1a5029fcd96f134103331ddf3c21bc0a0b (diff) | |
download | vcxsrv-4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a.tar.gz vcxsrv-4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a.tar.bz2 vcxsrv-4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a.zip |
libX11 mesa xserver git update 29 July 2013
xserver commit ff38bbe81ace85bf675bbaa0a9ca5f3b32ede449
libX11 commit 208e586c808e88a2ee819e4450dc27f557afc2bf
mesa commit e847b5ae066bf9a209dad482fcc664f944983633
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; } |