This was a suggested rework as a todo. The only thing that annoy me is that the table is initialized in math init function with logarithm and exponential tables. And ubyte_to_float is not a math function in a way comparable to exp and log. Feel free to suggest me or do by yourself a modification that could place this init in a more appropriate place.


From d04055ee06f2c21747607d865dce086e705babcf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maxence=20Le=20Dor=C3=A9?= <[email protected]>
Date: Sun, 10 Mar 2013 18:15:47 +0100
Subject: [PATCH] util: implement ubyte to float lookup function

---
 src/gallium/auxiliary/util/u_math.c |   10 ++++++++++
 src/gallium/auxiliary/util/u_math.h |    9 +++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_math.c b/src/gallium/auxiliary/util/u_math.c
index 2811475..87d42e4 100644
--- a/src/gallium/auxiliary/util/u_math.c
+++ b/src/gallium/auxiliary/util/u_math.c
@@ -56,6 +56,15 @@ init_log2_table(void)
 }


+static void
+init_ubyte_to_float_table(void)
+{
+   int i;
+   for (i = 0; i < UBYTE_TO_FLOAT_TABLE_SIZE; i++)
+      ubyte_to_float_table[i] = (float) i * (1.0f / 255.0f);
+}
+
+
 /**
  * One time init for math utilities.
  */
@@ -66,6 +75,7 @@ util_init_math(void)
    if (!initialized) {
       init_pow2_table();
       init_log2_table();
+      init_ubyte_to_float_table();
       initialized = TRUE;
    }
 }
diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h
index 607fbec..6795a54 100644
--- a/src/gallium/auxiliary/util/u_math.h
+++ b/src/gallium/auxiliary/util/u_math.h
@@ -523,14 +523,19 @@ fui( float f )
 }


+#define UBYTE_TO_FLOAT_TABLE_SIZE 256
+extern float ubyte_to_float_table[UBYTE_TO_FLOAT_TABLE_SIZE];
+
+
 /**
  * Convert ubyte to float in [0, 1].
- * XXX a 256-entry lookup table would be slightly faster.
  */
+
+
 static INLINE float
 ubyte_to_float(ubyte ub)
 {
-   return (float) ub * (1.0f / 255.0f);
+   return ubyte_to_float_table[ub];
 }


--
1.7.9.5

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to