softpipe: simplify flush_spans
authorKeith Whitwell <keithw@vmware.com>
Fri, 17 Jul 2009 09:47:32 +0000 (10:47 +0100)
committerKeith Whitwell <keithw@vmware.com>
Wed, 22 Jul 2009 11:48:00 +0000 (12:48 +0100)
No loss of performance, but simpler code.

src/gallium/drivers/softpipe/sp_setup.c

index de3ae3c36962b6666eb9631cd8536b948ba4b740..f29fcbd5a28a15a56d8b42ee3486029d3c42d5b5 100644 (file)
@@ -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] */
 }