s_bitmap.c revision a429a25cd55b8c16356a60452de92228bb6c71b0
1e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*
2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library
3a429a25cd55b8c16356a60452de92228bb6c71b0Brian * Version:  7.1
422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
5a429a25cd55b8c16356a60452de92228bb6c71b0Brian * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
7e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
8e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * copy of this software and associated documentation files (the "Software"),
9e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * to deal in the Software without restriction, including without limitation
10e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * and/or sell copies of the Software, and to permit persons to whom the
12e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Software is furnished to do so, subject to the following conditions:
1322144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
14e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * The above copyright notice and this permission notice shall be included
15e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * in all copies or substantial portions of the Software.
1622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
17e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
24e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
2509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul/**
2609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul * \file swrast/s_bitmap.c
2709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul * \brief glBitmap rendering.
2809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul * \author Brian Paul
2909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul */
30e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
31e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "glheader.h"
32355467bed8cf34cf5967c7be3c5f1b87ff08f845Brian Paul#include "bufferobj.h"
33e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "image.h"
34e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "macros.h"
35e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "pixel.h"
36e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
37cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_context.h"
38733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul#include "s_span.h"
39e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
40e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
41e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
429b507639ab31b2d611344f061614e71d47c9a84cBrian Paul/**
43e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Render a bitmap.
449b507639ab31b2d611344f061614e71d47c9a84cBrian Paul * Called via ctx->Driver.Bitmap()
459b507639ab31b2d611344f061614e71d47c9a84cBrian Paul * All parameter error checking will have been done before this is called.
46e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
4722144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid
48e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
49e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell		GLsizei width, GLsizei height,
50e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell		const struct gl_pixelstore_attrib *unpack,
51e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell		const GLubyte *bitmap )
52e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
53709892459922a32096fe9dd8261d0d92337bb02fKeith Whitwell   SWcontext *swrast = SWRAST_CONTEXT(ctx);
54e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   GLint row, col;
55733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul   GLuint count = 0;
56cdb27e8242215271364602995d85607cfc06d441Brian Paul   SWspan span;
57e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
58e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   ASSERT(ctx->RenderMode == GL_RENDER);
597a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul
60a429a25cd55b8c16356a60452de92228bb6c71b0Brian   bitmap = _mesa_validate_and_map_bitmap_pbo(ctx, width, height,
61a429a25cd55b8c16356a60452de92228bb6c71b0Brian                                              unpack, bitmap);
62a429a25cd55b8c16356a60452de92228bb6c71b0Brian   if (!bitmap) {
63a429a25cd55b8c16356a60452de92228bb6c71b0Brian      return NULL;
647a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul   }
65e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
66709892459922a32096fe9dd8261d0d92337bb02fKeith Whitwell   RENDER_START(swrast,ctx);
67709892459922a32096fe9dd8261d0d92337bb02fKeith Whitwell
68cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   if (SWRAST_CONTEXT(ctx)->NewState)
69cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell      _swrast_validate_derived( ctx );
70cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell
71f4b103dc993491355ec3e3640d9cb060138175c2Brian   INIT_SPAN(span, GL_BITMAP);
72f4b103dc993491355ec3e3640d9cb060138175c2Brian   span.end = width;
73f4b103dc993491355ec3e3640d9cb060138175c2Brian   span.arrayMask = SPAN_XY;
749e8a961dd7d7b717a9fb4ecdea1c1b60ea355efeBrian   _swrast_span_default_attribs(ctx, &span);
7522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
763bde211549b3a819c33793fb87f80121d0f028f2Brian Paul   for (row = 0; row < height; row++) {
7760909388ab136d849d99eab49e782a53772a618fBrian Paul      const GLubyte *src = (const GLubyte *) _mesa_image_address2d(unpack,
7860909388ab136d849d99eab49e782a53772a618fBrian Paul                 bitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, row, 0);
79e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
80e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (unpack->LsbFirst) {
81e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* Lsb first */
82e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         GLubyte mask = 1U << (unpack->SkipPixels & 0x7);
83733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         for (col = 0; col < width; col++) {
84e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (*src & mask) {
8577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul               span.array->x[count] = px + col;
8677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul               span.array->y[count] = py + row;
87733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul               count++;
88e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
89e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (mask == 128U) {
90e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               src++;
91e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               mask = 1U;
92e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
93e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else {
94e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               mask = mask << 1;
95e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
96e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
97e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
98e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* get ready for next row */
99e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         if (mask != 1)
100e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            src++;
101e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
102e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
103e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* Msb first */
104e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         GLubyte mask = 128U >> (unpack->SkipPixels & 0x7);
105733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         for (col = 0; col < width; col++) {
106e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (*src & mask) {
10777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul               span.array->x[count] = px + col;
10877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul               span.array->y[count] = py + row;
109733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul               count++;
110e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
111e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (mask == 1U) {
112e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               src++;
113e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               mask = 128U;
114e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
115e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else {
116e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               mask = mask >> 1;
117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
118e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
119e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
120e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* get ready for next row */
121e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         if (mask != 128)
122e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            src++;
123e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
124e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
125733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul      if (count + width >= MAX_WIDTH || row + 1 == height) {
126733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         /* flush the span */
12777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul         span.end = count;
128733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         if (ctx->Visual.rgbMode)
12945bc887da226403f2c41077e40ca38b6f60f1359Brian Paul            _swrast_write_rgba_span(ctx, &span);
130733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         else
13145bc887da226403f2c41077e40ca38b6f60f1359Brian Paul            _swrast_write_index_span(ctx, &span);
13277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul         span.end = 0;
133733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul         count = 0;
134733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul      }
135733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul   }
136709892459922a32096fe9dd8261d0d92337bb02fKeith Whitwell
137709892459922a32096fe9dd8261d0d92337bb02fKeith Whitwell   RENDER_FINISH(swrast,ctx);
138355467bed8cf34cf5967c7be3c5f1b87ff08f845Brian Paul
139a429a25cd55b8c16356a60452de92228bb6c71b0Brian   _mesa_unmap_bitmap_pbo(ctx, unpack);
140e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
14109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
14209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
14309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul#if 0
14409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul/*
14509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul * XXX this is another way to implement Bitmap.  Use horizontal runs of
1469b507639ab31b2d611344f061614e71d47c9a84cBrian Paul * fragments, initializing the mask array to indicate which fragments to
14709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul * draw or skip.
14809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul */
14909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paulvoid
15009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul_swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
15109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul		GLsizei width, GLsizei height,
15209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul		const struct gl_pixelstore_attrib *unpack,
15309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul		const GLubyte *bitmap )
15409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul{
15509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   SWcontext *swrast = SWRAST_CONTEXT(ctx);
15609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   GLint row, col;
157cdb27e8242215271364602995d85607cfc06d441Brian Paul   SWspan span;
15809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
15909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   ASSERT(ctx->RenderMode == GL_RENDER);
16009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   ASSERT(bitmap);
16109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
16209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   RENDER_START(swrast,ctx);
16309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
16409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   if (SWRAST_CONTEXT(ctx)->NewState)
16509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul      _swrast_validate_derived( ctx );
16609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
167f4b103dc993491355ec3e3640d9cb060138175c2Brian   INIT_SPAN(span, GL_BITMAP);
168f4b103dc993491355ec3e3640d9cb060138175c2Brian   span.end = width;
169f4b103dc993491355ec3e3640d9cb060138175c2Brian   span.arrayMask = SPAN_MASK;
1709e8a961dd7d7b717a9fb4ecdea1c1b60ea355efeBrian   _swrast_span_default_attribs(ctx, &span);
17177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul
17277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   /*span.arrayMask |= SPAN_MASK;*/  /* we'll init span.mask[] */
17377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   span.x = px;
17477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   span.y = py;
17577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   /*span.end = width;*/
17609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
17777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   for (row=0; row<height; row++, span.y++) {
17860909388ab136d849d99eab49e782a53772a618fBrian Paul      const GLubyte *src = (const GLubyte *) _mesa_image_address2d(unpack,
17960909388ab136d849d99eab49e782a53772a618fBrian Paul                 bitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, row, 0);
18009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
18109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul      if (unpack->LsbFirst) {
18209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         /* Lsb first */
18309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         GLubyte mask = 1U << (unpack->SkipPixels & 0x7);
18409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         for (col=0; col<width; col++) {
18577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul            span.array->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE;
18609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            if (mask == 128U) {
18709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               src++;
18809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               mask = 1U;
18909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            }
19009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            else {
19109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               mask = mask << 1;
19209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            }
19309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         }
19409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
19509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         if (ctx->Visual.rgbMode)
19645bc887da226403f2c41077e40ca38b6f60f1359Brian Paul            _swrast_write_rgba_span(ctx, &span);
19709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         else
19845bc887da226403f2c41077e40ca38b6f60f1359Brian Paul	    _swrast_write_index_span(ctx, &span);
19909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
20009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         /* get ready for next row */
20109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         if (mask != 1)
20209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            src++;
20309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul      }
20409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul      else {
20509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         /* Msb first */
20609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         GLubyte mask = 128U >> (unpack->SkipPixels & 0x7);
20709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         for (col=0; col<width; col++) {
20877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul            span.array->mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE;
20909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            if (mask == 1U) {
21009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               src++;
21109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               mask = 128U;
21209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            }
21309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            else {
21409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul               mask = mask >> 1;
21509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            }
21609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         }
21709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
21809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         if (ctx->Visual.rgbMode)
21945bc887da226403f2c41077e40ca38b6f60f1359Brian Paul            _swrast_write_rgba_span(ctx, &span);
22009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         else
22145bc887da226403f2c41077e40ca38b6f60f1359Brian Paul            _swrast_write_index_span(ctx, &span);
22209700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
22309700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         /* get ready for next row */
22409700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul         if (mask != 128)
22509700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul            src++;
22609700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul      }
22709700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   }
22809700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul
22909700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul   RENDER_FINISH(swrast,ctx);
23009700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul}
23109700ee358cd07634161ac7802e97ddbe6c075bfBrian Paul#endif
232