diff options
| -rw-r--r-- | src/mesa/swrast/s_aalinetemp.h | 18 | ||||
| -rw-r--r-- | src/mesa/swrast/s_aatritemp.h | 18 | ||||
| -rw-r--r-- | src/mesa/swrast/s_bitmap.c | 26 | ||||
| -rw-r--r-- | src/mesa/swrast/s_copypix.c | 28 | ||||
| -rw-r--r-- | src/mesa/swrast/s_depth.c | 16 | ||||
| -rw-r--r-- | src/mesa/swrast/s_drawpix.c | 32 | ||||
| -rw-r--r-- | src/mesa/swrast/s_lines.c | 106 | ||||
| -rw-r--r-- | src/mesa/swrast/s_pixeltex.c | 26 | ||||
| -rw-r--r-- | src/mesa/swrast/s_pointtemp.h | 16 | ||||
| -rw-r--r-- | src/mesa/swrast/s_span.c | 46 | ||||
| -rw-r--r-- | src/mesa/swrast/s_span.h | 13 | ||||
| -rw-r--r-- | src/mesa/swrast/s_texture.c | 45 | ||||
| -rw-r--r-- | src/mesa/swrast/s_texture.h | 11 | ||||
| -rw-r--r-- | src/mesa/swrast/s_triangle.c | 18 | ||||
| -rw-r--r-- | src/mesa/swrast/s_tritemp.h | 4 | ||||
| -rw-r--r-- | src/mesa/swrast/s_zoom.c | 9 | ||||
| -rw-r--r-- | src/mesa/swrast/swrast.h | 17 | 
17 files changed, 240 insertions, 209 deletions
| diff --git a/src/mesa/swrast/s_aalinetemp.h b/src/mesa/swrast/s_aalinetemp.h index 27d525186d..e1e1256915 100644 --- a/src/mesa/swrast/s_aalinetemp.h +++ b/src/mesa/swrast/s_aalinetemp.h @@ -1,4 +1,4 @@ -/* $Id: s_aalinetemp.h,v 1.18 2002/03/28 16:24:14 brianp Exp $ */ +/* $Id: s_aalinetemp.h,v 1.19 2002/04/12 15:39:58 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -101,11 +101,11 @@ NAME(plot)(GLcontext *ctx, struct LineInfo *line, int ix, int iy)     if (line->span.end == MAX_WIDTH) {  #if defined(DO_TEX) || defined(DO_MULTITEX) -      _mesa_write_texture_span(ctx, &line->span, GL_LINE); +      _mesa_write_texture_span(ctx, &line->span);  #elif defined(DO_RGBA) -      _mesa_write_rgba_span(ctx, &line->span, GL_LINE); +      _mesa_write_rgba_span(ctx, &line->span);  #else -      _mesa_write_index_span(ctx, &line->span, GL_LINE); +      _mesa_write_index_span(ctx, &line->span);  #endif        line->span.end = 0; /* reset counter */     } @@ -138,8 +138,8 @@ NAME(line)(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1)     if (line.len == 0.0 || IS_INF_OR_NAN(line.len))        return; -   INIT_SPAN(line.span); -   line.span.arrayMask |= (SPAN_XY | SPAN_COVERAGE); +   INIT_SPAN(line.span, GL_LINE, 0, 0, SPAN_XY | SPAN_COVERAGE); +   /*line.span.arrayMask |= (SPAN_XY | SPAN_COVERAGE);*/     line.xAdj = line.dx / line.len * line.halfWidth;     line.yAdj = line.dy / line.len * line.halfWidth; @@ -295,11 +295,11 @@ NAME(line)(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1)     }  #if defined(DO_TEX) || defined(DO_MULTITEX) -   _mesa_write_texture_span(ctx, &line.span, GL_LINE); +   _mesa_write_texture_span(ctx, &line.span);  #elif defined(DO_RGBA) -   _mesa_write_rgba_span(ctx, &line.span, GL_LINE); +   _mesa_write_rgba_span(ctx, &line.span);  #else -   _mesa_write_index_span(ctx, &line.span, GL_LINE); +   _mesa_write_index_span(ctx, &line.span);  #endif  } diff --git a/src/mesa/swrast/s_aatritemp.h b/src/mesa/swrast/s_aatritemp.h index 2fd59b2323..cdef16c2e2 100644 --- a/src/mesa/swrast/s_aatritemp.h +++ b/src/mesa/swrast/s_aatritemp.h @@ -1,4 +1,4 @@ -/* $Id: s_aatritemp.h,v 1.27 2002/03/16 18:02:07 brianp Exp $ */ +/* $Id: s_aatritemp.h,v 1.28 2002/04/12 15:39:58 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -85,8 +85,8 @@     GLfloat bf = SWRAST_CONTEXT(ctx)->_backface_sign; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_COVERAGE; +   INIT_SPAN(span, GL_POLYGON, 0, 0, SPAN_COVERAGE); +   /*span.arrayMask |= SPAN_COVERAGE;*/     /* determine bottom to top order of vertices */     { @@ -349,11 +349,11 @@           span.end = (GLuint) ix - (GLuint) startX;           ASSERT(span.interpMask == 0);  #if defined(DO_MULTITEX) || defined(DO_TEX) -         _mesa_write_texture_span(ctx, &span, GL_POLYGON); +         _mesa_write_texture_span(ctx, &span);  #elif defined(DO_RGBA) -         _mesa_write_rgba_span(ctx, &span, GL_POLYGON); +         _mesa_write_rgba_span(ctx, &span);  #elif defined(DO_INDEX) -         _mesa_write_index_span(ctx, &span, GL_POLYGON); +         _mesa_write_index_span(ctx, &span);  #endif        }     } @@ -507,11 +507,11 @@           span.end = n;           ASSERT(span.interpMask == 0);  #if defined(DO_MULTITEX) || defined(DO_TEX) -         _mesa_write_texture_span(ctx, &span, GL_POLYGON); +         _mesa_write_texture_span(ctx, &span);  #elif defined(DO_RGBA) -         _mesa_write_rgba_span(ctx, &span, GL_POLYGON); +         _mesa_write_rgba_span(ctx, &span);  #elif defined(DO_INDEX) -         _mesa_write_index_span(ctx, &span, GL_POLYGON); +         _mesa_write_index_span(ctx, &span);  #endif        }     } diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c index 6757fa496c..518e0587df 100644 --- a/src/mesa/swrast/s_bitmap.c +++ b/src/mesa/swrast/s_bitmap.c @@ -1,4 +1,4 @@ -/* $Id: s_bitmap.c,v 1.16 2002/02/17 17:30:23 brianp Exp $ */ +/* $Id: s_bitmap.c,v 1.17 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -63,9 +63,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,     if (SWRAST_CONTEXT(ctx)->NewState)        _swrast_validate_derived( ctx ); -   INIT_SPAN(span); -   span.arrayMask |= SPAN_XY; -   span.end = width; +   INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_XY); +   /*span.arrayMask |= SPAN_XY; +     span.end = width;*/     if (ctx->Visual.rgbMode) {        span.interpMask |= SPAN_RGBA;        span.red   = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); @@ -138,9 +138,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,           /* flush the span */           span.end = count;           if (ctx->Visual.rgbMode) -            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +            _mesa_write_rgba_span(ctx, &span);           else -            _mesa_write_index_span(ctx, &span, GL_BITMAP); +            _mesa_write_index_span(ctx, &span);           span.end = 0;           count = 0;        } @@ -175,11 +175,11 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,     if (SWRAST_CONTEXT(ctx)->NewState)        _swrast_validate_derived( ctx ); -   INIT_SPAN(span); -   span.arrayMask |= SPAN_MASK;  /* we'll init span.mask[] */ +   INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_MASK); +   /*span.arrayMask |= SPAN_MASK;*/  /* we'll init span.mask[] */     span.x = px;     span.y = py; -   span.end = width; +   /*span.end = width;*/     if (ctx->Visual.rgbMode) {        span.interpMask |= SPAN_RGBA;        span.red   = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); @@ -218,9 +218,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,           }           if (ctx->Visual.rgbMode) -            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +            _mesa_write_rgba_span(ctx, &span);           else -            _mesa_write_index_span(ctx, &span, GL_BITMAP); +	    _mesa_write_index_span(ctx, &span);           /* get ready for next row */           if (mask != 1) @@ -241,9 +241,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,           }           if (ctx->Visual.rgbMode) -            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +            _mesa_write_rgba_span(ctx, &span);           else -            _mesa_write_index_span(ctx, &span, GL_BITMAP); +            _mesa_write_index_span(ctx, &span);           /* get ready for next row */           if (mask != 128) diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c index 5f8c35daaa..74d1164ae3 100644 --- a/src/mesa/swrast/s_copypix.c +++ b/src/mesa/swrast/s_copypix.c @@ -1,4 +1,4 @@ -/* $Id: s_copypix.c,v 1.34 2002/03/14 22:09:25 brianp Exp $ */ +/* $Id: s_copypix.c,v 1.35 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -109,8 +109,8 @@ copy_conv_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,     GLfloat *dest, *tmpImage, *convImage;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA); +   /*span.arrayMask |= SPAN_RGBA;*/     if (ctx->Depth.Test)        _mesa_span_default_z(ctx, &span); @@ -282,7 +282,7 @@ copy_conv_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,           span.x = destx;           span.y = dy;           span.end = width; -         _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         _mesa_write_rgba_span(ctx, &span);        }     } @@ -308,8 +308,8 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,     const GLuint transferOps = ctx->_ImageTransferState;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA); +   /*span.arrayMask |= SPAN_RGBA;*/     if (ctx->Pixel.Convolution2DEnabled || ctx->Pixel.Separable2DEnabled) {        copy_conv_rgba_pixels(ctx, srcx, srcy, width, height, destx, desty); @@ -523,7 +523,7 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,           span.x = destx;           span.y = dy;           span.end = width; -         _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         _mesa_write_rgba_span(ctx, &span);        }     } @@ -550,8 +550,8 @@ static void copy_ci_pixels( GLcontext *ctx,     GLint overlapping;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_INDEX; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_INDEX); +   /*span.arrayMask |= SPAN_INDEX;*/     /* Determine if copy should be bottom-to-top or top-to-bottom */     if (srcy<desty) { @@ -638,7 +638,7 @@ static void copy_ci_pixels( GLcontext *ctx,        if (zoom)           _mesa_write_zoomed_index_span(ctx, &span, desty);        else -         _mesa_write_index_span(ctx, &span, GL_BITMAP); +         _mesa_write_index_span(ctx, &span);     }     /* Restore pixel source to be the draw buffer (for blending, etc) */ @@ -666,8 +666,8 @@ static void copy_depth_pixels( GLcontext *ctx, GLint srcx, GLint srcy,     GLint overlapping;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_Z; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_Z); +   /*span.arrayMask |= SPAN_Z;*/     if (!ctx->Visual.depthBits) {        _mesa_error( ctx, GL_INVALID_OPERATION, "glCopyPixels" ); @@ -737,13 +737,13 @@ static void copy_depth_pixels( GLcontext *ctx, GLint srcx, GLint srcy,                                            (const GLchan (*)[4])span.color.rgba,                                            desty );           else -            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +            _mesa_write_rgba_span(ctx, &span);        }        else {           if (zoom)              _mesa_write_zoomed_index_span( ctx, &span, desty );           else -            _mesa_write_index_span(ctx, &span, GL_BITMAP); +            _mesa_write_index_span(ctx, &span);        }     } diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c index 81647f9fc9..87841dde68 100644 --- a/src/mesa/swrast/s_depth.c +++ b/src/mesa/swrast/s_depth.c @@ -1,4 +1,4 @@ -/* $Id: s_depth.c,v 1.19 2002/03/19 16:47:05 brianp Exp $ */ +/* $Id: s_depth.c,v 1.20 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -567,8 +567,18 @@ depth_test_span( GLcontext *ctx, struct sw_span *span)           GLuint *zptr = (GLuint *) Z_ADDRESS32(ctx, x, y);           passed = depth_test_span32(ctx, n, zptr, span->zArray, span->mask);        } -      if (passed < span->end) -         span->writeAll = GL_FALSE; +#if 0 +      /* this causes a glDrawPixels(GL_DEPTH_COMPONENT) conformance failure */ +      if (passed < span->end) { +	  span->writeAll = GL_FALSE; +	  if (passed == 0) { +	      span->end = 0; +	      return 0; +	  } +	  while (span->end > 0  &&  span->mask[span->end - 1] == 0) +	      span->end --; +      } +#endif        return passed;     }  } diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c index 3890126534..82998ba57c 100644 --- a/src/mesa/swrast/s_drawpix.c +++ b/src/mesa/swrast/s_drawpix.c @@ -1,4 +1,4 @@ -/* $Id: s_drawpix.c,v 1.31 2002/02/17 17:30:23 brianp Exp $ */ +/* $Id: s_drawpix.c,v 1.32 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -104,8 +104,8 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,     const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA); +   /*span.arrayMask |= SPAN_RGBA;*/     if (!ctx->Current.RasterPosValid) {        return GL_TRUE;      /* no-op */ @@ -511,8 +511,8 @@ draw_index_pixels( GLcontext *ctx, GLint x, GLint y,     GLint row, drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_INDEX; +   INIT_SPAN(span, GL_BITMAP, drawWidth, 0, SPAN_INDEX); +   /*span.arrayMask |= SPAN_INDEX;*/     if (ctx->Depth.Test)        _mesa_span_default_z(ctx, &span); @@ -535,7 +535,7 @@ draw_index_pixels( GLcontext *ctx, GLint x, GLint y,        if (zoom)           _mesa_write_zoomed_index_span(ctx, &span, desty);        else -         _mesa_write_index_span(ctx, &span, GL_BITMAP); +         _mesa_write_index_span(ctx, &span);     }  } @@ -614,9 +614,9 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,     GLint drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_Z; -   span.end = drawWidth; +   INIT_SPAN(span, GL_BITMAP, drawWidth, 0, SPAN_Z); +   /*span.arrayMask |= SPAN_Z; +     span.end = drawWidth;*/     if (type != GL_BYTE         && type != GL_UNSIGNED_BYTE @@ -648,7 +648,7 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,           GLint i;           for (i = 0; i < drawWidth; i++)              span.zArray[i] = zptr[i]; -         _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         _mesa_write_rgba_span(ctx, &span);        }     }     else if (type==GL_UNSIGNED_INT && ctx->Visual.depthBits == 32 @@ -663,7 +663,7 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,              _mesa_image_address(&ctx->Unpack, pixels, width, height,                                  GL_DEPTH_COMPONENT, type, 0, row, 0);           MEMCPY(span.zArray, zptr, drawWidth * sizeof(GLdepth)); -         _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         _mesa_write_rgba_span(ctx, &span);        }     }     else { @@ -691,13 +691,13 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,                 _mesa_write_zoomed_rgba_span(ctx, &span,                                   (const GLchan (*)[4]) span.color.rgba, desty);              else -               _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +               _mesa_write_rgba_span(ctx, &span);           }           else {              if (zoom)                 _mesa_write_zoomed_index_span(ctx, &span, desty);              else -               _mesa_write_index_span(ctx, &span, GL_BITMAP); +               _mesa_write_index_span(ctx, &span);           }        }     } @@ -721,8 +721,8 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,     GLuint transferOps = ctx->_ImageTransferState;     struct sw_span span; -   INIT_SPAN(span); -   span.arrayMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA); +   /*span.arrayMask |= SPAN_RGBA;*/     if (!_mesa_is_legal_format_and_type(format, type)) {        _mesa_error(ctx, GL_INVALID_ENUM, "glDrawPixels(format or type)"); @@ -838,7 +838,7 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,              span.x = x;              span.y = y;              span.end = width; -            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +            _mesa_write_rgba_span(ctx, &span);           }        }     } diff --git a/src/mesa/swrast/s_lines.c b/src/mesa/swrast/s_lines.c index b50454f3b0..aabcc5f213 100644 --- a/src/mesa/swrast/s_lines.c +++ b/src/mesa/swrast/s_lines.c @@ -1,4 +1,4 @@ -/* $Id: s_lines.c,v 1.26 2002/02/15 03:39:37 brianp Exp $ */ +/* $Id: s_lines.c,v 1.27 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -88,11 +88,11 @@ draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor )                 span->yArray[i]++;           }           if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) -            _mesa_write_texture_span(ctx, span, GL_LINE); +            _mesa_write_texture_span(ctx, span);           else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) -            _mesa_write_rgba_span(ctx, span, GL_LINE); +            _mesa_write_rgba_span(ctx, span);           else -            _mesa_write_index_span(ctx, span, GL_LINE); +            _mesa_write_index_span(ctx, span);        }     }     else { @@ -107,11 +107,11 @@ draw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor )                 span->xArray[i]++;           }           if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) -            _mesa_write_texture_span(ctx, span, GL_LINE); +            _mesa_write_texture_span(ctx, span);           else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) -            _mesa_write_rgba_span(ctx, span, GL_LINE); +            _mesa_write_rgba_span(ctx, span);           else -            _mesa_write_index_span(ctx, span, GL_LINE); +            _mesa_write_index_span(ctx, span);        }     }  } @@ -134,9 +134,9 @@ static void flat_ci_line( GLcontext *ctx,     ASSERT(!ctx->Line.StippleFlag);     ASSERT(ctx->Line.Width == 1.0F); -   INIT_SPAN(span); -   span.arrayMask |= SPAN_XY; -   span.interpMask |= SPAN_INDEX; +   INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, SPAN_XY); +   /*span.arrayMask |= SPAN_XY; +     span.interpMask |= SPAN_INDEX;*/     span.index = IntToFixed(vert1->index);     span.indexStep = 0; @@ -150,7 +150,7 @@ static void flat_ci_line( GLcontext *ctx,  #include "s_linetemp.h" -   _mesa_write_index_span(ctx, &span, GL_LINE); +   _mesa_write_index_span(ctx, &span);  } @@ -165,9 +165,9 @@ static void flat_rgba_line( GLcontext *ctx,     ASSERT(!ctx->Line.StippleFlag);     ASSERT(ctx->Line.Width == 1.0F); -   INIT_SPAN(span); -   span.arrayMask |= SPAN_XY; -   span.interpMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, SPAN_XY); +   /*span.arrayMask |= SPAN_XY; +     span.interpMask |= SPAN_RGBA;*/     span.red = ChanToFixed(vert1->color[0]);     span.green = ChanToFixed(vert1->color[1]);     span.blue = ChanToFixed(vert1->color[2]); @@ -187,7 +187,7 @@ static void flat_rgba_line( GLcontext *ctx,  #include "s_linetemp.h" -   _mesa_write_rgba_span(ctx, &span, GL_LINE); +   _mesa_write_rgba_span(ctx, &span);  } @@ -202,8 +202,8 @@ static void smooth_ci_line( GLcontext *ctx,     ASSERT(!ctx->Line.StippleFlag);     ASSERT(ctx->Line.Width == 1.0F); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_INDEX); +   INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_INDEX); +   /*span.arrayMask |= (SPAN_XY | SPAN_INDEX);*/  #define INTERP_XY 1  #define INTERP_INDEX 1 @@ -217,7 +217,7 @@ static void smooth_ci_line( GLcontext *ctx,  #include "s_linetemp.h" -   _mesa_write_index_span(ctx, &span, GL_LINE); +   _mesa_write_index_span(ctx, &span);  } @@ -232,8 +232,8 @@ static void smooth_rgba_line( GLcontext *ctx,     ASSERT(!ctx->Line.StippleFlag);     ASSERT(ctx->Line.Width == 1.0F); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_RGBA); +   INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_RGBA); +   /*span.arrayMask |= (SPAN_XY | SPAN_RGBA);*/  #define INTERP_XY 1  #define INTERP_RGB 1 @@ -251,7 +251,7 @@ static void smooth_rgba_line( GLcontext *ctx,  #include "s_linetemp.h" -   _mesa_write_rgba_span(ctx, &span, GL_LINE); +   _mesa_write_rgba_span(ctx, &span);  } @@ -265,8 +265,9 @@ static void general_smooth_ci_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX); +   INIT_SPAN(span, GL_LINE, 0, 0, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX);*/  #define SET_XMAJOR 1  #define INTERP_XY 1 @@ -293,7 +294,7 @@ static void general_smooth_ci_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_index_span(ctx, &span, GL_LINE); +      _mesa_write_index_span(ctx, &span);     }  } @@ -308,9 +309,10 @@ static void general_flat_ci_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_FLAT); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); -   span.interpMask |= SPAN_INDEX; +   INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, +	     SPAN_XY | SPAN_Z | SPAN_FOG); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); +     span.interpMask |= SPAN_INDEX;*/     span.index = IntToFixed(vert1->index);     span.indexStep = 0; @@ -337,7 +339,7 @@ static void general_flat_ci_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_index_span(ctx, &span, GL_LINE); +      _mesa_write_index_span(ctx, &span);     }  } @@ -352,8 +354,9 @@ static void general_smooth_rgba_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA); +   INIT_SPAN(span, GL_LINE, 0, 0, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA);*/  #define SET_XMAJOR 1  #define INTERP_XY 1 @@ -384,7 +387,7 @@ static void general_smooth_rgba_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_rgba_span(ctx, &span, GL_LINE); +      _mesa_write_rgba_span(ctx, &span);     }  } @@ -398,9 +401,10 @@ static void general_flat_rgba_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_FLAT); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); -   span.interpMask |= SPAN_RGBA; +   INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, +	     SPAN_XY | SPAN_Z | SPAN_FOG); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); +     span.interpMask |= SPAN_RGBA;*/     span.red = ChanToFixed(vert1->color[0]);     span.green = ChanToFixed(vert1->color[1]);     span.blue = ChanToFixed(vert1->color[2]); @@ -433,7 +437,7 @@ static void general_flat_rgba_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_rgba_span(ctx, &span, GL_LINE); +      _mesa_write_rgba_span(ctx, &span);     }  } @@ -448,9 +452,10 @@ static void flat_textured_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_FLAT); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); -   span.interpMask |= (SPAN_RGBA | SPAN_SPEC); +   INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_RGBA); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); +     span.interpMask |= (SPAN_RGBA | SPAN_SPEC);*/     span.red = ChanToFixed(vert1->color[0]);     span.green = ChanToFixed(vert1->color[1]);     span.blue = ChanToFixed(vert1->color[2]); @@ -494,7 +499,7 @@ static void flat_textured_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_texture_span(ctx, &span, GL_LINE); +      _mesa_write_texture_span(ctx, &span);     }  } @@ -510,8 +515,9 @@ static void smooth_textured_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); +   INIT_SPAN(span, GL_LINE, 0, 0, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA);*/  #define SET_XMAJOR 1  #define INTERP_XY 1 @@ -547,7 +553,7 @@ static void smooth_textured_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_texture_span(ctx, &span, GL_LINE); +      _mesa_write_texture_span(ctx, &span);     }  } @@ -565,8 +571,9 @@ static void smooth_multitextured_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA); +   INIT_SPAN(span, GL_LINE, 0, 0, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA);*/  #define SET_XMAJOR 1  #define INTERP_XY 1 @@ -610,7 +617,7 @@ static void smooth_multitextured_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_texture_span(ctx, &span, GL_LINE); +      _mesa_write_texture_span(ctx, &span);     }  } @@ -628,9 +635,10 @@ static void flat_multitextured_line( GLcontext *ctx,     ASSERT(ctx->Light.ShadeModel == GL_FLAT); -   INIT_SPAN(span); -   span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); -   span.interpMask |= (SPAN_RGBA | SPAN_SPEC); +   INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, +	     SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); +   /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); +     span.interpMask |= (SPAN_RGBA | SPAN_SPEC);*/     span.red = ChanToFixed(vert1->color[0]);     span.green = ChanToFixed(vert1->color[1]);     span.blue = ChanToFixed(vert1->color[2]); @@ -678,7 +686,7 @@ static void flat_multitextured_line( GLcontext *ctx,        draw_wide_line(ctx, &span, xMajor);     }     else { -      _mesa_write_texture_span(ctx, &span, GL_LINE); +      _mesa_write_texture_span(ctx, &span);     }  } diff --git a/src/mesa/swrast/s_pixeltex.c b/src/mesa/swrast/s_pixeltex.c index fab67da69f..c2b597a9af 100644 --- a/src/mesa/swrast/s_pixeltex.c +++ b/src/mesa/swrast/s_pixeltex.c @@ -1,4 +1,4 @@ -/* $Id: s_pixeltex.c,v 1.7 2002/04/04 16:53:59 brianp Exp $ */ +/* $Id: s_pixeltex.c,v 1.8 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -97,6 +97,9 @@ _swrast_pixel_texture(GLcontext *ctx, struct sw_span *span)        GLchan primary_rgba[MAX_WIDTH][4];        GLuint unit; +      ASSERT(!(span->arrayMask & SPAN_TEXTURE)); +      span->arrayMask |= SPAN_TEXTURE; +        MEMCPY(primary_rgba, span->color.rgba, 4 * span->end * sizeof(GLchan));        for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { @@ -104,24 +107,25 @@ _swrast_pixel_texture(GLcontext *ctx, struct sw_span *span)              pixeltexgen(ctx, span->end,                          (const GLchan (*)[4]) span->color.rgba,                          span->texcoords[unit]); -            _swrast_texture_fragments(ctx, unit, span->end, -                                      span->texcoords[unit], -                                      NULL, /* lambda */ -                                      (CONST GLchan (*)[4]) primary_rgba, -                                      span->color.rgba); +            _swrast_texture_fragments(ctx, unit, span, +                                      (CONST GLchan (*)[4]) primary_rgba);           }        } +      /* this is a work-around to be fixed by initializing again span */ +      span->arrayMask &= ~SPAN_TEXTURE;     }     else {        /* single texture, unit 0 */        ASSERT(ctx->Texture._ReallyEnabled & TEXTURE0_ANY); +      ASSERT(!(span->arrayMask & SPAN_TEXTURE)); +      span->arrayMask |= SPAN_TEXTURE; +        pixeltexgen(ctx, span->end,                    (const GLchan (*)[4]) span->color.rgba,                    span->texcoords[0]); -      _swrast_texture_fragments(ctx, 0, span->end, -                                span->texcoords[0], -                                NULL, /* lambda */ -                                (CONST GLchan (*)[4]) span->color.rgba, -                                (GLchan (*)[4]) span->color.rgba); +      _swrast_texture_fragments(ctx, 0, span, +                                (CONST GLchan (*)[4]) span->color.rgba); +      /* this is a work-around to be fixed */ +      span->arrayMask &= ~SPAN_TEXTURE;     }  } diff --git a/src/mesa/swrast/s_pointtemp.h b/src/mesa/swrast/s_pointtemp.h index 8fa608f824..29bf3e3baf 100644 --- a/src/mesa/swrast/s_pointtemp.h +++ b/src/mesa/swrast/s_pointtemp.h @@ -1,4 +1,4 @@ -/* $Id: s_pointtemp.h,v 1.13 2002/03/16 18:02:08 brianp Exp $ */ +/* $Id: s_pointtemp.h,v 1.14 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -87,10 +87,10 @@ NAME ( GLcontext *ctx, const SWvertex *vert )  	 return;     } -   INIT_SPAN(span); +   INIT_SPAN(span, GL_POINT, 0, SPAN_FOG, SPAN_XY | SPAN_Z); -   span.arrayMask |= (SPAN_XY | SPAN_Z); -   span.interpMask |= SPAN_FOG; +   /*span.arrayMask |= (SPAN_XY | SPAN_Z); +     span.interpMask |= SPAN_FOG;*/     span.fog = vert->fog;     span.fogStep = 0.0; @@ -314,13 +314,13 @@ NAME ( GLcontext *ctx, const SWvertex *vert )  #if FLAGS & TEXTURE     if (ctx->Texture._ReallyEnabled) -      _mesa_write_texture_span(ctx, &span, GL_POINT); +      _mesa_write_texture_span(ctx, &span);     else -      _mesa_write_rgba_span(ctx, &span, GL_POINT); +      _mesa_write_rgba_span(ctx, &span);  #elif FLAGS & RGBA -   _mesa_write_rgba_span(ctx, &span, GL_POINT); +   _mesa_write_rgba_span(ctx, &span);  #else -   _mesa_write_index_span(ctx, &span, GL_POINT); +   _mesa_write_index_span(ctx, &span);  #endif  } diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 2ce8b76cf5..9241444dd9 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -1,4 +1,4 @@ -/* $Id: s_span.c,v 1.37 2002/03/16 18:02:08 brianp Exp $ */ +/* $Id: s_span.c,v 1.38 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -135,7 +135,8 @@ interpolate_colors(GLcontext *ctx, struct sw_span *span)     GLchan (*rgba)[4] = span->color.rgba;     GLuint i; -   ASSERT(span->interpMask & SPAN_RGBA); +   ASSERT((span->interpMask & SPAN_RGBA)  && +	  !(span->arrayMask & SPAN_RGBA));     if (span->interpMask & SPAN_FLAT) {        /* constant color */ @@ -174,7 +175,8 @@ interpolate_indexes(GLcontext *ctx, struct sw_span *span)     const GLuint n = span->end;     GLuint *indexes = span->color.index;     GLuint i; -   ASSERT(span->interpMask & SPAN_INDEX); +   ASSERT((span->interpMask & SPAN_INDEX)  && +	  !(span->arrayMask & SPAN_INDEX));     if ((span->interpMask & SPAN_FLAT) || (indexStep == 0)) {        /* constant color */ @@ -242,7 +244,8 @@ _mesa_span_interpolate_z( const GLcontext *ctx, struct sw_span *span )     const GLuint n = span->end;     GLuint i; -   ASSERT(span->interpMask & SPAN_Z); +   ASSERT((span->interpMask & SPAN_Z)  && +	  !(span->arrayMask & SPAN_Z));     if (ctx->Visual.depthBits <= 16) {        GLfixed zval = span->z; @@ -318,10 +321,12 @@ static void  interpolate_texcoords(GLcontext *ctx, struct sw_span *span)  {     ASSERT(span->interpMask & SPAN_TEXTURE); +   ASSERT(!(span->arrayMask & SPAN_TEXTURE));     if (ctx->Texture._ReallyEnabled & ~TEXTURE0_ANY) {        /* multitexture */        GLuint u; +      span->arrayMask |= SPAN_TEXTURE;        for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {           if (ctx->Texture.Unit[u]._ReallyEnabled) {              const struct gl_texture_object *obj =ctx->Texture.Unit[u]._Current; @@ -402,6 +407,7 @@ interpolate_texcoords(GLcontext *ctx, struct sw_span *span)        const struct gl_texture_object *obj = ctx->Texture.Unit[0]._Current;        const struct gl_texture_image *img = obj->Image[obj->BaseLevel];        GLboolean needLambda = (obj->MinFilter != obj->MagFilter); +      span->arrayMask |= SPAN_TEXTURE;        if (needLambda) {           /* just texture unit 0, with lambda */           const GLfloat texW = (GLfloat) img->Width; @@ -717,14 +723,15 @@ multi_write_rgba_span( GLcontext *ctx, struct sw_span *span )   * to their original values before returning.   */  void -_mesa_write_index_span( GLcontext *ctx, struct sw_span *span, -			GLenum primitive) +_mesa_write_index_span( GLcontext *ctx, struct sw_span *span)  {     SWcontext *swrast = SWRAST_CONTEXT(ctx);     const GLuint origInterpMask = span->interpMask;     const GLuint origArrayMask = span->arrayMask;     ASSERT(span->end <= MAX_WIDTH); +   ASSERT(span->primitive == GL_POINT  ||  span->primitive == GL_LINE || +	  span->primitive == GL_POLYGON  ||  span->primitive == GL_BITMAP);     ASSERT((span->interpMask | span->arrayMask) & SPAN_INDEX);     ASSERT((span->interpMask & span->arrayMask) == 0); @@ -738,8 +745,7 @@ _mesa_write_index_span( GLcontext *ctx, struct sw_span *span,     }     /* Clipping */ -   if ((swrast->_RasterMask & CLIP_BIT) || (primitive == GL_BITMAP) -       || (primitive == GL_POINT) || (primitive == GL_LINE)) { +   if ((swrast->_RasterMask & CLIP_BIT) || (span->primitive != GL_POLYGON)) {        if (!clip_span(ctx, span)) {           return;        } @@ -760,7 +766,7 @@ _mesa_write_index_span( GLcontext *ctx, struct sw_span *span,  #endif     /* Polygon Stippling */ -   if (ctx->Polygon.StippleFlag && primitive == GL_POLYGON) { +   if (ctx->Polygon.StippleFlag && span->primitive == GL_POLYGON) {        stipple_polygon_span(ctx, span);     } @@ -872,8 +878,7 @@ _mesa_write_index_span( GLcontext *ctx, struct sw_span *span,   * to their original values before returning.   */  void -_mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span, -		       GLenum primitive) +_mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span)  {     SWcontext *swrast = SWRAST_CONTEXT(ctx);     const GLuint colorMask = *((GLuint *) ctx->Color.ColorMask); @@ -882,6 +887,8 @@ _mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span,     GLboolean monoColor;     ASSERT(span->end <= MAX_WIDTH); +   ASSERT(span->primitive == GL_POINT  ||  span->primitive == GL_LINE || +	  span->primitive == GL_POLYGON  ||  span->primitive == GL_BITMAP);     ASSERT((span->interpMask & span->arrayMask) == 0);     ASSERT((span->interpMask | span->arrayMask) & SPAN_RGBA);  #ifdef DEBUG @@ -892,7 +899,7 @@ _mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span,  #endif     /* -   printf("%s()  interp 0x%x  array 0x%x  p=0x%x\n", __FUNCTION__, span->interpMask, span->arrayMask, primitive); +   printf("%s()  interp 0x%x  array 0x%x  p=0x%x\n", __FUNCTION__, span->interpMask, span->arrayMask, span->primitive);     */     if (span->arrayMask & SPAN_MASK) { @@ -910,8 +917,7 @@ _mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span,        span->blueStep == 0 && span->alphaStep == 0;     /* Clipping */ -   if ((swrast->_RasterMask & CLIP_BIT) || (primitive == GL_BITMAP) -       || (primitive == GL_POINT) || (primitive == GL_LINE)) { +   if ((swrast->_RasterMask & CLIP_BIT) || (span->primitive != GL_POLYGON)) {        if (!clip_span(ctx, span)) {           return;        } @@ -932,7 +938,7 @@ _mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span,  #endif     /* Polygon Stippling */ -   if (ctx->Polygon.StippleFlag && primitive == GL_POLYGON) { +   if (ctx->Polygon.StippleFlag && span->primitive == GL_POLYGON) {        stipple_polygon_span(ctx, span);     } @@ -1099,13 +1105,14 @@ add_colors(GLuint n, GLchan rgba[][4], GLchan specular[][4] )   * to their original values before returning.   */  void -_mesa_write_texture_span( GLcontext *ctx, struct sw_span *span, -                          GLenum primitive ) +_mesa_write_texture_span( GLcontext *ctx, struct sw_span *span)  {     const GLuint colorMask = *((GLuint *) ctx->Color.ColorMask);     SWcontext *swrast = SWRAST_CONTEXT(ctx);     const GLuint origArrayMask = span->arrayMask; +   ASSERT(span->primitive == GL_POINT  ||  span->primitive == GL_LINE || +	  span->primitive == GL_POLYGON  ||  span->primitive == GL_BITMAP);     ASSERT(span->end <= MAX_WIDTH);     ASSERT((span->interpMask & span->arrayMask) == 0);     ASSERT(ctx->Texture._ReallyEnabled); @@ -1124,8 +1131,7 @@ _mesa_write_texture_span( GLcontext *ctx, struct sw_span *span,     }     /* Clipping */ -   if ((swrast->_RasterMask & CLIP_BIT) || (primitive == GL_BITMAP) -       || (primitive == GL_POINT) || (primitive == GL_LINE)) { +   if ((swrast->_RasterMask & CLIP_BIT) || (span->primitive != GL_POLYGON)) {        if (!clip_span(ctx, span)) {  	 return;        } @@ -1146,7 +1152,7 @@ _mesa_write_texture_span( GLcontext *ctx, struct sw_span *span,  #endif     /* Polygon Stippling */ -   if (ctx->Polygon.StippleFlag && primitive == GL_POLYGON) { +   if (ctx->Polygon.StippleFlag && span->primitive == GL_POLYGON) {        stipple_polygon_span(ctx, span);     } diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h index d9a0598726..54301c3433 100644 --- a/src/mesa/swrast/s_span.h +++ b/src/mesa/swrast/s_span.h @@ -1,4 +1,4 @@ -/* $Id: s_span.h,v 1.15 2002/02/17 17:30:58 brianp Exp $ */ +/* $Id: s_span.h,v 1.16 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -47,16 +47,15 @@ _mesa_span_default_color( GLcontext *ctx, struct sw_span *span );  extern void -_mesa_write_index_span( GLcontext *ctx, struct sw_span *span, -                        GLenum primitive); +_mesa_write_index_span( GLcontext *ctx, struct sw_span *span); +  extern void -_mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span, -                       GLenum primitive); +_mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span); +  extern void -_mesa_write_texture_span( GLcontext *ctx, struct sw_span *span, -                         GLenum primitive ); +_mesa_write_texture_span( GLcontext *ctx, struct sw_span *span);  extern void diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 617c04ca68..060c8e136d 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -1,4 +1,4 @@ -/* $Id: s_texture.c,v 1.58 2002/04/04 16:56:24 brianp Exp $ */ +/* $Id: s_texture.c,v 1.59 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -3329,26 +3329,30 @@ apply_texture( const GLcontext *ctx,   * Apply a unit of texture mapping to the incoming fragments.   */  void -_swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n, -			       GLfloat texcoords[][4], GLfloat lambda[], -			       CONST GLchan primary_rgba[][4], -			       GLchan rgba[][4] ) +_swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, +			   struct sw_span *span, +			   CONST GLchan primary_rgba[][4])  {     const GLuint mask = TEXTURE0_ANY << (texUnit * 4); +   GLfloat (*texcoords)[4] = span->texcoords[texUnit]; +   GLfloat *lambda = span->lambda[texUnit]; +     if (ctx->Texture._ReallyEnabled & mask) {        const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit]; + +      ASSERT(span->arrayMask & SPAN_TEXTURE);        if (textureUnit->_Current) {   /* XXX need this? */           const struct gl_texture_object *curObj = textureUnit->_Current;           GLchan texel[MAX_WIDTH][4]; -         if (lambda) { +         if (span->arrayMask | SPAN_LAMBDA) {  #if 0              float min, max;              int i;              min = max = lambda[0]; -            for (i = 1; i < n; i++) { +            for (i = 1; i < span->end; i++) {                 if (lambda[i] > max)                    max = lambda[i];                 if (lambda[i] < min) @@ -3359,7 +3363,7 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,              if (textureUnit->LodBias != 0.0F) {                 /* apply LOD bias, but don't clamp yet */                 GLuint i; -               for (i=0;i<n;i++) { +               for (i=0;i<span->end;i++) {                    lambda[i] += textureUnit->LodBias;                 }              } @@ -3369,7 +3373,7 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,                 const GLfloat min = curObj->MinLod;                 const GLfloat max = curObj->MaxLod;                 GLuint i; -               for (i=0;i<n;i++) { +               for (i=0;i<span->end;i++) {                    GLfloat l = lambda[i];                    lambda[i] = CLAMP(l, min, max);                 } @@ -3379,11 +3383,11 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,           /* Sample the texture for n fragments */           SWRAST_CONTEXT(ctx)->TextureSample[texUnit]( ctx, texUnit,                                                        textureUnit->_Current, -                                                      n, texcoords, +                                                      span->end, texcoords,                                                        lambda, texel ); -         apply_texture( ctx, textureUnit, n, primary_rgba, -                        (const GLchan (*)[4]) texel, rgba ); +         apply_texture( ctx, textureUnit, span->end, primary_rgba, +                        (const GLchan (*)[4]) texel, span->color.rgba );        }     }  } @@ -3405,6 +3409,7 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )        GLuint unit;        ASSERT(span->end < MAX_WIDTH); +      ASSERT(span->arrayMask & SPAN_TEXTURE);        /* save copy of the span colors (the GL_PRIMARY_COLOR) */        MEMCPY(primary_rgba, span->color.rgba, 4 * span->end * sizeof(GLchan)); @@ -3412,12 +3417,8 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )        /* loop over texture units, modifying the span->color.rgba values */        for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {           if (ctx->Texture.Unit[unit]._ReallyEnabled) { -            _swrast_texture_fragments( ctx, unit, span->end, -                                           span->texcoords[unit], -                                           (span->arrayMask & SPAN_LAMBDA) ? -                                              span->lambda[unit] : NULL, -                                           (CONST GLchan (*)[4]) primary_rgba, -                                           span->color.rgba ); +            _swrast_texture_fragments( ctx, unit, span, +				       (CONST GLchan (*)[4]) primary_rgba);           }        }     } @@ -3425,11 +3426,7 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )        /* Just unit 0 enabled */        ASSERT(ctx->Texture._ReallyEnabled & TEXTURE0_ANY); -      _swrast_texture_fragments( ctx, 0, span->end, -                                     span->texcoords[0], -                                     (span->arrayMask & SPAN_LAMBDA) ? -                                        span->lambda[0] : NULL, -                                     (CONST GLchan (*)[4]) span->color.rgba, -                                     span->color.rgba ); +      _swrast_texture_fragments( ctx, 0, span, +				 (CONST GLchan (*)[4]) span->color.rgba);     }  } diff --git a/src/mesa/swrast/s_texture.h b/src/mesa/swrast/s_texture.h index ba9642e04a..91f147afe0 100644 --- a/src/mesa/swrast/s_texture.h +++ b/src/mesa/swrast/s_texture.h @@ -1,4 +1,4 @@ -/* $Id: s_texture.h,v 1.11 2002/01/28 04:25:56 brianp Exp $ */ +/* $Id: s_texture.h,v 1.12 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -38,11 +38,12 @@ _swrast_choose_texture_sample_func( GLcontext *ctx,  				    GLuint texUnit,  				    const struct gl_texture_object *tObj ); +  extern void -_swrast_texture_fragments( GLcontext *ctx, GLuint texSet, GLuint n, -			       GLfloat texcoords[][4], GLfloat lambda[], -			       CONST GLchan primary_rgba[][4], -                               GLchan rgba[][4] ); +_swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, +			   struct sw_span *span, +			   CONST GLchan primary_rgba[][4]); +  extern void  _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span ); diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 33080f83bb..b5d439609d 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -1,4 +1,4 @@ -/* $Id: s_triangle.c,v 1.56 2002/03/25 17:24:43 brianp Exp $ */ +/* $Id: s_triangle.c,v 1.57 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -85,7 +85,7 @@ static void flat_ci_triangle( GLcontext *ctx,     span.index = IntToFixed(v2->index);			\     span.indexStep = 0; -#define RENDER_SPAN( span )  _mesa_write_index_span(ctx, &span, GL_POLYGON ) +#define RENDER_SPAN( span )  _mesa_write_index_span(ctx, &span);  #include "s_tritemp.h"  } @@ -104,7 +104,7 @@ static void smooth_ci_triangle( GLcontext *ctx,  #define INTERP_FOG 1  #define INTERP_INDEX 1 -#define RENDER_SPAN( span )  _mesa_write_index_span(ctx, &span, GL_POLYGON) +#define RENDER_SPAN( span )  _mesa_write_index_span(ctx, &span);  #include "s_tritemp.h"  } @@ -136,7 +136,7 @@ static void flat_rgba_triangle( GLcontext *ctx,     span.blueStep = 0;				\     span.alphaStep = 0; -#define RENDER_SPAN( span )  _mesa_write_rgba_span(ctx, &span, GL_POLYGON ) +#define RENDER_SPAN( span )  _mesa_write_rgba_span(ctx, &span);  #include "s_tritemp.h"  } @@ -165,7 +165,7 @@ static void smooth_rgba_triangle( GLcontext *ctx,        ASSERT(ctx->Light.ShadeModel==GL_SMOOTH);	\     } -#define RENDER_SPAN( span )  _mesa_write_rgba_span(ctx, &span, GL_POLYGON) +#define RENDER_SPAN( span )  _mesa_write_rgba_span(ctx, &span);  #include "s_tritemp.h" @@ -550,7 +550,7 @@ affine_span(GLcontext *ctx, struct sw_span *span,     }     span->interpMask &= ~SPAN_RGBA;     ASSERT(span->arrayMask & SPAN_RGBA); -   _mesa_write_rgba_span(ctx, span, GL_POLYGON); +   _mesa_write_rgba_span(ctx, span);  #undef SPAN_NEAREST  #undef SPAN_LINEAR @@ -822,7 +822,7 @@ fast_persp_span(GLcontext *ctx, struct sw_span *span,     }     ASSERT(span->arrayMask & SPAN_RGBA); -   _mesa_write_rgba_span(ctx, span, GL_POLYGON); +   _mesa_write_rgba_span(ctx, span);  #undef SPAN_NEAREST @@ -926,7 +926,7 @@ static void general_textured_triangle( GLcontext *ctx,  #define INTERP_ALPHA 1  #define INTERP_TEX 1 -#define RENDER_SPAN( span )   _mesa_write_texture_span(ctx, &span, GL_POLYGON); +#define RENDER_SPAN( span )   _mesa_write_texture_span(ctx, &span);  #include "s_tritemp.h"  } @@ -953,7 +953,7 @@ multitextured_triangle( GLcontext *ctx,  #define INTERP_SPEC 1  #define INTERP_MULTITEX 1 -#define RENDER_SPAN( span )   _mesa_write_texture_span(ctx, &span, GL_POLYGON); +#define RENDER_SPAN( span )   _mesa_write_texture_span(ctx, &span);  #include "s_tritemp.h" diff --git a/src/mesa/swrast/s_tritemp.h b/src/mesa/swrast/s_tritemp.h index 0c04db9393..35ad92f2f8 100644 --- a/src/mesa/swrast/s_tritemp.h +++ b/src/mesa/swrast/s_tritemp.h @@ -1,4 +1,4 @@ -/* $Id: s_tritemp.h,v 1.35 2002/03/16 18:02:08 brianp Exp $ */ +/* $Id: s_tritemp.h,v 1.36 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -120,7 +120,7 @@     struct sw_span span; -   INIT_SPAN(span); +   INIT_SPAN(span, GL_POLYGON, 0, 0, 0);  #ifdef INTERP_Z     (void) fixedToDepthShift; diff --git a/src/mesa/swrast/s_zoom.c b/src/mesa/swrast/s_zoom.c index b4586c1a45..d71ffd7aa1 100644 --- a/src/mesa/swrast/s_zoom.c +++ b/src/mesa/swrast/s_zoom.c @@ -1,4 +1,4 @@ -/* $Id: s_zoom.c,v 1.13 2002/02/02 17:24:11 brianp Exp $ */ +/* $Id: s_zoom.c,v 1.14 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -55,8 +55,9 @@ zoom_span( GLcontext *ctx, const struct sw_span *span,     /* no pixel arrays! */     ASSERT((span->arrayMask & SPAN_XY) == 0); +   ASSERT(span->primitive == GL_BITMAP); -   INIT_SPAN(zoomed); +   INIT_SPAN(zoomed, GL_BITMAP, 0, 0, 0);     if (format == GL_RGBA || format == GL_RGB) {        zoomed.z = span->z;        zoomed.zStep = span->z; @@ -208,7 +209,7 @@ zoom_span( GLcontext *ctx, const struct sw_span *span,           MEMCPY(rgbaSave, zoomed.color.rgba, zoomed.end * 4 * sizeof(GLchan));        }        for (zoomed.y = r0; zoomed.y < r1; zoomed.y++) { -         _mesa_write_rgba_span(ctx, &zoomed, GL_BITMAP); +         _mesa_write_rgba_span(ctx, &zoomed);           if (r1 - r0 > 1) {              /* restore the colors */              MEMCPY(zoomed.color.rgba, rgbaSave, zoomed.end*4 * sizeof(GLchan)); @@ -220,7 +221,7 @@ zoom_span( GLcontext *ctx, const struct sw_span *span,           MEMCPY(indexSave, zoomed.color.index, zoomed.end * sizeof(GLuint));        }        for (zoomed.y = r0; zoomed.y < r1; zoomed.y++) { -         _mesa_write_index_span(ctx, &zoomed, GL_BITMAP); +         _mesa_write_index_span(ctx, &zoomed);           if (r1 - r0 > 1) {              /* restore the colors */              MEMCPY(zoomed.color.index, indexSave, zoomed.end * sizeof(GLuint)); diff --git a/src/mesa/swrast/swrast.h b/src/mesa/swrast/swrast.h index a6c07e5655..7070569385 100644 --- a/src/mesa/swrast/swrast.h +++ b/src/mesa/swrast/swrast.h @@ -1,4 +1,4 @@ -/* $Id: swrast.h,v 1.21 2002/03/16 00:53:15 brianp Exp $ */ +/* $Id: swrast.h,v 1.22 2002/04/12 15:39:59 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -108,6 +108,9 @@ struct sw_span {     /* This flag indicates that only a part of the span is visible */     GLboolean writeAll; +   /* either GL_POLYGON, GL_LINE, GL_POLYGON, GL_BITMAP */ +   GLenum primitive; +     /**      * This bitmask (of SPAN_* flags) indicates which of the x/xStep      * variables are relevant. @@ -168,11 +171,13 @@ struct sw_span {  }; -#define INIT_SPAN(S)	\ -do {			\ -   S.interpMask = 0;	\ -   S.arrayMask = 0;	\ -   S.start = S.end = 0;	\ +#define INIT_SPAN(S, PRIMITIVE, END, INTERP_MASK, ARRAY_MASK)  \ +do {                              \ +   S.primitive = (PRIMITIVE);     \ +   S.interpMask = (INTERP_MASK);  \ +   S.arrayMask = (ARRAY_MASK);    \ +   S.start = 0;                   \ +   S.end = (END);                 \  } while (0) | 
