OSDN Git Service

softpipe: use util_is_inf_or_nan()
authorBrian Paul <brianp@vmware.com>
Tue, 31 Mar 2009 22:07:38 +0000 (16:07 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 31 Mar 2009 22:21:51 +0000 (16:21 -0600)
And print/warn NaN/Inf in print_vertex().

src/gallium/drivers/softpipe/sp_setup.c

index 711343a..accc692 100644 (file)
@@ -252,16 +252,6 @@ static PIPE_THREAD_ROUTINE( quad_thread, param )
 
 #endif
 
-/**
- * Test if x is NaN or +/- infinity.
- */
-static INLINE boolean
-is_inf_or_nan(float x)
-{
-   union fi tmp;
-   tmp.f = x;
-   return !(int)((unsigned int)((tmp.i & 0x7fffffff)-0x7f800000) >> 31);
-}
 
 
 /**
@@ -506,6 +496,9 @@ static void print_vertex(const struct setup_context *setup,
    for (i = 0; i < setup->quad.nr_attrs; i++) {
       debug_printf("     %d: %f %f %f %f\n",  i,
               v[i][0], v[i][1], v[i][2], v[i][3]);
+      if (util_is_inf_or_nan(v[i][0])) {
+         debug_printf("   NaN!\n");
+      }
    }
 }
 #endif
@@ -595,7 +588,7 @@ static boolean setup_sort_vertices( struct setup_context *setup,
       debug_printf("%s one-over-area %f  area %f  det %f\n",
                    __FUNCTION__, setup->oneoverarea, area, det );
       */
-      if (is_inf_or_nan(setup->oneoverarea))
+      if (util_is_inf_or_nan(setup->oneoverarea))
          return FALSE;
    }
 
@@ -1065,7 +1058,7 @@ setup_line_coefficients(struct setup_context *setup,
 
    /* NOTE: this is not really area but something proportional to it */
    area = setup->emaj.dx * setup->emaj.dx + setup->emaj.dy * setup->emaj.dy;
-   if (area == 0.0f || is_inf_or_nan(area))
+   if (area == 0.0f || util_is_inf_or_nan(area))
       return FALSE;
    setup->oneoverarea = 1.0f / area;