llvmpipe: fix flatshading in new line code
authorKeith Whitwell <keithw@vmware.com>
Tue, 21 Sep 2010 13:28:51 +0000 (14:28 +0100)
committerKeith Whitwell <keithw@vmware.com>
Tue, 21 Sep 2010 13:36:55 +0000 (14:36 +0100)
Calculate interpolants before rearranging the vertices.

src/gallium/drivers/llvmpipe/lp_setup_line.c

index 9f090d1992ef6508090ce757cf6c3d56a21e815c..829eb8a5a045e8a005bdb93d9c668fbb48f9cbd6 100644 (file)
@@ -292,6 +292,7 @@ try_setup_line( struct lp_setup_context *setup,
    float x2diff;
    float y2diff;
    float dx, dy;
+   float area;
 
    boolean draw_start;
    boolean draw_end;
@@ -311,6 +312,18 @@ try_setup_line( struct lp_setup_context *setup,
 
    dx = v1[0][0] - v2[0][0];
    dy = v1[0][1] - v2[0][1];
+   area = (dx * dx  + dy * dy);
+   if (area == 0) {
+      LP_COUNT(nr_culled_tris);
+      return TRUE;
+   }
+
+   info.oneoverarea = 1.0f / area;
+   info.dx = dx;
+   info.dy = dy;
+   info.v1 = v1;
+   info.v2 = v2;
+
   
    /* X-MAJOR LINE */
    if (fabsf(dx) >= fabsf(dy)) {
@@ -573,12 +586,6 @@ try_setup_line( struct lp_setup_context *setup,
    line->plane[3].dcdx = y[3] - y[0];
 
 
-   info.oneoverarea = 1.0f / (dx * dx  + dy * dy);    
-   info.dx = dx;
-   info.dy = dy;
-   info.v1 = v1;
-   info.v2 = v2;
-
    /* Setup parameter interpolants:
     */
    setup_line_coefficients( setup, line, &info);