mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 04:30:29 +01:00
llvmpipe: simplify flush_spans
No loss of performance, but simpler code.
This commit is contained in:
parent
0f55a95b2f
commit
0aa24fa36f
1 changed files with 18 additions and 52 deletions
|
|
@ -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;
|
||||
minleft = block(MIN2(xleft0, xleft1));
|
||||
maxright = block(MAX2(xright0, xright1));
|
||||
|
||||
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;
|
||||
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] */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue