summaryrefslogtreecommitdiff
path: root/src/mesa/main/imports.h
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 /src/mesa/main/imports.h
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.
Diffstat (limited to 'src/mesa/main/imports.h')
-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;