diff options
| author | Keith Whitwell <keith@tungstengraphics.com> | 2001-03-05 18:52:18 +0000 | 
|---|---|---|
| committer | Keith Whitwell <keith@tungstengraphics.com> | 2001-03-05 18:52:18 +0000 | 
| commit | 0ceb82b83843735437a994337d6f743f0460d7cb (patch) | |
| tree | 050d2dd6aff524341ad9bcf54703bc30ee9cf344 /src/mesa/drivers | |
| parent | 3db5374e66c902667d260e8ebf31fe419922924e (diff) | |
Changes for ffb
Diffstat (limited to 'src/mesa/drivers')
| -rw-r--r-- | src/mesa/drivers/common/t_dd_dmatmp.h | 6 | ||||
| -rw-r--r-- | src/mesa/drivers/common/t_dd_tritmp.h | 240 | 
2 files changed, 178 insertions, 68 deletions
diff --git a/src/mesa/drivers/common/t_dd_dmatmp.h b/src/mesa/drivers/common/t_dd_dmatmp.h index 1b4e89bdb1..f2a08c0284 100644 --- a/src/mesa/drivers/common/t_dd_dmatmp.h +++ b/src/mesa/drivers/common/t_dd_dmatmp.h @@ -44,6 +44,7 @@  #endif  #if !HAVE_ELTS  +#define ELTS_VARS  #define ALLOC_ELTS( nr )  #define EMIT_ELT( offset, elt )  #define INCR_ELTS( nr ) @@ -392,7 +393,7 @@ static void TAG(render_quad_strip_verts)( GLcontext *ctx,     if (HAVE_QUAD_STRIPS && 0) {        /* TODO.         */ -   } else if (ctx->_TriangleCaps & DD_FLATSHADE) { +   } else if (HAVE_TRI_STRIPS && ctx->_TriangleCaps & DD_FLATSHADE) {        if (TAG(emit_elt_verts)( ctx, start, count )) {     	 LOCAL_VARS;  	 int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS(); @@ -881,7 +882,8 @@ static void TAG(render_quad_strip_elts)( GLcontext *ctx,  					 GLuint flags )  {     if (HAVE_QUAD_STRIPS && 0) { -   } else { +   }  +   else if (HAVE_TRI_STRIPS) {        LOCAL_VARS;        GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;        int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS(); diff --git a/src/mesa/drivers/common/t_dd_tritmp.h b/src/mesa/drivers/common/t_dd_tritmp.h index 7f573a5abc..0608fd9695 100644 --- a/src/mesa/drivers/common/t_dd_tritmp.h +++ b/src/mesa/drivers/common/t_dd_tritmp.h @@ -69,6 +69,17 @@  #define VERT_COPY_IND( v0, v1 )  #define VERT_SAVE_IND( idx )   #define VERT_RESTORE_IND( idx )  +#if HAVE_BACK_COLORS  +#define VERT_SET_RGBA( v, c )    +#endif  +#else +#define VERT_SET_RGBA( v, c ) (void) c +#define VERT_COPY_RGBA( v0, v1 ) +#define VERT_SAVE_RGBA( idx )  +#define VERT_RESTORE_RGBA( idx )  +#if HAVE_BACK_COLORS  +#define VERT_SET_IND( v, c )    +#endif   #endif  #if !HAVE_SPEC @@ -76,8 +87,27 @@  #define VERT_COPY_SPEC( v0, v1 )  #define VERT_SAVE_SPEC( idx )   #define VERT_RESTORE_SPEC( idx )  +#if HAVE_BACK_COLORS +#define VERT_COPY_SPEC1( v ) +#endif +#else +#if HAVE_BACK_COLORS +#define VERT_SET_SPEC( v, c )    +#endif  #endif +#if !HAVE_BACK_COLORS +#define VERT_COPY_SPEC1( v ) +#define VERT_COPY_IND1( v ) +#define VERT_COPY_RGBA1( v )  +#endif + +#ifndef INSANE_VERTICES +#define VERT_SET_Z(v,val) VERT_Z(v) = val +#define VERT_Z_ADD(v,val) VERT_Z(v) += val +#endif + +#if DO_TRI  static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )  {     struct vertex_buffer *VB = &TNL_CONTEXT( ctx )->vb; @@ -125,26 +155,48 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )  	 if (DO_TWOSIDE && facing == 1)  	 {  	    if (HAVE_RGBA) { -	       GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data; -	       ASSERT(VB->ColorPtr[1]->stride == 4*sizeof(GLchan)); - -	       if (!DO_FLAT) { -		  VERT_SET_RGBA( v[0], vbcolor[e0] ); -		  VERT_SET_RGBA( v[1], vbcolor[e1] ); -	       } -	       VERT_SET_RGBA( v[2], vbcolor[e2] ); +	       if (HAVE_BACK_COLORS) { +		  if (!DO_FLAT) { +		     VERT_SAVE_RGBA( 0 ); +		     VERT_SAVE_RGBA( 1 ); +		     VERT_COPY_RGBA1( v[0] ); +		     VERT_COPY_RGBA1( v[1] ); +		  } +		  VERT_SAVE_RGBA( 2 ); +		  VERT_COPY_RGBA1( v[2] ); +		  if (HAVE_SPEC) { +		     if (!DO_FLAT) { +			VERT_SAVE_SPEC( 0 ); +			VERT_SAVE_SPEC( 1 ); +			VERT_COPY_SPEC1( v[0] ); +			VERT_COPY_SPEC1( v[1] ); +		     } +		     VERT_SAVE_SPEC( 2 ); +		     VERT_COPY_SPEC1( v[2] ); +		  } +	       }  +	       else { +		  GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data; +		  ASSERT(VB->ColorPtr[1]->stride == 4*sizeof(GLchan)); +		  (void) vbcolor; -	       if (HAVE_SPEC && VB->SecondaryColorPtr[1]) { -		  GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->data; -		  ASSERT(VB->SecondaryColorPtr[1]->stride == 4*sizeof(GLchan)); -		  		  if (!DO_FLAT) { -		     VERT_SET_SPEC( v[0], vbspec[e0] ); -		     VERT_SET_SPEC( v[1], vbspec[e1] ); +		     VERT_SET_RGBA( v[0], vbcolor[e0] ); +		     VERT_SET_RGBA( v[1], vbcolor[e1] );  		  } -		  VERT_SET_SPEC( v[2], vbspec[e2] ); -	       } -	    }  +		  VERT_SET_RGBA( v[2], vbcolor[e2] ); +		   +		  if (HAVE_SPEC && VB->SecondaryColorPtr[1]) { +		     GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->data; +		 +		     if (!DO_FLAT) { +			VERT_SET_SPEC( v[0], vbspec[e0] ); +			VERT_SET_SPEC( v[1], vbspec[e1] ); +		     } +		     VERT_SET_SPEC( v[2], vbspec[e2] ); +		  } +	       }  +	    }  	    else {  	       GLuint *vbindex = VB->IndexPtr[1]->data;  	       if (!DO_FLAT) { @@ -202,23 +254,23 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )     if (mode == GL_POINT) {        if (DO_OFFSET && ctx->Polygon.OffsetPoint) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset);        }        UNFILLED_TRI( ctx, GL_POINT, e0, e1, e2 );     } else if (mode == GL_LINE) {        if (DO_OFFSET && ctx->Polygon.OffsetLine) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset);        }        UNFILLED_TRI( ctx, GL_LINE, e0, e1, e2 );     } else {        if (DO_OFFSET && ctx->Polygon.OffsetFill) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset);        }        if (DO_UNFILLED)  	 RASTERIZE( GL_TRIANGLES ); @@ -227,32 +279,45 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )     if (DO_OFFSET)     { -      VERT_Z(v[0]) = z[0]; -      VERT_Z(v[1]) = z[1]; -      VERT_Z(v[2]) = z[2]; +      VERT_SET_Z(v[0], z[0]); +      VERT_SET_Z(v[1], z[1]); +      VERT_SET_Z(v[2], z[2]);     }     if (DO_TWOSIDE && facing == 1)     {        if (HAVE_RGBA) { -	 GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data; -	 ASSERT(VB->ColorPtr[0]->stride == 4*sizeof(GLchan)); -	  -	 if (!DO_FLAT) { -	    VERT_SET_RGBA( v[0], vbcolor[e0] ); -	    VERT_SET_RGBA( v[1], vbcolor[e1] ); -	 } -	 VERT_SET_RGBA( v[2], vbcolor[e2] ); -	  -	 if (HAVE_SPEC && VB->SecondaryColorPtr[0]) { -	    GLchan (*vbspec)[4] = VB->SecondaryColorPtr[0]->data; -	    ASSERT(VB->SecondaryColorPtr[0]->stride == 4*sizeof(GLchan)); -	   +	 if (HAVE_BACK_COLORS) { +	    VERT_RESTORE_RGBA( 0 ); +	    VERT_RESTORE_RGBA( 1 ); +	    VERT_RESTORE_RGBA( 2 ); +	    if (HAVE_SPEC) { +	       VERT_RESTORE_SPEC( 0 ); +	       VERT_RESTORE_SPEC( 1 ); +	       VERT_RESTORE_SPEC( 2 ); +	    } +	 }  +	 else { +	    GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data; +	    ASSERT(VB->ColorPtr[0]->stride == 4*sizeof(GLchan)); +	    (void) vbcolor; +	      	    if (!DO_FLAT) { -	       VERT_SET_SPEC( v[0], vbspec[e0] ); -	       VERT_SET_SPEC( v[1], vbspec[e1] ); +	       VERT_SET_RGBA( v[0], vbcolor[e0] ); +	       VERT_SET_RGBA( v[1], vbcolor[e1] ); +	    } +	    VERT_SET_RGBA( v[2], vbcolor[e2] ); +	  +	    if (HAVE_SPEC && VB->SecondaryColorPtr[0]) { +	       GLchan (*vbspec)[4] = VB->SecondaryColorPtr[0]->data; +	       ASSERT(VB->SecondaryColorPtr[0]->stride == 4*sizeof(GLchan)); +	        +	       if (!DO_FLAT) { +		  VERT_SET_SPEC( v[0], vbspec[e0] ); +		  VERT_SET_SPEC( v[1], vbspec[e1] ); +	       } +	       VERT_SET_SPEC( v[2], vbspec[e2] );  	    } -	    VERT_SET_SPEC( v[2], vbspec[e2] );  	 }        }         else { @@ -280,11 +345,11 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )  	 VERT_RESTORE_IND( 1 );        }     } - -  } +#endif -#if (DO_FULL_QUAD) +#if DO_QUAD +#if DO_FULL_QUAD  static void TAG(quad)( GLcontext *ctx,  		       GLuint e0, GLuint e1, GLuint e2, GLuint e3 )  { @@ -333,6 +398,7 @@ static void TAG(quad)( GLcontext *ctx,  	 {  	    if (HAVE_RGBA) {  	       GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data; +	       (void)vbcolor;  	       if (!DO_FLAT) {  		  VERT_SET_RGBA( v[0], vbcolor[e0] ); @@ -418,26 +484,26 @@ static void TAG(quad)( GLcontext *ctx,     if (mode == GL_POINT) {        if (( DO_OFFSET) && ctx->Polygon.OffsetPoint) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; -	 VERT_Z(v[3]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset); +	 VERT_Z_ADD(v[3], offset);        }        UNFILLED_QUAD( ctx, GL_POINT, e0, e1, e2, e3 );     } else if (mode == GL_LINE) {        if (DO_OFFSET && ctx->Polygon.OffsetLine) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; -	 VERT_Z(v[3]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset); +	 VERT_Z_ADD(v[3], offset);        }        UNFILLED_QUAD( ctx, GL_LINE, e0, e1, e2, e3 );     } else {        if (DO_OFFSET && ctx->Polygon.OffsetFill) { -	 VERT_Z(v[0]) += offset; -	 VERT_Z(v[1]) += offset; -	 VERT_Z(v[2]) += offset; -	 VERT_Z(v[3]) += offset; +	 VERT_Z_ADD(v[0], offset); +	 VERT_Z_ADD(v[1], offset); +	 VERT_Z_ADD(v[2], offset); +	 VERT_Z_ADD(v[3], offset);        }        RASTERIZE( GL_TRIANGLES );        QUAD( (v[0]), (v[1]), (v[2]), (v[3]) );  @@ -445,10 +511,10 @@ static void TAG(quad)( GLcontext *ctx,     if (DO_OFFSET)     { -      VERT_Z(v[0]) = z[0]; -      VERT_Z(v[1]) = z[1]; -      VERT_Z(v[2]) = z[2]; -      VERT_Z(v[3]) = z[3]; +      VERT_SET_Z(v[0], z[0]); +      VERT_SET_Z(v[1], z[1]); +      VERT_SET_Z(v[2], z[2]); +      VERT_SET_Z(v[3], z[3]);     }        if (DO_TWOSIDE && facing == 1) @@ -456,6 +522,7 @@ static void TAG(quad)( GLcontext *ctx,        if (HAVE_RGBA) {  	 GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data;  	 ASSERT(VB->ColorPtr[0]->stride == 4*sizeof(GLchan)); +	 (void) vbcolor;  	 if (!DO_FLAT) {  	    VERT_SET_RGBA( v[0], vbcolor[e0] ); @@ -526,8 +593,9 @@ static void TAG(quad)( GLcontext *ctx, GLuint e0,     }  }  #endif +#endif - +#if DO_LINE  static void TAG(line)( GLcontext *ctx, GLuint e0, GLuint e1 )  {     TNLvertexbuffer *VB = &TNL_CONTEXT(ctx)->vb; @@ -567,8 +635,9 @@ static void TAG(line)( GLcontext *ctx, GLuint e0, GLuint e1 )        }     }  } +#endif - +#if DO_POINT  static void TAG(points)( GLcontext *ctx, GLuint first, GLuint last )  {     struct vertex_buffer *VB = &TNL_CONTEXT( ctx )->vb; @@ -592,13 +661,22 @@ static void TAG(points)( GLcontext *ctx, GLuint first, GLuint last )        }     }  } +#endif  static void TAG(init)( void )  { +#if DO_QUAD     TAB[IND].quad = TAG(quad); +#endif +#if DO_TRI     TAB[IND].triangle = TAG(triangle); +#endif +#if DO_LINE     TAB[IND].line = TAG(line); +#endif +#if DO_POINT     TAB[IND].points = TAG(points); +#endif  }  #undef IND @@ -609,6 +687,17 @@ static void TAG(init)( void )  #undef VERT_COPY_IND  #undef VERT_SAVE_IND  #undef VERT_RESTORE_IND +#if HAVE_BACK_COLORS  +#undef VERT_SET_RGBA +#endif  +#else +#undef VERT_SET_RGBA +#undef VERT_COPY_RGBA +#undef VERT_SAVE_RGBA +#undef VERT_RESTORE_RGBA +#if HAVE_BACK_COLORS  +#undef VERT_SET_IND +#endif   #endif  #if !HAVE_SPEC @@ -616,4 +705,23 @@ static void TAG(init)( void )  #undef VERT_COPY_SPEC  #undef VERT_SAVE_SPEC  #undef VERT_RESTORE_SPEC +#if HAVE_BACK_COLORS +#undef VERT_COPY_SPEC1  #endif +#else +#if HAVE_BACK_COLORS +#undef VERT_SET_SPEC +#endif +#endif + +#if !HAVE_BACK_COLORS +#undef VERT_COPY_SPEC1 +#undef VERT_COPY_IND1 +#undef VERT_COPY_RGBA1 +#endif + +#ifndef INSANE_VERTICES +#undef VERT_SET_Z +#undef VERT_Z_ADD +#endif +  | 
