Merge branch 'mesa_7_6_branch' into mesa_7_7_branch
[mesa.git] / src / mesa / math / m_debug_clip.c
index b6557665a65f01aa5bbf2da91415a96dbfee13b8..95ae5a347da94b34700e447052dc0dc7e2bdbf47 100644 (file)
@@ -1,10 +1,8 @@
-/* $Id: m_debug_clip.c,v 1.1 2001/05/21 16:33:41 gareth Exp $ */
-
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  6.1
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
  * Authors:
- *    Gareth Hughes <gareth@valinux.com>
+ *    Gareth Hughes
  */
 
-#include "glheader.h"
-#include "context.h"
-#include "macros.h"
-#include "mem.h"
+#include "main/glheader.h"
+#include "main/context.h"
+#include "main/macros.h"
+#include "main/imports.h"
 
 #include "m_matrix.h"
 #include "m_xform.h"
 #include "m_debug.h"
 #include "m_debug_util.h"
 
-#ifdef DEBUG  /* This code only used for debugging */
+#ifdef __UNIXOS2__
+/* The linker doesn't like empty files */
+static char dummy;
+#endif
+
+#ifdef DEBUG_MATH  /* This code only used for debugging */
 
 static clip_func *clip_tab[2] = {
    _mesa_clip_tab,
@@ -48,10 +51,12 @@ static char *cnames[2] = {
    "_mesa_clip_tab",
    "_mesa_clip_np_tab"
 };
+#ifdef RUN_DEBUG_BENCHMARK
 static char *cstrings[2] = {
    "clip, perspective divide",
    "clip, no divide"
 };
+#endif
 
 
 /* =============================================================
@@ -62,7 +67,8 @@ static GLvector4f *ref_cliptest_points4( GLvector4f *clip_vec,
                                         GLvector4f *proj_vec,
                                         GLubyte clipMask[],
                                         GLubyte *orMask,
-                                        GLubyte *andMask )
+                                        GLubyte *andMask,
+                                        GLboolean viewport_z_clip )
 {
    const GLuint stride = clip_vec->stride;
    const GLuint count = clip_vec->count;
@@ -82,8 +88,10 @@ static GLvector4f *ref_cliptest_points4( GLvector4f *clip_vec,
       if (  cx + cw < 0 ) mask |= CLIP_LEFT_BIT;
       if ( -cy + cw < 0 ) mask |= CLIP_TOP_BIT;
       if (  cy + cw < 0 ) mask |= CLIP_BOTTOM_BIT;
-      if ( -cz + cw < 0 ) mask |= CLIP_FAR_BIT;
-      if (  cz + cw < 0 ) mask |= CLIP_NEAR_BIT;
+      if (viewport_z_clip) {
+        if ( -cz + cw < 0 ) mask |= CLIP_FAR_BIT;
+        if (  cz + cw < 0 ) mask |= CLIP_NEAR_BIT;
+      }
       clipMask[i] = mask;
       if ( mask ) {
         c++;
@@ -117,7 +125,8 @@ static GLvector4f *ref_cliptest_points3( GLvector4f *clip_vec,
                                         GLvector4f *proj_vec,
                                         GLubyte clipMask[],
                                         GLubyte *orMask,
-                                        GLubyte *andMask )
+                                        GLubyte *andMask,
+                                         GLboolean viewport_z_clip )
 {
    const GLuint stride = clip_vec->stride;
    const GLuint count = clip_vec->count;
@@ -133,8 +142,10 @@ static GLvector4f *ref_cliptest_points3( GLvector4f *clip_vec,
       else if ( cx < -1.0 )    mask |= CLIP_LEFT_BIT;
       if ( cy >  1.0 )         mask |= CLIP_TOP_BIT;
       else if ( cy < -1.0 )    mask |= CLIP_BOTTOM_BIT;
-      if ( cz >  1.0 )         mask |= CLIP_FAR_BIT;
-      else if ( cz < -1.0 )    mask |= CLIP_NEAR_BIT;
+      if (viewport_z_clip) {
+         if ( cz >  1.0 )              mask |= CLIP_FAR_BIT;
+         else if ( cz < -1.0 ) mask |= CLIP_NEAR_BIT;
+      }
       clipMask[i] = mask;
       tmpOrMask |= mask;
       tmpAndMask &= mask;
@@ -149,7 +160,8 @@ static GLvector4f * ref_cliptest_points2( GLvector4f *clip_vec,
                                          GLvector4f *proj_vec,
                                          GLubyte clipMask[],
                                          GLubyte *orMask,
-                                         GLubyte *andMask )
+                                         GLubyte *andMask,
+                                          GLboolean viewport_z_clip )
 {
    const GLuint stride = clip_vec->stride;
    const GLuint count = clip_vec->count;
@@ -158,6 +170,9 @@ static GLvector4f * ref_cliptest_points2( GLvector4f *clip_vec,
    GLubyte tmpOrMask = *orMask;
    GLubyte tmpAndMask = *andMask;
    GLuint i;
+
+   (void) viewport_z_clip;
+
    for ( i = 0 ; i < count ; i++, STRIDE_F(from, stride) ) {
       const GLfloat cx = from[0], cy = from[1];
       GLubyte mask = 0;
@@ -188,9 +203,10 @@ static clip_func ref_cliptest[5] = {
  * Cliptest tests
  */
 
-static GLfloat s[TEST_COUNT][4] ALIGN16;
-static GLfloat d[TEST_COUNT][4] ALIGN16;
-static GLfloat r[TEST_COUNT][4] ALIGN16;
+ALIGN16(static GLfloat, s[TEST_COUNT][4]);
+ALIGN16(static GLfloat, d[TEST_COUNT][4]);
+ALIGN16(static GLfloat, r[TEST_COUNT][4]);
+
 
 static int test_cliptest_function( clip_func func, int np,
                                   int psize, long *cycles )
@@ -202,6 +218,7 @@ static int test_cliptest_function( clip_func func, int np,
 #ifdef  RUN_DEBUG_BENCHMARK
    int cycle_i;                /* the counter for the benchmarks we run */
 #endif
+   GLboolean viewport_z_clip = GL_TRUE;
 
    (void) cycles;
 
@@ -239,34 +256,34 @@ static int test_cliptest_function( clip_func func, int np,
    ref->flags = 0;
 
    dco = rco = 0;
-   dca = rca = CLIP_ALL_BITS;
+   dca = rca = CLIP_FRUSTUM_BITS;
 
-   ref_cliptest[psize]( source, ref, rm, &rco, &rca );
+   ref_cliptest[psize]( source, ref, rm, &rco, &rca, viewport_z_clip );
 
    if ( mesa_profile ) {
       BEGIN_RACE( *cycles );
-      func( source, dest, dm, &dco, &dca );
+      func( source, dest, dm, &dco, &dca, viewport_z_clip );
       END_RACE( *cycles );
    }
    else {
-      func( source, dest, dm, &dco, &dca );
+      func( source, dest, dm, &dco, &dca, viewport_z_clip );
    }
 
    if ( dco != rco ) {
-      printf( "\n-----------------------------\n" );
-      printf( "dco = 0x%02x   rco = 0x%02x\n", dco, rco );
+      _mesa_printf( "\n-----------------------------\n" );
+      _mesa_printf( "dco = 0x%02x   rco = 0x%02x\n", dco, rco );
       return 0;
    }
    if ( dca != rca ) {
-      printf( "\n-----------------------------\n" );
-      printf( "dca = 0x%02x   rca = 0x%02x\n", dca, rca );
+      _mesa_printf( "\n-----------------------------\n" );
+      _mesa_printf( "dca = 0x%02x   rca = 0x%02x\n", dca, rca );
       return 0;
    }
    for ( i = 0 ; i < TEST_COUNT ; i++ ) {
       if ( dm[i] != rm[i] ) {
-        printf( "\n-----------------------------\n" );
-        printf( "(i = %i)\n", i );
-        printf( "dm = 0x%02x   rm = 0x%02x\n", 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] );
         return 0;
       }
    }
@@ -280,19 +297,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 ) {
-            printf( "\n-----------------------------\n" );
-            printf( "(i = %i, j = %i)  dm = 0x%02x   rm = 0x%02x\n",
+            _mesa_printf( "\n-----------------------------\n" );
+            _mesa_printf( "(i = %i, j = %i)  dm = 0x%02x   rm = 0x%02x\n",
                    i, j, dm[i], rm[i] );
-            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            _mesa_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] ) );
-            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            _mesa_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] ) );
-            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            _mesa_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] ) );
-            printf( "%f \t %f \t [diff = %e - %i bit missed]\n",
+            _mesa_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;
@@ -311,26 +328,26 @@ void _math_test_all_cliptest_functions( char *description )
 
    if ( first_time ) {
       first_time = 0;
-      mesa_profile = getenv( "MESA_PROFILE" );
+      mesa_profile = _mesa_getenv( "MESA_PROFILE" );
    }
 
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile ) {
       if ( !counter_overhead ) {
         INIT_COUNTER();
-        printf( "counter overhead: %ld cycles\n\n", counter_overhead );
+        _mesa_printf( "counter overhead: %ld cycles\n\n", counter_overhead );
       }
-      printf( "cliptest results after hooking in %s functions:\n", description );
+      _mesa_printf( "cliptest results after hooking in %s functions:\n", description );
    }
 #endif
 
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile ) {
-      printf( "\n\t" );
+      _mesa_printf( "\n\t" );
       for ( psize = 2 ; psize <= 4 ; psize++ ) {
-        printf( " p%d\t", psize );
+        _mesa_printf( " p%d\t", psize );
       }
-      printf( "\n--------------------------------------------------------\n\t" );
+      _mesa_printf( "\n--------------------------------------------------------\n\t" );
    }
 #endif
 
@@ -341,25 +358,25 @@ void _math_test_all_cliptest_functions( char *description )
 
         if ( test_cliptest_function( func, np, psize, cycles ) == 0 ) {
            char buf[100];
-           sprintf( buf, "%s[%d] failed test (%s)",
+           _mesa_sprintf( buf, "%s[%d] failed test (%s)",
                     cnames[np], psize, description );
            _mesa_problem( NULL, buf );
         }
 #ifdef RUN_DEBUG_BENCHMARK
         if ( mesa_profile )
-           printf( " %li\t", benchmark_tab[np][psize-1] );
+           _mesa_printf( " %li\t", benchmark_tab[np][psize-1] );
 #endif
       }
 #ifdef RUN_DEBUG_BENCHMARK
       if ( mesa_profile )
-        printf( " | [%s]\n\t", cstrings[np] );
+        _mesa_printf( " | [%s]\n\t", cstrings[np] );
 #endif
    }
 #ifdef RUN_DEBUG_BENCHMARK
    if ( mesa_profile )
-      printf( "\n" );
+      _mesa_printf( "\n" );
 #endif
 }
 
 
-#endif /* DEBUG */
+#endif /* DEBUG_MATH */