softpipe: fix out of bounds quad rasterization bug
authorBrian Paul <brianp@vmware.com>
Tue, 16 Jun 2009 21:41:49 +0000 (15:41 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 16 Jun 2009 21:41:49 +0000 (15:41 -0600)
For some triangles we can generate quads which lie just outside the
surface bounds.  Just check the quad's mask before trying to emit/process
the quad.

Fixes failed assertion in Lightsmark.

src/gallium/drivers/softpipe/sp_setup.c

index accc692b66fc0d6f268fa42f024e4688fe55a06d..e5be65242d6e8b4d35b486b89a50d5fa850d5a62 100644 (file)
@@ -444,7 +444,8 @@ static void flush_spans( struct setup_context *setup )
             mask |= MASK_TOP_RIGHT;
          if (x+1 >= xleft1 && x+1 < xright1)
             mask |= MASK_BOTTOM_RIGHT;
-         EMIT_QUAD( setup, x, setup->span.y, mask );
+         if (mask)
+            EMIT_QUAD( setup, x, setup->span.y, mask );
       }
       break;
 
@@ -458,7 +459,8 @@ static void flush_spans( struct setup_context *setup )
             mask |= MASK_TOP_LEFT;
          if (x+1 >= xleft0 && x+1 < xright0)
             mask |= MASK_TOP_RIGHT;
-         EMIT_QUAD( setup, x, setup->span.y, mask );
+         if (mask)
+            EMIT_QUAD( setup, x, setup->span.y, mask );
       }
       break;
 
@@ -472,7 +474,8 @@ static void flush_spans( struct setup_context *setup )
             mask |= MASK_BOTTOM_LEFT;
          if (x+1 >= xleft1 && x+1 < xright1)
             mask |= MASK_BOTTOM_RIGHT;
-         EMIT_QUAD( setup, x, setup->span.y, mask );
+         if (mask)
+            EMIT_QUAD( setup, x, setup->span.y, mask );
       }
       break;