u_math: bring over u_bit_scan_consecutive_range.

This just takes this fn over from mesa to use in virgl

Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
macos/master
Dave Airlie 6 years ago
parent 7f962064cd
commit dfa1e8c943
  1. 25
      src/gallium/auxiliary/util/u_math.h

@ -584,6 +584,31 @@ static inline int u_bit_scan(unsigned *mask)
return i; return i;
} }
/* For looping over a bitmask when you want to loop over consecutive bits
* manually, for example:
*
* while (mask) {
* int start, count, i;
*
* u_bit_scan_consecutive_range(&mask, &start, &count);
*
* for (i = 0; i < count; i++)
* ... process element (start+i)
* }
*/
static inline void
u_bit_scan_consecutive_range(unsigned *mask, int *start, int *count)
{
if (*mask == 0xffffffff) {
*start = 0;
*count = 32;
*mask = 0;
return;
}
*start = ffs(*mask) - 1;
*count = ffs(~(*mask >> *start)) - 1;
*mask &= ~(((1u << *count) - 1) << *start);
}
/** /**
* Return float bits. * Return float bits.

Loading…
Cancel
Save