瀏覽代碼

llvmpipe: simplify flush_spans

No loss of performance, but simpler code.
tags/mesa_7_6_rc1
Keith Whitwell 16 年之前
父節點
當前提交
0aa24fa36f
共有 1 個檔案被更改,包括 19 行新增53 行删除
  1. 19
    53
      src/gallium/drivers/llvmpipe/lp_setup.c

+ 19
- 53
src/gallium/drivers/llvmpipe/lp_setup.c 查看文件

@@ -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] */
}



Loading…
取消
儲存