From 2b4e11923d9f683f43acf8053bcec1701df25c1f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 17 Mar 2012 00:05:47 +0000 Subject: [PATCH] sna/traps: Tune inplace_end_subrows() Signed-off-by: Chris Wilson --- src/sna/sna_trapezoids.c | 59 ++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c index 52be00b9..31a661e5 100644 --- a/src/sna/sna_trapezoids.c +++ b/src/sna/sna_trapezoids.c @@ -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; }