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