Fix bug with nearest_power_of_2_templated
We have to shift log(num of bits) many times not num of bytes many.
This commit is contained in:
parent
96b60c281f
commit
0b24a13fa0
1 changed files with 10 additions and 1 deletions
|
@ -188,13 +188,22 @@ static _FORCE_INLINE_ unsigned int nearest_power_of_2(unsigned int x) {
|
||||||
return ++x;
|
return ++x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We need this definition inside the function below.
|
||||||
|
static inline int get_shift_from_power_of_2(unsigned int p_pixel);
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static _FORCE_INLINE_ T nearest_power_of_2_templated(T x) {
|
static _FORCE_INLINE_ T nearest_power_of_2_templated(T x) {
|
||||||
|
|
||||||
--x;
|
--x;
|
||||||
|
|
||||||
|
// The number of operations on x is the base two logarithm
|
||||||
|
// of the p_number of bits in the type. Add three to account
|
||||||
|
// for sizeof(T) being in bytes.
|
||||||
|
size_t num = get_shift_from_power_of_2(sizeof(T)) + 3;
|
||||||
|
|
||||||
// If the compiler is smart, it unrolls this loop
|
// If the compiler is smart, it unrolls this loop
|
||||||
// If its dumb, this is a bit slow.
|
// If its dumb, this is a bit slow.
|
||||||
for (size_t i = 0; i < sizeof(T); i++)
|
for (size_t i = 0; i < num; i++)
|
||||||
x |= x >> (1 << i);
|
x |= x >> (1 << i);
|
||||||
|
|
||||||
return ++x;
|
return ++x;
|
||||||
|
|
Loading…
Reference in a new issue