sna/traps: Tune inplace_end_subrows()

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2012-03-17 00:05:47 +00:00
parent d887f209f1
commit 2b4e11923d
1 changed files with 35 additions and 24 deletions

View File

@ -1617,51 +1617,62 @@ inplace_end_subrows(struct active_list *active, uint8_t *row,
{
int cover = 0;
while (width > 4) {
while (width >= 4) {
uint32_t dw;
int v;
dw = *(uint32_t *)buf;
buf += 4;
if (dw == 0){
if (dw == 0) {
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
v |= v << 8;
dw = v | v << 16;
} else if (dw) {
} else {
cover += (int8_t)(dw & 0xff);
assert(cover >= 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
if (cover) {
assert(cover > 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
} else
dw >>= 8;
cover += (int8_t)(dw & 0xff);
assert(cover >= 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
if (cover) {
assert(cover > 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
} else
dw >>= 8;
cover += (int8_t)(dw & 0xff);
assert(cover >= 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
if (cover) {
assert(cover > 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
} else
dw >>= 8;
cover += (int8_t)(dw & 0xff);
assert(cover >= 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
if (cover) {
assert(cover > 0);
v = cover * 256 / (FAST_SAMPLES_X * FAST_SAMPLES_Y);
v -= v >> 8;
dw >>= 8;
dw |= v << 24;
} else
dw >>= 8;
}
*(uint32_t *)row = dw;
row += 4;
width -= 4;
}