diff options
Diffstat (limited to 'src/mesa/tnl')
| -rw-r--r-- | src/mesa/tnl/t_vb_cliptmp.h | 35 | ||||
| -rw-r--r-- | src/mesa/tnl/t_vb_program.c | 29 | 
2 files changed, 58 insertions, 6 deletions
diff --git a/src/mesa/tnl/t_vb_cliptmp.h b/src/mesa/tnl/t_vb_cliptmp.h index 788fe329ed..618b8b3130 100644 --- a/src/mesa/tnl/t_vb_cliptmp.h +++ b/src/mesa/tnl/t_vb_cliptmp.h @@ -127,7 +127,7 @@ TAG(clip_line)( GLcontext *ctx, GLuint v0, GLuint v1, GLubyte mask )     GLuint p;     const GLuint v0_orig = v0; -   if (mask & 0x3f) { +   if (mask & CLIP_FRUSTUM_BITS) {        LINE_CLIP( CLIP_RIGHT_BIT,  -1,  0,  0, 1 );        LINE_CLIP( CLIP_LEFT_BIT,    1,  0,  0, 1 );        LINE_CLIP( CLIP_TOP_BIT,     0, -1,  0, 1 ); @@ -199,7 +199,24 @@ TAG(clip_tri)( GLcontext *ctx, GLuint v0, GLuint v1, GLuint v2, GLubyte mask )     ASSIGN_3V(inlist, v2, v0, v1 ); /* pv rotated to slot zero */ -   if (mask & 0x3f) { +   if (0) { +      /* print pre-clip vertex coords */ +      GLuint i, j; +      _mesa_printf("pre clip:\n"); +      for (i = 0; i < n; i++) { +         j = inlist[i]; +         _mesa_printf("  %u: %u: %f, %f, %f, %f\n", +                      i, j, +                      coord[j][0], coord[j][1], coord[j][2], coord[j][3]); +         assert(!IS_INF_OR_NAN(coord[j][0])); +         assert(!IS_INF_OR_NAN(coord[j][1])); +         assert(!IS_INF_OR_NAN(coord[j][2])); +         assert(!IS_INF_OR_NAN(coord[j][3])); +      } +   } + + +   if (mask & CLIP_FRUSTUM_BITS) {        POLY_CLIP( CLIP_RIGHT_BIT,  -1,  0,  0, 1 );        POLY_CLIP( CLIP_LEFT_BIT,    1,  0,  0, 1 );        POLY_CLIP( CLIP_TOP_BIT,     0, -1,  0, 1 ); @@ -227,6 +244,18 @@ TAG(clip_tri)( GLcontext *ctx, GLuint v0, GLuint v1, GLuint v2, GLubyte mask )        }     } +   if (0) { +      /* print post-clip vertex coords */ +      GLuint i, j; +      _mesa_printf("post clip:\n"); +      for (i = 0; i < n; i++) { +         j = inlist[i]; +         _mesa_printf("  %u: %u: %f, %f, %f, %f\n", +                      i, j, +                      coord[j][0], coord[j][1], coord[j][2], coord[j][3]); +      } +   } +     tnl->Driver.Render.ClippedPolygon( ctx, inlist, n );  } @@ -250,7 +279,7 @@ TAG(clip_quad)( GLcontext *ctx, GLuint v0, GLuint v1, GLuint v2, GLuint v3,     ASSIGN_4V(inlist, v3, v0, v1, v2 ); /* pv rotated to slot zero */ -   if (mask & 0x3f) { +   if (mask & CLIP_FRUSTUM_BITS) {        POLY_CLIP( CLIP_RIGHT_BIT,  -1,  0,  0, 1 );        POLY_CLIP( CLIP_LEFT_BIT,    1,  0,  0, 1 );        POLY_CLIP( CLIP_TOP_BIT,     0, -1,  0, 1 ); diff --git a/src/mesa/tnl/t_vb_program.c b/src/mesa/tnl/t_vb_program.c index 1795f62c32..66c5e13729 100644 --- a/src/mesa/tnl/t_vb_program.c +++ b/src/mesa/tnl/t_vb_program.c @@ -1,8 +1,9 @@  /*   * Mesa 3-D graphics library - * Version:  7.1 + * Version:  7.6   * - * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved. + * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved. + * Copyright (C) 2009  VMware, Inc.  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"), @@ -46,6 +47,16 @@  #include "tnl/t_pipeline.h" +#ifdef NAN_CHECK +/** Check for NaNs and very large values */ +static INLINE void +check_float(float x) +{ +   assert(!IS_INF_OR_NAN(x)); +   assert(1.0e-15 <= x && x <= 1.0e15); +} +#endif +  /*!   * Private storage for the vertex program pipeline stage. @@ -207,7 +218,7 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)  {     /* Input registers get initialized from the current vertex attribs */     MEMCPY(machine->VertAttribs, ctx->Current.Attrib, -          MAX_VERTEX_PROGRAM_ATTRIBS * 4 * sizeof(GLfloat)); +          MAX_VERTEX_GENERIC_ATTRIBS * 4 * sizeof(GLfloat));     if (ctx->VertexProgram._Current->IsNVProgram) {        GLuint i; @@ -351,6 +362,12 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )  	    const GLuint size = VB->AttribPtr[attr]->size;  	    const GLuint stride = VB->AttribPtr[attr]->stride;  	    const GLfloat *data = (GLfloat *) (ptr + stride * i); +#ifdef NAN_CHECK +            check_float(data[0]); +            check_float(data[1]); +            check_float(data[2]); +            check_float(data[3]); +#endif  	    COPY_CLEAN_4V(machine.VertAttribs[attr], size, data);  	 }        } @@ -361,6 +378,12 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )        /* copy the output registers into the VB->attribs arrays */        for (j = 0; j < numOutputs; j++) {           const GLuint attr = outputs[j]; +#ifdef NAN_CHECK +         check_float(machine.Outputs[attr][0]); +         check_float(machine.Outputs[attr][1]); +         check_float(machine.Outputs[attr][2]); +         check_float(machine.Outputs[attr][3]); +#endif           COPY_4V(store->results[attr].data[i], machine.Outputs[attr]);        }  #if 0  | 
