diff options
author | Brian Paul <[email protected]> | 2002-08-07 00:45:07 +0000 |
---|---|---|
committer | Brian Paul <[email protected]> | 2002-08-07 00:45:07 +0000 |
commit | 77df88727cb0a423dd5cb41498c2302d9df4fce7 (patch) | |
tree | 98234cef23e87e196b3628095196daed47bf6dce /src/mesa/swrast/s_bitmap.c | |
parent | 2353e96c320d4bd26d10dc29b57df3e9f882e6d3 (diff) |
struct sw_span is again allocated on the stack, but the arrays of span
data are broken out into a new struct span_arrays which is allocated
per-context (to avoid huge stack allocations - a problem on Windows).
This lets us use span.redStep instead of span->redStep (for example) to
hopefully get slightly better performance in the triangle functions.
Diffstat (limited to 'src/mesa/swrast/s_bitmap.c')
-rw-r--r-- | src/mesa/swrast/s_bitmap.c | 92 |
1 files changed, 46 insertions, 46 deletions
diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c index 1525908b233..abe5825d9d2 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.18 2002/04/19 14:05:50 brianp Exp $ */ +/* $Id: s_bitmap.c,v 1.19 2002/08/07 00:45:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -53,7 +53,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, SWcontext *swrast = SWRAST_CONTEXT(ctx); GLint row, col; GLuint count = 0; - struct sw_span *span = swrast->span; + struct sw_span span; ASSERT(ctx->RenderMode == GL_RENDER); ASSERT(bitmap); @@ -66,25 +66,25 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_XY); if (ctx->Visual.rgbMode) { - span->interpMask |= SPAN_RGBA; - span->red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); - span->green = FloatToFixed(ctx->Current.RasterColor[1] * CHAN_MAXF); - span->blue = FloatToFixed(ctx->Current.RasterColor[2] * CHAN_MAXF); - span->alpha = FloatToFixed(ctx->Current.RasterColor[3] * CHAN_MAXF); - span->redStep = span->greenStep = span->blueStep = span->alphaStep = 0; + span.interpMask |= SPAN_RGBA; + span.red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); + span.green = FloatToFixed(ctx->Current.RasterColor[1] * CHAN_MAXF); + span.blue = FloatToFixed(ctx->Current.RasterColor[2] * CHAN_MAXF); + span.alpha = FloatToFixed(ctx->Current.RasterColor[3] * CHAN_MAXF); + span.redStep = span.greenStep = span.blueStep = span.alphaStep = 0; } else { - span->interpMask |= SPAN_INDEX; - span->index = ChanToFixed(ctx->Current.RasterIndex); - span->indexStep = 0; + span.interpMask |= SPAN_INDEX; + span.index = ChanToFixed(ctx->Current.RasterIndex); + span.indexStep = 0; } if (ctx->Depth.Test) - _mesa_span_default_z(ctx, span); + _mesa_span_default_z(ctx, &span); if (ctx->Fog.Enabled) - _mesa_span_default_fog(ctx, span); + _mesa_span_default_fog(ctx, &span); - for (row = 0; row < height; row++, span->y++) { + for (row = 0; row < height; row++, span.y++) { const GLubyte *src = (const GLubyte *) _mesa_image_address( unpack, bitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, row, 0 ); @@ -93,8 +93,8 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLubyte mask = 1U << (unpack->SkipPixels & 0x7); for (col = 0; col < width; col++) { if (*src & mask) { - span->xArray[count] = px + col; - span->yArray[count] = py + row; + span.array->x[count] = px + col; + span.array->y[count] = py + row; count++; } if (mask == 128U) { @@ -115,8 +115,8 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLubyte mask = 128U >> (unpack->SkipPixels & 0x7); for (col = 0; col < width; col++) { if (*src & mask) { - span->xArray[count] = px + col; - span->yArray[count] = py + row; + span.array->x[count] = px + col; + span.array->y[count] = py + row; count++; } if (mask == 1U) { @@ -135,12 +135,12 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, if (count + width >= MAX_WIDTH || row + 1 == height) { /* flush the span */ - span->end = count; + span.end = count; if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, span); + _mesa_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, span); - span->end = 0; + _mesa_write_index_span(ctx, &span); + span.end = 0; count = 0; } } @@ -155,7 +155,6 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, * fragments, initializing the mask array to indicate which fragmens to * draw or skip. */ - void _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLsizei width, GLsizei height, @@ -164,7 +163,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, { SWcontext *swrast = SWRAST_CONTEXT(ctx); GLint row, col; - struct sw_span *span = swrast->span; + struct sw_span span; ASSERT(ctx->RenderMode == GL_RENDER); ASSERT(bitmap); @@ -175,30 +174,31 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, _swrast_validate_derived( ctx ); 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.arrayMask |= SPAN_MASK;*/ /* we'll init span.mask[] */ + span.x = px; + span.y = py; + /*span.end = width;*/ if (ctx->Visual.rgbMode) { - span->interpMask |= SPAN_RGBA; - span->red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); - span->green = FloatToFixed(ctx->Current.RasterColor[1] * CHAN_MAXF); - span->blue = FloatToFixed(ctx->Current.RasterColor[2] * CHAN_MAXF); - span->alpha = FloatToFixed(ctx->Current.RasterColor[3] * CHAN_MAXF); - span->redStep = span->greenStep = span->blueStep = span->alphaStep = 0; + span.interpMask |= SPAN_RGBA; + span.red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); + span.green = FloatToFixed(ctx->Current.RasterColor[1] * CHAN_MAXF); + span.blue = FloatToFixed(ctx->Current.RasterColor[2] * CHAN_MAXF); + span.alpha = FloatToFixed(ctx->Current.RasterColor[3] * CHAN_MAXF); + span.redStep = span.greenStep = span.blueStep = span.alphaStep = 0; } else { - span->interpMask |= SPAN_INDEX; - span->index = ChanToFixed(ctx->Current.RasterIndex); - span->indexStep = 0; + span.interpMask |= SPAN_INDEX; + span.index = ChanToFixed(ctx->Current.RasterIndex); + span.indexStep = 0; } if (ctx->Depth.Test) - _mesa_span_default_z(ctx, span); + _mesa_span_default_z(ctx, &span); if (ctx->Fog.Enabled) - _mesa_span_default_fog(ctx, span); + _mesa_span_default_fog(ctx, &span); - for (row=0; row<height; row++, span->y++) { + for (row=0; row<height; row++, span.y++) { const GLubyte *src = (const GLubyte *) _mesa_image_address( unpack, bitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, row, 0 ); @@ -206,7 +206,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, /* Lsb first */ GLubyte mask = 1U << (unpack->SkipPixels & 0x7); for (col=0; col<width; col++) { - span->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; + span.array->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; if (mask == 128U) { src++; mask = 1U; @@ -217,9 +217,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, span); + _mesa_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, span); + _mesa_write_index_span(ctx, &span); /* get ready for next row */ if (mask != 1) @@ -229,7 +229,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, /* Msb first */ GLubyte mask = 128U >> (unpack->SkipPixels & 0x7); for (col=0; col<width; col++) { - span->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; + span.array->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; if (mask == 1U) { src++; mask = 128U; @@ -240,9 +240,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, span); + _mesa_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, span); + _mesa_write_index_span(ctx, &span); /* get ready for next row */ if (mask != 128) |