Mesa (master): u_math: add ushort_to_float/float_to_ushort

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 11 02:16:45 UTC 2019


Module: Mesa
Branch: master
Commit: 509dd6e20b1bfa8f42966da1ea421a0b7057485c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=509dd6e20b1bfa8f42966da1ea421a0b7057485c

Author: Qiang Yu <yuq825 at gmail.com>
Date:   Sun Jun 18 00:37:39 2017 +0800

u_math: add ushort_to_float/float_to_ushort

v2:
- return 0 for NaN too

Signed-off-by: Qiang Yu <yuq825 at gmail.com>
Reviewed-by: Roland Scheidegger <sroland at vmware.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..5e712dadb4a 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)
+{
+   /* return 0 for NaN too */
+   if (!(f > 0.0f)) {
+      return (ushort) 0;
+   }
+   else if (f >= 1.0f) {
+      return (ushort) 65535;
+   }
+   else {
+      union fi tmp;
+      tmp.f = f;
+      tmp.f = tmp.f * (65535.0f/65536.0f) + 128.0f;
+      return (ushort) tmp.i;
+   }
+}
+
 static inline float
 byte_to_float_tex(int8_t b)
 {




More information about the mesa-commit mailing list