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