s_alpha.c revision fc80ad6e62fb2b53d53756593099330477a44c52
1fc80ad6e62fb2b53d53756593099330477a44c52Brian Paul/* $Id: s_alpha.c,v 1.12 2002/10/04 19:10:12 brianp Exp $ */
2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
3e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*
4e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library
52ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul * Version:  4.1
622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
72ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
9e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
10e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * copy of this software and associated documentation files (the "Software"),
11e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * to deal in the Software without restriction, including without limitation
12e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * and/or sell copies of the Software, and to permit persons to whom the
14e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Software is furnished to do so, subject to the following conditions:
1522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
16e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * The above copyright notice and this permission notice shall be included
17e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * in all copies or substantial portions of the Software.
1822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
19e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
26e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
27bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul/**
28bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul * \file swrast/s_alpha.c
29bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul * \brief Functions to apply alpha test.
30bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul */
31e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
32e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "glheader.h"
33e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "context.h"
34e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "colormac.h"
35e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "macros.h"
36e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "mmath.h"
37e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
38e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_alpha.h"
39ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul#include "s_context.h"
40e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
41e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
42bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul/**
43bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul * \fn GLint _mesa_alpha_test( const GLcontext *ctx, struct sw_span *span )
44bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul * \brief Apply the alpha test to a span of pixels.
45bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul * \return
46bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul *      - "0" = all pixels in the span failed the alpha test.
47bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul *      - "1" = one or more pixels passed the alpha test.
482ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul */
492ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian PaulGLint
50ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul_mesa_alpha_test( const GLcontext *ctx, struct sw_span *span )
512ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul{
5277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   const GLchan (*rgba)[4] = (const GLchan (*)[4]) span->array->rgba;
53fc80ad6e62fb2b53d53756593099330477a44c52Brian Paul   GLchan ref;
54ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul   const GLuint n = span->end;
5577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul   GLubyte *mask = span->array->mask;
56ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul   GLuint i;
572ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul
58fc80ad6e62fb2b53d53756593099330477a44c52Brian Paul   CLAMPED_FLOAT_TO_CHAN(ref, ctx->Color.AlphaRef);
59fc80ad6e62fb2b53d53756593099330477a44c52Brian Paul
60ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul   if (span->arrayMask & SPAN_RGBA) {
61ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      /* Use the array values */
62ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      switch (ctx->Color.AlphaFunc) {
63ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LESS:
64ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
65ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] < ref);
66ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
67ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LEQUAL:
68ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
69ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] <= ref);
70ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
71ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GEQUAL:
72ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
73ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] >= ref);
74ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
75ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GREATER:
76ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
77ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] > ref);
78ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
79ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NOTEQUAL:
80ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
81ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] != ref);
82ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
83ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_EQUAL:
84ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++)
85ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (rgba[i][ACOMP] == ref);
86ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
87ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_ALWAYS:
88ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* do nothing */
89ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 1;
90ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NEVER:
91ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* caller should check for zero! */
92ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            span->writeAll = GL_FALSE;
93ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
94ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         default:
95ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            _mesa_problem( ctx, "Invalid alpha test in _mesa_alpha_test" );
96ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
97ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      }
98ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul   }
99ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul   else {
100ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      /* Use the interpolation values */
101ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul#if CHAN_TYPE == GL_FLOAT
102ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      const GLfloat alphaStep = span->alphaStep;
103ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      GLfloat alpha = span->alpha;
104ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      ASSERT(span->interpMask & SPAN_RGBA);
105ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      switch (ctx->Color.AlphaFunc) {
106ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LESS:
107ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
108ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha < ref);
109ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
110ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
111ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
112ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LEQUAL:
113ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
114ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha <= ref);
115ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
116ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
117ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
118ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GEQUAL:
119ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
120ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha >= ref);
121ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
122ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
123ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
124ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GREATER:
125ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
126ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha > ref);
127ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
128ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
129ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
130ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NOTEQUAL:
131ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
132ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha != ref);
133ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
134ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
135ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
136ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_EQUAL:
137ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
138ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (alpha == ref);
139ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
140ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
141ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
142ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_ALWAYS:
143ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* do nothing */
144ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 1;
145ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NEVER:
146ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* caller should check for zero! */
147ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            span->writeAll = GL_FALSE;
148ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
149ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         default:
150ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            _mesa_problem( ctx, "Invalid alpha test in gl_alpha_test" );
151ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
152ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      }
153ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul#else
154ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      /* 8 or 16-bit channel interpolation */
155ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      const GLfixed alphaStep = span->alphaStep;
156ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      GLfixed alpha = span->alpha;
157ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      ASSERT(span->interpMask & SPAN_RGBA);
158ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      switch (ctx->Color.AlphaFunc) {
159ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LESS:
160ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
161ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) < ref);
162ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
163ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
164ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
165ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_LEQUAL:
166ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
167ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) <= ref);
168ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
169ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
170ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
171ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GEQUAL:
172ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
173ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) >= ref);
174ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
175ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
176ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
177ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_GREATER:
178ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
179ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) > ref);
180ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
181ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
182ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
183ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NOTEQUAL:
184ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
185ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) != ref);
186ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
187ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
188ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
189ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_EQUAL:
190ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            for (i = 0; i < n; i++) {
191ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               mask[i] &= (FixedToChan(alpha) == ref);
192ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul               alpha += alphaStep;
193ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            }
194ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            break;
195ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_ALWAYS:
196ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* do nothing */
197ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 1;
198ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         case GL_NEVER:
199ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            /* caller should check for zero! */
200ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            span->writeAll = GL_FALSE;
201ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
202ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul         default:
203ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            _mesa_problem( ctx, "Invalid alpha test in gl_alpha_test" );
204ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul            return 0;
205ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul      }
206ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul#endif /* CHAN_TYPE */
2072ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   }
2082ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul
2092a182a98973edc9ecf2936b1288485bb2b3fa722Brian Paul#if 0
2102a182a98973edc9ecf2936b1288485bb2b3fa722Brian Paul   /* XXXX This causes conformance failures!!!! */
2112ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   while ((span->start <= span->end)  &&
212ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul          (mask[span->start] == 0))
2132ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul     span->start ++;
2142ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul
2152ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   while ((span->end >= span->start)  &&
216ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul          (mask[span->end] == 0))
2172ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul     span->end --;
2182a182a98973edc9ecf2936b1288485bb2b3fa722Brian Paul#endif
219ceb39f4f8dc4863fde17d668c752533a2184476eBrian Paul
2202ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   span->writeAll = GL_FALSE;
221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
2222ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   if (span->start >= span->end)
2232ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul     return 0;
2242ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul   else
2252ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul     return 1;
2262ef866d1fc0a5cc5ef8543d65744dfd4da4dbbafBrian Paul}
227