aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/gallium/auxiliary/util/u_half.h
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-07-29 08:50:02 +0200
committermarha <marha@users.sourceforge.net>2013-07-29 08:50:02 +0200
commit4c8cee9b5a37db30af50aafcbf54b36b9fd9e03a (patch)
tree30b754ce6f4bb714f948a1bcec554335d402e42b /mesalib/src/gallium/auxiliary/util/u_half.h
parent8647aa1a5029fcd96f134103331ddf3c21bc0a0b (diff)
downloadvcxsrv-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/auxiliary/util/u_half.h')
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_half.h12
1 files changed, 10 insertions, 2 deletions
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;
}