Mesa (master): mesa: Fix mesa_next_pow_two to return same value if parameter is pow2.

Pauli Nieminen suokko at kemper.freedesktop.org
Sun Feb 7 11:14:30 UTC 2010


Module: Mesa
Branch: master
Commit: 1a45c2bce7480ef1d125439aed8413bcff0ab468
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a45c2bce7480ef1d125439aed8413bcff0ab468

Author: Pauli Nieminen <suokkos at gmail.com>
Date:   Sun Feb  7 07:36:13 2010 +0200

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.

---

 src/mesa/main/imports.h |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
index 81cb396..3843f50 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;




More information about the mesa-commit mailing list