|
|
|
@@ -428,65 +428,31 @@ static void flush_spans( struct setup_context *setup ) |
|
|
|
int minleft, maxright; |
|
|
|
int x; |
|
|
|
|
|
|
|
switch (setup->span.y_flags) { |
|
|
|
case 0x3: |
|
|
|
/* both odd and even lines written (both quad rows) */ |
|
|
|
minleft = block(MIN2(xleft0, xleft1)); |
|
|
|
maxright = block(MAX2(xright0, xright1)); |
|
|
|
for (x = minleft; x <= maxright; x += 2) { |
|
|
|
/* determine which of the four pixels is inside the span bounds */ |
|
|
|
uint mask = 0x0; |
|
|
|
if (x >= xleft0 && x < xright0) |
|
|
|
mask |= MASK_TOP_LEFT; |
|
|
|
if (x >= xleft1 && x < xright1) |
|
|
|
mask |= MASK_BOTTOM_LEFT; |
|
|
|
if (x+1 >= xleft0 && x+1 < xright0) |
|
|
|
mask |= MASK_TOP_RIGHT; |
|
|
|
if (x+1 >= xleft1 && x+1 < xright1) |
|
|
|
mask |= MASK_BOTTOM_RIGHT; |
|
|
|
if (mask) |
|
|
|
EMIT_QUAD( setup, x, setup->span.y, mask ); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
case 0x1: |
|
|
|
/* only even line written (quad top row) */ |
|
|
|
minleft = block(xleft0); |
|
|
|
maxright = block(xright0); |
|
|
|
for (x = minleft; x <= maxright; x += 2) { |
|
|
|
uint mask = 0x0; |
|
|
|
if (x >= xleft0 && x < xright0) |
|
|
|
mask |= MASK_TOP_LEFT; |
|
|
|
if (x+1 >= xleft0 && x+1 < xright0) |
|
|
|
mask |= MASK_TOP_RIGHT; |
|
|
|
if (mask) |
|
|
|
EMIT_QUAD( setup, x, setup->span.y, mask ); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
case 0x2: |
|
|
|
/* only odd line written (quad bottom row) */ |
|
|
|
minleft = block(xleft1); |
|
|
|
maxright = block(xright1); |
|
|
|
for (x = minleft; x <= maxright; x += 2) { |
|
|
|
uint mask = 0x0; |
|
|
|
if (x >= xleft1 && x < xright1) |
|
|
|
mask |= MASK_BOTTOM_LEFT; |
|
|
|
if (x+1 >= xleft1 && x+1 < xright1) |
|
|
|
mask |= MASK_BOTTOM_RIGHT; |
|
|
|
if (mask) |
|
|
|
EMIT_QUAD( setup, x, setup->span.y, mask ); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
return; |
|
|
|
minleft = block(MIN2(xleft0, xleft1)); |
|
|
|
maxright = block(MAX2(xright0, xright1)); |
|
|
|
|
|
|
|
for (x = minleft; x <= maxright; x += 2) { |
|
|
|
/* determine which of the four pixels is inside the span bounds */ |
|
|
|
uint mask = 0x0; |
|
|
|
if (x >= xleft0 && x < xright0) |
|
|
|
mask |= MASK_TOP_LEFT; |
|
|
|
if (x >= xleft1 && x < xright1) |
|
|
|
mask |= MASK_BOTTOM_LEFT; |
|
|
|
if (x+1 >= xleft0 && x+1 < xright0) |
|
|
|
mask |= MASK_TOP_RIGHT; |
|
|
|
if (x+1 >= xleft1 && x+1 < xright1) |
|
|
|
mask |= MASK_BOTTOM_RIGHT; |
|
|
|
if (mask) |
|
|
|
EMIT_QUAD( setup, x, setup->span.y, mask ); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setup->span.y = 0; |
|
|
|
setup->span.y_flags = 0; |
|
|
|
setup->span.right[0] = 0; |
|
|
|
setup->span.right[1] = 0; |
|
|
|
setup->span.left[0] = 1; /* greater than right[0] */ |
|
|
|
setup->span.left[1] = 1; /* greater than right[1] */ |
|
|
|
} |
|
|
|
|
|
|
|
|