Mesa (gallium-0.1): gallium: increase table size for fast log/pow functions

Brian Paul brianp at kemper.freedesktop.org
Sat Nov 15 00:02:57 UTC 2008


Module: Mesa
Branch: gallium-0.1
Commit: 7e584a70c492698be18bf4d6372b50d1a1c38385
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e584a70c492698be18bf4d6372b50d1a1c38385

Author: Brian Paul <brian.paul at tungstengraphics.com>
Date:   Fri Nov 14 12:55:05 2008 -0700

gallium: increase table size for fast log/pow functions

The various conformance tests pass now.

---

 src/gallium/auxiliary/util/u_math.c |    2 +-
 src/gallium/auxiliary/util/u_math.h |    8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_math.c b/src/gallium/auxiliary/util/u_math.c
index d1571cd..2811475 100644
--- a/src/gallium/auxiliary/util/u_math.c
+++ b/src/gallium/auxiliary/util/u_math.c
@@ -52,7 +52,7 @@ init_log2_table(void)
 {
    unsigned i;
    for (i = 0; i < LOG2_TABLE_SIZE; i++)
-      log2_table[i] = (float) log2(1.0 + i * (1.0 / LOG2_TABLE_SIZE));
+      log2_table[i] = (float) log2(1.0 + i * (1.0 / LOG2_TABLE_SCALE));
 }
 
 
diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h
index aee69ab..ac11d70 100644
--- a/src/gallium/auxiliary/util/u_math.h
+++ b/src/gallium/auxiliary/util/u_math.h
@@ -246,8 +246,9 @@ util_fast_exp(float x)
 }
 
 
-#define LOG2_TABLE_SIZE_LOG2 8
-#define LOG2_TABLE_SIZE (1 << LOG2_TABLE_SIZE_LOG2)
+#define LOG2_TABLE_SIZE_LOG2 16
+#define LOG2_TABLE_SCALE (1 << LOG2_TABLE_SIZE_LOG2)
+#define LOG2_TABLE_SIZE (LOG2_TABLE_SCALE + 1)
 extern float log2_table[LOG2_TABLE_SIZE];
 
 
@@ -258,7 +259,8 @@ util_fast_log2(float x)
    float epart, mpart;
    num.f = x;
    epart = (float)(((num.i & 0x7f800000) >> 23) - 127);
-   mpart = log2_table[(num.i & 0x007fffff) >> (23 - LOG2_TABLE_SIZE_LOG2)];
+   /* mpart = log2_table[mantissa*LOG2_TABLE_SCALE + 0.5] */
+   mpart = log2_table[((num.i & 0x007fffff) + (1 << (22 - LOG2_TABLE_SIZE_LOG2))) >> (23 - LOG2_TABLE_SIZE_LOG2)];
    return epart + mpart;
 }
 




More information about the mesa-commit mailing list