mesa: faster logbase2
authorBenjamin Bellec <b.bellec@gmail.com>
Thu, 2 Jun 2011 14:31:16 +0000 (08:31 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 2 Jun 2011 14:31:20 +0000 (08:31 -0600)
With minor clean-ups by Brian Paul.

Signed-off-by: Brian Paul <brianp@vmware.com>
src/mesa/main/teximage.c

index 4ea9a483c92987293943b5395eab7b298166c9b1..3e429110ae93ad9cb2f9faba16cd68520a3e2fee 100644 (file)
@@ -81,31 +81,18 @@ _mesa_free_texmemory(void *m)
 
 
 /*
- * Compute floor(log_base_2(n)).
- * If n < 0 return -1.
+ * Returns the floor form of binary logarithm for a 32-bit integer.
  */
-static int
-logbase2( int n )
-{
-   GLint i = 1;
-   GLint log2 = 0;
-
-   if (n < 0)
-      return -1;
-
-   if (n == 0)
-      return 0;
-
-   while ( n > i ) {
-      i *= 2;
-      log2++;
-   }
-   if (i != n) {
-      return log2 - 1;
-   }
-   else {
-      return log2;
-   }
+static GLuint
+logbase2(GLuint n)
+{
+   GLuint pos = 0;
+   if (n >= 1<<16) { n >>= 16; pos += 16; }
+   if (n >= 1<< 8) { n >>=  8; pos +=  8; }
+   if (n >= 1<< 4) { n >>=  4; pos +=  4; }
+   if (n >= 1<< 2) { n >>=  2; pos +=  2; }
+   if (n >= 1<< 1) {           pos +=  1; }
+   return pos;
 }