1e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library 3f515c78a2320369ead087c4e0efd583f17b4b78bBrian Paul * Version: 6.5.2 422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 5f515c78a2320369ead087c4e0efd583f17b4b78bBrian Paul * Copyright (C) 1999-2006 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 25e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 26bbd287103dad776d8a45c87c4e51fbc26d9b80d5Brian Paul#include "main/glheader.h" 27bbd287103dad776d8a45c87c4e51fbc26d9b80d5Brian Paul#include "main/context.h" 28bbd287103dad776d8a45c87c4e51fbc26d9b80d5Brian Paul#include "main/imports.h" 29bbd287103dad776d8a45c87c4e51fbc26d9b80d5Brian Paul#include "main/macros.h" 30e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 31cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_context.h" 32e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_logic.h" 33e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_span.h" 34e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 35e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 36a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul/** 37a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul * We do all logic ops on 4-byte GLuints. 38a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul * Depending on bytes per pixel, the mask array elements correspond to 39a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul * 1, 2 or 4 GLuints. 40a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul */ 41a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul#define LOGIC_OP_LOOP(MODE, MASKSTRIDE) \ 42e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Pauldo { \ 43e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint i; \ 44e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul switch (MODE) { \ 45e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_CLEAR: \ 46e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 47a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 48e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = 0; \ 49e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 50e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 51e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 52e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_SET: \ 53e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 54a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 55e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~0; \ 56e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 57e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 58e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 59e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_COPY: \ 60e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul /* do nothing */ \ 61e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 62e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_COPY_INVERTED: \ 63e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 64a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 65e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~src[i]; \ 66e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 67e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 68e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 69e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_NOOP: \ 70e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 71a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 72e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = dest[i]; \ 73e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 74e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 75e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 76e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_INVERT: \ 77e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 78a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 79e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~dest[i]; \ 80e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 81e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 82e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 83e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_AND: \ 84e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 85a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 86e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] &= dest[i]; \ 87e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 88e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 89e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 90e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_NAND: \ 91e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 92a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 93e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~(src[i] & dest[i]); \ 94e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 95e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 96e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 97e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_OR: \ 98e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 99a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 100e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] |= dest[i]; \ 101e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 102e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 103e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 104e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_NOR: \ 105e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 106a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 107e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~(src[i] | dest[i]); \ 108e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 109e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 110e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 111e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_XOR: \ 112e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 113a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 114e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] ^= dest[i]; \ 115e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 116e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 117e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 118e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_EQUIV: \ 119e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 120a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 121e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~(src[i] ^ dest[i]); \ 122e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 123e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 124e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 125e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_AND_REVERSE: \ 126e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 127a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 128e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = src[i] & ~dest[i]; \ 129e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 130e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 131e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 132e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_AND_INVERTED: \ 133e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 134a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 135e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~src[i] & dest[i]; \ 136e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 137e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 138e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 139e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_OR_REVERSE: \ 140e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 141a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 142e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = src[i] | ~dest[i]; \ 143e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 144e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 145e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 146e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul case GL_OR_INVERTED: \ 147e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul for (i = 0; i < n; i++) { \ 148a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (mask[i / MASKSTRIDE]) { \ 149e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul src[i] = ~src[i] | dest[i]; \ 150e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 151e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 152e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul break; \ 153e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul default: \ 154e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul _mesa_problem(ctx, "bad logicop mode");\ 155e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul } \ 156e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul} while (0) 157e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 158e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 159e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1609520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void 161f9995b30756140724f41daf963fa06167912be7fKristian Høgsberglogicop_uint1(struct gl_context *ctx, GLuint n, GLuint src[], const GLuint dest[], 162e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul const GLubyte mask[]) 163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 164a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul LOGIC_OP_LOOP(ctx->Color.LogicOp, 1); 165e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul} 166e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 167e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 1689520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void 169f9995b30756140724f41daf963fa06167912be7fKristian Høgsberglogicop_uint2(struct gl_context *ctx, GLuint n, GLuint src[], const GLuint dest[], 170a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul const GLubyte mask[]) 171e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul{ 172a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul LOGIC_OP_LOOP(ctx->Color.LogicOp, 2); 173e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul} 174e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 175e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 1769520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void 177f9995b30756140724f41daf963fa06167912be7fKristian Høgsberglogicop_uint4(struct gl_context *ctx, GLuint n, GLuint src[], const GLuint dest[], 178a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul const GLubyte mask[]) 179e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul{ 180a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul LOGIC_OP_LOOP(ctx->Color.LogicOp, 4); 181e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 182e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 183e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 184e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 185e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul/** 186e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Apply the current logic operator to a span of RGBA pixels. 187733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul * We can handle horizontal runs of pixels (spans) or arrays of x/y 188733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul * pixel coordinates. 189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 190e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 191f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_swrast_logicop_rgba_span(struct gl_context *ctx, struct gl_renderbuffer *rb, 192cdb27e8242215271364602995d85607cfc06d441Brian Paul SWspan *span) 193e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 194a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul void *rbPixels; 195733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul 19647d88ef204b42a9220c6be3e98c92df9c9aa0860Brian Paul ASSERT(span->end < SWRAST_MAX_WIDTH); 197733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul ASSERT(span->arrayMask & SPAN_RGBA); 198733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul 199a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul rbPixels = _swrast_get_dest_rgba(ctx, rb, span); 200a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul 201a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul if (span->array->ChanType == GL_UNSIGNED_BYTE) { 202a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul /* treat 4*GLubyte as GLuint */ 203a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul logicop_uint1(ctx, span->end, 2049e8a961dd7d7b717a9fb4ecdea1c1b60ea355efeBrian (GLuint *) span->array->rgba8, 205a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul (const GLuint *) rbPixels, span->array->mask); 206a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul } 207a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul else if (span->array->ChanType == GL_UNSIGNED_SHORT) { 208a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul /* treat 2*GLushort as GLuint */ 209a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul logicop_uint2(ctx, 2 * span->end, 2109e8a961dd7d7b717a9fb4ecdea1c1b60ea355efeBrian (GLuint *) span->array->rgba16, 211a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul (const GLuint *) rbPixels, span->array->mask); 212733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul } 213733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul else { 214a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul logicop_uint4(ctx, 4 * span->end, 215f3e507ef9f75dbfc58ccd07b5fe8cfca10d9a9e3Brian (GLuint *) span->array->attribs[FRAG_ATTRIB_COL0], 216a50b7dbc3ba1db8c92b4bbb4f7f06de8d6c039c4Brian Paul (const GLuint *) rbPixels, span->array->mask); 217733a4b602bbbfda83ee03b7ae4f3737bbe659034Brian Paul } 218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 219