mesa: Fix mesa_next_pow_two to return same value if parameter is pow2.
authorPauli Nieminen <suokkos@gmail.com>
Sun, 7 Feb 2010 05:36:13 +0000 (07:36 +0200)
committerPauli Nieminen <suokkos@gmail.com>
Sun, 7 Feb 2010 11:13:24 +0000 (13:13 +0200)
Without subtracting one pow2 value would be rounded up to next pow2
which is not correct behaviour for the function.

src/mesa/main/imports.h

index 81cb396..3843f50 100644 (file)
@@ -417,7 +417,8 @@ static INLINE int32_t
 _mesa_next_pow_two_32(uint32_t x)
 {
 #ifdef __GNUC__
-       return 1 << (__builtin_clz(x) ^ 31);
+       x--;
+       return 1 << ((__builtin_clz(x) ^ 31) + 1);
 #else
        x--;
        x |= x >> 1;
@@ -434,10 +435,11 @@ static INLINE int64_t
 _mesa_next_pow_two_64(uint64_t x)
 {
 #ifdef __GNUC__
+       x--;
        if (sizeof(x) == sizeof(long))
-               return 1 << (__builtin_clzl(x) ^ 63);
+               return 1 << ((__builtin_clzl(x) ^ 63) + 1);
        else
-               return 1 << (__builtin_clzll(x) ^ 63);
+               return 1 << ((__builtin_clzll(x) ^ 63) + 1);
 #else
        x--;
        x |= x >> 1;