summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPauli Nieminen <suokkos@gmail.com>2010-02-07 07:36:13 +0200
committerPauli Nieminen <suokkos@gmail.com>2010-02-07 13:13:24 +0200
commit1a45c2bce7480ef1d125439aed8413bcff0ab468 (patch)
tree7fffda88306f529a2fd1efb38d0101a5653c23ff
parentce1f351963ae1de1218c83c9f846a17c2e3db65e (diff)
mesa: Fix mesa_next_pow_two to return same value if parameter is pow2.
Without subtracting one pow2 value would be rounded up to next pow2 which is not correct behaviour for the function.
-rw-r--r--src/mesa/main/imports.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
index 81cb396b2b..3843f50036 100644
--- a/src/mesa/main/imports.h
+++ b/src/mesa/main/imports.h
@@ -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;