gallium: replace 16BIT_TEMPS cap with 16BIT_CONSTS
[mesa.git] / src / mesa / math / m_debug_clip.c
index 95ae5a347da94b34700e447052dc0dc7e2bdbf47..afbe09bb7a7d00a432a1aebdabdd856f07e199b9 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.1
  *
  * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  *
  * Authors:
  *    Gareth Hughes
@@ -28,7 +28,7 @@
 #include "main/glheader.h"
 #include "main/context.h"
 #include "main/macros.h"
-#include "main/imports.h"
+
 
 #include "m_matrix.h"
 #include "m_xform.h"
@@ -208,6 +208,24 @@ ALIGN16(static GLfloat, d[TEST_COUNT][4]);
 ALIGN16(static GLfloat, r[TEST_COUNT][4]);
 
 
+/**
+ * Check if X, Y or Z component of the coordinate is close to W, in terms
+ * of the clip test.
+ */
+static GLboolean
+xyz_close_to_w(const GLfloat c[4])
+{
+   float k = 0.0001;
+   return (fabs(c[0] - c[3]) < k ||
+           fabs(c[1] - c[3]) < k ||
+           fabs(c[2] - c[3]) < k ||
+           fabs(-c[0] - c[3]) < k ||
+           fabs(-c[1] - c[3]) < k ||
+           fabs(-c[2] - c[3]) < k);
+}
+
+
+
 static int test_cliptest_function( clip_func func, int np,
                                   int psize, long *cycles )
 {
@@ -270,20 +288,29 @@ static int test_cliptest_function( clip_func func, int np,
    }
 
    if ( dco != rco ) {
-      _mesa_printf( "\n-----------------------------\n" );
-      _mesa_printf( "dco = 0x%02x   rco = 0x%02x\n", dco, rco );
+      printf( "\n-----------------------------\n" );
+      printf( "dco = 0x%02x   rco = 0x%02x\n", dco, rco );
       return 0;
    }
    if ( dca != rca ) {
-      _mesa_printf( "\n-----------------------------\n" );
-      _mesa_printf( "dca = 0x%02x   rca = 0x%02x\n", dca, rca );
+      printf( "\n-----------------------------\n" );
+      printf( "dca = 0x%02x   rca = 0x%02x\n", dca, rca );
       return 0;
    }
    for ( i = 0 ; i < TEST_COUNT ; i++ ) {
       if ( dm[i] != rm[i] ) {
-        _mesa_printf( "\n-----------------------------\n" );
-        _mesa_printf( "(i = %i)\n", i );
-        _mesa_printf( "dm = 0x%02x   rm = 0x%02x\n", dm[i], rm[i] );
+         GLfloat *c = source->start;
+         STRIDE_F(c, source->stride * i);
+         if (psize == 4 && xyz_close_to_w(c)) {
+            /* The coordinate is very close to the clip plane.  The clipmask
+             * may vary depending on code path, but that's OK.
+             */
+            continue;
+         }
+        printf( "\n-----------------------------\n" );
+        printf( "mask[%d] = 0x%02x   ref mask[%d] = 0x%02x\n", i, dm[i], i,rm[i] );
+         printf(" coord = %f, %f, %f, %f\n",
+                c[0], c[1], c[2], c[3]);
         return 0;
       }
    }
@@ -297,19 +324,19 @@ static int test_cliptest_function( clip_func func, int np,
    for ( i = 0 ; i < TEST_COUNT ; i++ ) {
       for ( j = 0 ; j < 4 ; j++ ) {
          if ( significand_match( d[i][j], r[i][j] ) < REQUIRED_PRECISION ) {
-            _mesa_printf( "\n-----------------------------\n" );
-            _mesa_printf( "(i = %i, j = %i)  dm = 0x%02x   rm = 0x%02x\n",
+            printf( "\n-----------------------------\n" );
+            printf( "(i = %i, j = %i)  dm = 0x%02x   rm = 0x%02x\n",
                    i, j, dm[i], rm[i] );
-            _mesa_printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
                    d[i][0], r[i][0], r[i][0]-d[i][0],
                    MAX_PRECISION - significand_match( d[i][0], r[i][0] ) );
-            _mesa_printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
                    d[i][1], r[i][1], r[i][1]-d[i][1],
                    MAX_PRECISION - significand_match( d[i][1], r[i][1] ) );
-            _mesa_printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
                    d[i][2], r[i][2], r[i][2]-d[i][2],
                    MAX_PRECISION - significand_match( d[i][2], r[i][2] ) );
-            _mesa_printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
                    d[i][3], r[i][3], r[i][3]-d[i][3],
                    MAX_PRECISION - significand_match( d[i][3], r[i][3] ) );
             return 0;
@@ -328,26 +355,26 @@ void _math_test_all_cliptest_functions( char *description )
 
    if ( first_time ) {
       first_time = 0;
-      mesa_profile = _mesa_getenv( "MESA_PROFILE" );
+      mesa_profile = getenv( "MESA_PROFILE" );
    }
 
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile ) {
       if ( !counter_overhead ) {
         INIT_COUNTER();
-        _mesa_printf( "counter overhead: %ld cycles\n\n", counter_overhead );
+        printf( "counter overhead: %ld cycles\n\n", counter_overhead );
       }
-      _mesa_printf( "cliptest results after hooking in %s functions:\n", description );
+      printf( "cliptest results after hooking in %s functions:\n", description );
    }
 #endif
 
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile ) {
-      _mesa_printf( "\n\t" );
+      printf( "\n\t" );
       for ( psize = 2 ; psize <= 4 ; psize++ ) {
-        _mesa_printf( " p%d\t", psize );
+        printf( " p%d\t", psize );
       }
-      _mesa_printf( "\n--------------------------------------------------------\n\t" );
+      printf( "\n--------------------------------------------------------\n\t" );
    }
 #endif
 
@@ -358,23 +385,23 @@ void _math_test_all_cliptest_functions( char *description )
 
         if ( test_cliptest_function( func, np, psize, cycles ) == 0 ) {
            char buf[100];
-           _mesa_sprintf( buf, "%s[%d] failed test (%s)",
+           sprintf( buf, "%s[%d] failed test (%s)",
                     cnames[np], psize, description );
-           _mesa_problem( NULL, buf );
+           _mesa_problem( NULL, "%s", buf );
         }
 #ifdef RUN_DEBUG_BENCHMARK
         if ( mesa_profile )
-           _mesa_printf( " %li\t", benchmark_tab[np][psize-1] );
+           printf( " %li\t", benchmark_tab[np][psize-1] );
 #endif
       }
 #ifdef RUN_DEBUG_BENCHMARK
       if ( mesa_profile )
-        _mesa_printf( " | [%s]\n\t", cstrings[np] );
+        printf( " | [%s]\n\t", cstrings[np] );
 #endif
    }
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile )
-      _mesa_printf( "\n" );
+      printf( "\n" );
 #endif
 }