s_lines.c revision 233aafbb30594d0193b00705d0532be97060ebd1
1233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* $Id: s_lines.c,v 1.20 2001/08/20 16:41:47 brianp Exp $ */
2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
3e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*
4e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library
5e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Version:  3.5
622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
7b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul * Copyright (C) 1999-2001  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
27e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
28e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "glheader.h"
2946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell#include "colormac.h"
30e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "macros.h"
31e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "mmath.h"
320070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#include "s_aaline.h"
33e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_pb.h"
34cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_context.h"
35e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_depth.h"
36cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_lines.h"
37cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_feedback.h"
38e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
39e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
40e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
41e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/**********************************************************************/
42e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*****                    Rasterization                           *****/
43e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/**********************************************************************/
44e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
45e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
46e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*
47e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * There are 4 pairs (RGBA, CI) of line drawing functions:
48e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell *   1. simple:  width=1 and no special rasterization functions (fastest)
49e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell *   2. flat:  width=1, non-stippled, flat-shaded, any raster operations
50e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell *   3. smooth:  width=1, non-stippled, smooth-shaded, any raster operations
51e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell *   4. general:  any other kind of line (slowest)
52e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
53e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
54e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
55e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line */
56e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_line( GLcontext *ctx,
57a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                          const SWvertex *vert0,
58a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			  const SWvertex *vert1 )
59e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
60cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
61cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell
62cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_INDEX( PB, vert0->index );
63e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
64e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
65cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y)  PB_WRITE_PIXEL(PB, X, Y, 0, 0);
66e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
67e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
68e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
6908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
70e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
71e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
72e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
73e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
74e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line with Z interpolation/testing */
75e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_z_line( GLcontext *ctx,
76a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                            const SWvertex *vert0,
77a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			    const SWvertex *vert1 )
78e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
79cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
80cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_INDEX( PB, vert0->index );
81e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
82e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
83e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
8495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
85cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y)  PB_WRITE_PIXEL(PB, X, Y, Z, fog0);
86e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
87e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
88e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
8908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
90e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
91e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
92e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
93e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
94e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line */
95e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_line( GLcontext *ctx,
96a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                            const SWvertex *vert0,
97a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			    const SWvertex *vert1 )
98e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
998415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   const GLchan *color = vert1->color;
100cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
101cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] );
102e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
103e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
104cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y)   PB_WRITE_PIXEL(PB, X, Y, 0, 0);
105e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
106e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
107e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
10808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
109e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
110e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
111e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
112e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
113e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line with Z interpolation/testing */
114e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_z_line( GLcontext *ctx,
115a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                              const SWvertex *vert0,
116a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			      const SWvertex *vert1 )
117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
1188415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   const GLchan *color = vert1->color;
119cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
120cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] );
121e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
122e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
123e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
12495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
125cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y)   PB_WRITE_PIXEL(PB, X, Y, Z, fog0);
126e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
127e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
128e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
12908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
130e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
131e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
132e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
133e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
134e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */
135e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx,
136a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                            const SWvertex *vert0,
137a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			    const SWvertex *vert1 )
138e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
139cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
140cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
141cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
142cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
143cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLuint *pbi = PB->index;
144e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
145cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
146e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
147e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
148e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1
149e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
150e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
151e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
152e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
153e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbi[count] = I;		\
154e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;
155e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
157e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
158cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
15908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
160e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
161e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
162e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
164e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line with Z interpolation/testing */
165e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_z_line( GLcontext *ctx,
166a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                              const SWvertex *vert0,
167a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			      const SWvertex *vert1 )
168e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
169cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
170cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
171cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
172cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
173cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
174cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLuint *pbi = PB->index;
175e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
176cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
177e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
178e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
179e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
18095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
181e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1
182e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
183e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
184e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
185e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
186e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;		\
187e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbi[count] = I;		\
188e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;
189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
190e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
191e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
192cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
19308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
196e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
197e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
198e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */
199e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx,
200a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                       	      const SWvertex *vert0,
201a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul			      const SWvertex *vert1 )
202e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
203cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
204cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
205cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
206cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
207cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
208e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
209cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
210e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
211e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
212e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
213e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
214e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
215e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)			\
216e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;			\
217e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;			\
218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);	\
219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);	\
220e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);	\
221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);	\
222e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;
223e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
224e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
225e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
226cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
22708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
228e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
229e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
230e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
231e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
232e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line with Z interpolation/testing */
233e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_z_line( GLcontext *ctx,
234a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                       	        const SWvertex *vert0,
235a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				const SWvertex *vert1 )
236e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
237cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
238cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
239cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
240cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
241cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
2421b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
243cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
244e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
245e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
246cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
247e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
248e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
249e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
25095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
251e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
252e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
253e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
2540070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define PLOT(X,Y)				\
2550070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbx[count] = X;				\
2560070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pby[count] = Y;				\
2570070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbz[count] = Z;				\
258e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;			\
259e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);	\
260e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);	\
261e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);	\
262e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);	\
263e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;
264e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
265e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
266e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
267cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
26808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
269e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
270e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
271e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
2720070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define CHECK_FULL(count)		\
2730070d398d13759adc519f9bc764ffd39bc88890eBrian Paul   if (count >= PB_SIZE-MAX_WIDTH) {	\
2740070d398d13759adc519f9bc764ffd39bc88890eBrian Paul      PB->count = count;		\
27508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_flush_pb(ctx);			\
2760070d398d13759adc519f9bc764ffd39bc88890eBrian Paul      count = PB->count;		\
2770070d398d13759adc519f9bc764ffd39bc88890eBrian Paul   }
278e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
279e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
280e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
281e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */
282e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx,
283a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                           	    const SWvertex *vert0,
284a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				    const SWvertex *vert1 )
285e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
286cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
287cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
288cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
289cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
290cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
2911b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
292cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLuint *pbi = PB->index;
293e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
294cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
295e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
296e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
297e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
298e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
299e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
30095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
301e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1
302e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
303e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
304e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
305e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
306e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
307e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;		\
3080070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbfog[count] = fog0;	\
309e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbi[count] = I;		\
310e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;		\
311e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
312e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
313e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
314e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
315e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
316e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (ctx->Line.Width==2.0F) {
317e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* special case: unstippled and width=2 */
318e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
319e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
32095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
321e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1
3220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y)				\
3230070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbx[count] = X;  pbx[count+1] = X;		\
3240070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pby[count] = Y;  pby[count+1] = Y+1;		\
3250070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbz[count] = Z;  pbz[count+1] = Z;		\
326e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
3270070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbi[count] = I;  pbi[count+1] = I;		\
3280070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	count += 2;					\
329e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
3300070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y)				\
3310070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbx[count] = X;  pbx[count+1] = X+1;		\
3320070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pby[count] = Y;  pby[count+1] = Y;		\
3330070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbz[count] = Z;  pbz[count+1] = Z;		\
334e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
3350070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbi[count] = I;  pbi[count+1] = I;		\
3360070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	count += 2;					\
337e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
338e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
339e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
340e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
341e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* unstippled, any width */
342e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
343e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
34495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
345e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1
346e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
347e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
348e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
349e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
350e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;		\
351e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbi[count] = I;		\
352e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;	\
353e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;		\
354e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
355e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
356e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
357e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
358e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
359cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
36008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
361e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
362e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
363e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
364e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */
365e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx,
366a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                  const SWvertex *vert0,
367a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				  const SWvertex *vert1 )
368e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
369cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
370e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   GLint count;
371cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
372cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
373cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
3741b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
375cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_INDEX( PB, vert0->index );
376cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   count = PB->count;
377e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
378e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
379e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled, any width */
380e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
381e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
38295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
383e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
384e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
385e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
386e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
387e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
388e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;		\
3890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbfog[count] = fog0;	\
390e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;		\
391e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
392e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
393e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
394e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
395e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
396e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (ctx->Line.Width==2.0F) {
397e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* special case: unstippled and width=2 */
398e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
399e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
40095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
4010070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y)				\
4020070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbx[count] = X;  pbx[count+1] = X;		\
4030070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pby[count] = Y;  pby[count+1] = Y+1;		\
4040070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbz[count] = Z;  pbz[count+1] = Z;		\
405e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
4060070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	count += 2;					\
407e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
4080070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y)				\
4090070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbx[count] = X;  pbx[count+1] = X+1;		\
4100070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pby[count] = Y;  pby[count+1] = Y;		\
4110070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbz[count] = Z;  pbz[count+1] = Z;		\
412e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
4130070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	count += 2;					\
414e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
415e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
416e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
417e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
418e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* unstippled, any width */
419e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
420e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
42195e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
422e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
423e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)		\
424e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;		\
425e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;		\
426e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;		\
4270070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbfog[count] = fog0;	\
428e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;		\
429e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
431e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
432e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
433e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
434cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
43508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
436e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
437e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
438e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
439e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
440e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx,
441a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                      const SWvertex *vert0,
442a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				      const SWvertex *vert1 )
443e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
444cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
445cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
446cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
447cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
448cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
4491b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
450cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
451e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
452cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
453e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
454e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
455e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
456e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
457e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
45895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
459e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
460e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
461e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
462e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
463e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)				\
464e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;				\
465e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;				\
466e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;				\
4670070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbfog[count] = fog0;			\
468e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);	\
469e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);	\
470e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);	\
471e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);	\
472e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;				\
473e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
474e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
475e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
476e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
477e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
478e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (ctx->Line.Width==2.0F) {
479e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* special case: unstippled and width=2 */
480e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
481e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
48295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
483e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
484e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
485e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define XMAJOR_PLOT(X,Y)				\
486e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;  pbx[count+1] = X;		\
487e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;  pby[count+1] = Y+1;		\
488e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;  pbz[count+1] = Z;		\
489e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
490e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);		\
491e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);		\
492e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);		\
493e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);		\
494e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][RCOMP] = FixedToInt(r0);	\
495e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][GCOMP] = FixedToInt(g0);	\
496e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][BCOMP] = FixedToInt(b0);	\
497e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][ACOMP] = FixedToInt(a0);	\
498e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count += 2;					\
499e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
500e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define YMAJOR_PLOT(X,Y)				\
501e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;  pbx[count+1] = X+1;		\
502e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;  pby[count+1] = Y;		\
503e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;  pbz[count+1] = Z;		\
504e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbfog[count] = fog0;  pbfog[count+1] = fog0;	\
505e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);		\
506e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);		\
507e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);		\
508e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);		\
509e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][RCOMP] = FixedToInt(r0);	\
510e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][GCOMP] = FixedToInt(g0);	\
511e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][BCOMP] = FixedToInt(b0);	\
512e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count+1][ACOMP] = FixedToInt(a0);	\
513e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count += 2;					\
514e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
515e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
516e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
517e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
518e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* unstippled, any width */
519e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
520e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
52195e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
522e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
523e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
524e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
525e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)				\
526e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbx[count] = X;				\
527e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pby[count] = Y;				\
528e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbz[count] = Z;				\
5290070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	pbfog[count] = fog0;  			\
530e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][RCOMP] = FixedToInt(r0);	\
531e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][GCOMP] = FixedToInt(g0);	\
532e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][BCOMP] = FixedToInt(b0);	\
533e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	pbrgba[count][ACOMP] = FixedToInt(a0);	\
534e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	count++;				\
535e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	CHECK_FULL(count);
536e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
537e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
538e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
539e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
540cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
54108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
542e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
543e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
544e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
545e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx,
546a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                    const SWvertex *vert0,
547a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				    const SWvertex *vert1 )
548e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
549cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
5508415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   const GLchan *color = vert1->color;
55157b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul   GLuint count;
552cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] );
553e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
554e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
555e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
556e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
557e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
55895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
559e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
560e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
56157b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul#define PLOT(X,Y)                       \
56257b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    PB_WRITE_PIXEL(PB, X, Y, Z, fog0);  \
56357b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    count = PB->count;                  \
56457b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    CHECK_FULL(count);
565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
566e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
567e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
568e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
569e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (ctx->Line.Width==2.0F) {
570e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* special case: unstippled and width=2 */
571e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
572e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
57395e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
574cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define XMAJOR_PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \
575cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell                         PB_WRITE_PIXEL(PB, X, Y+1, Z, fog0);
576cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define YMAJOR_PLOT(X,Y)  PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \
577cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell                          PB_WRITE_PIXEL(PB, X+1, Y, Z, fog0);
578e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
579e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
580e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
581e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* unstippled, any width */
582e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
583e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
58495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
585e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
58657b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul#define PLOT(X,Y)                       \
58757b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    PB_WRITE_PIXEL(PB, X, Y, Z, fog0);  \
58857b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    count = PB->count;                  \
58957b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul    CHECK_FULL(count);
590e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
591e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
592e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
593e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
59408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
595e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
596e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
597e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
598e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */
599e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx,
600a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                const SWvertex *vert0,
601a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				const SWvertex *vert1 )
602e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
603cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
604e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   GLint count;
605cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
606cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
607cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
6081b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
609cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbs = PB->s[0];
610cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbt = PB->t[0];
611cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbu = PB->u[0];
6128415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   GLchan *color = (GLchan*) vert1->color;
613cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] );
614cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   count = PB->count;
615e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
617e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
618e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
619e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
62095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
621e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1
622e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
623e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
624e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)			\
625e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{				\
626e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;		\
627e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;		\
628e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;		\
629e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 	   pbfog[count] = fog0;		\
630e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbs[count] = fragTexcoord[0];\
631e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbt[count] = fragTexcoord[1];\
632e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbu[count] = fragTexcoord[2];\
633e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;			\
634e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);		\
635e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
636e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
637e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
638e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
639e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
640e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
641e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
64295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
643e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1
644e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
645e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)			\
646e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{				\
647e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;		\
648e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;		\
649e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;		\
650e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 	   pbfog[count] = fog0;		\
651e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbs[count] = fragTexcoord[0];\
652e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbt[count] = fragTexcoord[1];\
653e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbu[count] = fragTexcoord[2];\
654e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;			\
655e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);		\
656e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
657e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
658e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
659e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
660cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
66108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
662e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
663e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
664e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
665e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
666e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */
667e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx,
668a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                  const SWvertex *vert0,
669a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				  const SWvertex *vert1 )
670e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
671cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
672cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
673cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
674cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
675cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
6761b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
677cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbs = PB->s[0];
678cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbt = PB->t[0];
679cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLfloat *pbu = PB->u[0];
680cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
681cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell
682cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
683e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
684e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
685e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
686e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
687e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
68895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
689e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
690e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
691e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1
692e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
693e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
694e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)					\
695e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{						\
696e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;				\
697e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;				\
698e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;				\
6990070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;				\
700e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbs[count] = fragTexcoord[0];		\
701e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbt[count] = fragTexcoord[1];		\
702e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbu[count] = fragTexcoord[2];		\
703e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = FixedToInt(r0);	\
704e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = FixedToInt(g0);	\
705e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = FixedToInt(b0);	\
706e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = FixedToInt(a0);	\
707e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;					\
708e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);				\
709e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
710e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
711e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
712e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
713e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
714e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
715e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
71695e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
718e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
719e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1
720e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
721e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)					\
722e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{						\
723e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;				\
724e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;				\
725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;				\
7260070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;				\
727e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbs[count] = fragTexcoord[0];		\
728e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbt[count] = fragTexcoord[1];		\
729e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbu[count] = fragTexcoord[2];		\
730e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = FixedToInt(r0);	\
731e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = FixedToInt(g0);	\
732e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = FixedToInt(b0);	\
733e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = FixedToInt(a0);	\
734e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;					\
735e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);				\
736e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
737e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
738e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
739e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
740cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
74108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
742e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
743e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
744e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
745e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular
746e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation.
747e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
748e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx,
749a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				       const SWvertex *vert0,
750a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				       const SWvertex *vert1 )
751e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
752cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
753cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
754cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
755cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
756cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
7571b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
758cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
759cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbspec)[3] = PB->spec;
760e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
761cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
762e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
763e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
764e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
765e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
766e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
76795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
768e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
769e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1
770e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
771e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1
772e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
773e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
774e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)						\
775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{							\
776e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   GLuint u;						\
777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;					\
778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;					\
779e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;					\
7800070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;					\
781e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = FixedToInt(r0);		\
782e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = FixedToInt(g0);		\
783e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = FixedToInt(b0);		\
784e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = FixedToInt(a0);		\
785e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][RCOMP] = FixedToInt(sr0);		\
786e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][GCOMP] = FixedToInt(sg0);		\
787e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][BCOMP] = FixedToInt(sb0);		\
788e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {	\
7890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	      if (ctx->Texture.Unit[u]._ReallyEnabled) {	\
7906b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->s[u][count] = fragTexcoord[u][0];		\
7916b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->t[u][count] = fragTexcoord[u][1];		\
7926b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->u[u][count] = fragTexcoord[u][2];		\
793e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	      }							\
794e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   }							\
795e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;						\
796e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);					\
797e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
798e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
799e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
800e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
801e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
802e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
803e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
80495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
805e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1
806e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1
807e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1
809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)						\
811e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{							\
812e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   GLuint u;						\
813e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;					\
814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;					\
815e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;					\
8160070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;					\
817e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = FixedToInt(r0);		\
818e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = FixedToInt(g0);		\
819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = FixedToInt(b0);		\
820e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = FixedToInt(a0);		\
821e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][RCOMP] = FixedToInt(sr0);		\
822e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][GCOMP] = FixedToInt(sg0);		\
823e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][BCOMP] = FixedToInt(sb0);		\
824e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {	\
8250070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	      if (ctx->Texture.Unit[u]._ReallyEnabled) {	\
8266b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->s[u][count] = fragTexcoord[u][0];		\
8276b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->t[u][count] = fragTexcoord[u][1];		\
8286b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->u[u][count] = fragTexcoord[u][2];		\
829e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	      }							\
830e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   }							\
831e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;						\
832e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);					\
833e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
834e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
835e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
836e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
837cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
83808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular
843e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation.
844e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
845e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx,
846a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul                                     const SWvertex *vert0,
847a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul				     const SWvertex *vert1 )
848e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
849cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB;
850cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint count = PB->count;
851cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pbx = PB->x;
852cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLint *pby = PB->y;
853cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLdepth *pbz = PB->z;
8541b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul   GLfloat *pbfog = PB->fog;
855cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbrgba)[4] = PB->rgba;
856cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   GLchan (*pbspec)[3] = PB->spec;
8578415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   GLchan *color = (GLchan*) vert1->color;
8588415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   GLchan sRed   = vert1->specular[0];
8598415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   GLchan sGreen = vert1->specular[1];
8608415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell   GLchan sBlue  = vert1->specular[2];
861cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell
862cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->mono = GL_FALSE;
863e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
864e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->Line.StippleFlag) {
865e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* stippled */
866e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
867e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
86895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
869e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
870e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1
871e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
872e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1
873e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)						\
874e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{							\
875e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   GLuint u;						\
876e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;					\
877e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;					\
878e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;					\
8790070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;					\
880e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = color[0];			\
881e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = color[1];			\
882e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = color[2];			\
883e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = color[3];			\
884e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][RCOMP] = sRed;				\
885e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][GCOMP] = sGreen;			\
886e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][BCOMP] = sBlue;			\
887e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {	\
8880070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	      if (ctx->Texture.Unit[u]._ReallyEnabled) {	\
8896b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->s[u][count] = fragTexcoord[u][0];		\
8906b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->t[u][count] = fragTexcoord[u][1];		\
8916b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->u[u][count] = fragTexcoord[u][2];		\
892e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	      }							\
893e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   }							\
894e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;						\
895e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);					\
896e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
897e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
898e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
899e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
900e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* unstippled */
901e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1
902e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1
90395e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1
904e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1
905e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1
906e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1
907e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y)						\
908e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	{							\
909e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   GLuint u;						\
910e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbx[count] = X;					\
911e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pby[count] = Y;					\
912e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbz[count] = Z;					\
9130070d398d13759adc519f9bc764ffd39bc88890eBrian Paul 	   pbfog[count] = fog0;					\
914e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][RCOMP] = color[0];			\
915e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][GCOMP] = color[1];			\
916e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][BCOMP] = color[2];			\
917e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbrgba[count][ACOMP] = color[3];			\
918e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][RCOMP] = sRed;				\
919e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][GCOMP] = sGreen;			\
920e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   pbspec[count][BCOMP] = sBlue;			\
921e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {	\
9220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul	      if (ctx->Texture.Unit[u]._ReallyEnabled) {	\
9236b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->s[u][count] = fragTexcoord[u][0];		\
9246b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->t[u][count] = fragTexcoord[u][1];		\
9256b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul	         PB->u[u][count] = fragTexcoord[u][2];		\
926e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	      }							\
927e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   }							\
928e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   count++;						\
929e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	   CHECK_FULL(count);					\
930e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	}
931e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h"
932e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
933e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
934cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   PB->count = count;
93508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul   _mesa_flush_pb(ctx);
936e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
937e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
938e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
93922144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid _swrast_add_spec_terms_line( GLcontext *ctx,
94046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell				  const SWvertex *v0,
94146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell				  const SWvertex *v1 )
94246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{
94346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   SWvertex *ncv0 = (SWvertex *)v0;
94446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   SWvertex *ncv1 = (SWvertex *)v1;
94546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   GLchan c[2][4];
94646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   COPY_CHAN4( c[0], ncv0->color );
94746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   COPY_CHAN4( c[1], ncv1->color );
94846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   ACC_3V( ncv0->color, ncv0->specular );
94946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   ACC_3V( ncv1->color, ncv1->specular );
95046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 );
95146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   COPY_CHAN4( ncv0->color, c[0] );
95246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell   COPY_CHAN4( ncv1->color, c[1] );
95346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell}
95446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell
955e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
956e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG
957ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void
958ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx);  /* silence compiler warning */
959e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid
960e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx)
961e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
962cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   SWcontext *swrast = SWRAST_CONTEXT(ctx);
963cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell
964e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   printf("Line Func == ");
965cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   if (swrast->Line == flat_ci_line)
966e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_ci_line\n");
967cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == flat_ci_z_line)
968e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_ci_z_line\n");
969cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == flat_rgba_line)
970e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_rgba_line\n");
971cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == flat_rgba_z_line)
972e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_rgba_z_line\n");
973cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_ci_line)
974e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_ci_line\n");
975cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_ci_z_line)
976e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_ci_z_line\n");
977cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_rgba_line)
978e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_rgba_line\n");
979cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_rgba_z_line)
980e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_rgba_z_line\n");
981cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == general_smooth_ci_line)
982e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("general_smooth_ci_line\n");
983cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == general_flat_ci_line)
984e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("general_flat_ci_line\n");
985cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == general_smooth_rgba_line)
986e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("general_smooth_rgba_line\n");
987cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == general_flat_rgba_line)
988e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("general_flat_rgba_line\n");
989cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == flat_textured_line)
990e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_textured_line\n");
991cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_textured_line)
992e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_textured_line\n");
993cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == smooth_multitextured_line)
994e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("smooth_multitextured_line\n");
995cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   else if (swrast->Line == flat_multitextured_line)
996e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      printf("flat_multitextured_line\n");
997e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else
998cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell      printf("Driver func %p\n", swrast->Line);
999e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
1000e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif
1001e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
1002e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
1003e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
1004233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#ifdef DEBUG
1005233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1006233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* record the current line function name */
1007233aafbb30594d0193b00705d0532be97060ebd1Brian Paulstatic const char *lineFuncName = NULL;
1008233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1009233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc)                   \
1010233aafbb30594d0193b00705d0532be97060ebd1Brian Pauldo {                                    \
1011233aafbb30594d0193b00705d0532be97060ebd1Brian Paul    lineFuncName = #lineFunc;           \
1012233aafbb30594d0193b00705d0532be97060ebd1Brian Paul    /*printf("%s\n", lineFuncName);*/   \
1013233aafbb30594d0193b00705d0532be97060ebd1Brian Paul    swrast->Line = lineFunc;            \
1014233aafbb30594d0193b00705d0532be97060ebd1Brian Paul} while (0)
1015233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1016233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#else
1017233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1018233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc)  swrast->Line = lineFunc;
1019233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1020233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#endif
1021233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1022233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1023233aafbb30594d0193b00705d0532be97060ebd1Brian Paul
1024e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/*
1025e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current
1026e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context.
1027e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell *
1028e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove
1029e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code.
1030e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */
1031e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid
1032cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx )
1033e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{
1034cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell   SWcontext *swrast = SWRAST_CONTEXT(ctx);
1035b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul   const GLboolean rgbmode = ctx->Visual.rgbMode;
1036e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
1037e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   if (ctx->RenderMode==GL_RENDER) {
1038e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      if (ctx->Line.SmoothFlag) {
1039e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         /* antialiased lines */
10400070d398d13759adc519f9bc764ffd39bc88890eBrian Paul         _swrast_choose_aa_line_function(ctx);
10410070d398d13759adc519f9bc764ffd39bc88890eBrian Paul         ASSERT(swrast->Triangle);
1042e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
1043cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell      else if (ctx->Texture._ReallyEnabled) {
104489dae684aa1d74b06a4f70cb76b33671d0cef9e6Keith Whitwell         if (ctx->Texture._ReallyEnabled > TEXTURE0_ANY ||
1045ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul	     (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) {
1046e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            /* multi-texture and/or separate specular color */
1047e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (ctx->Light.ShadeModel==GL_SMOOTH)
1048233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(smooth_multitextured_line);
1049e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else
1050233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(flat_multitextured_line);
1051e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
1052e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         else {
1053e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (ctx->Light.ShadeModel==GL_SMOOTH) {
1054233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                USE(smooth_textured_line);
1055e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1056e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else {
1057233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                USE(flat_textured_line);
1058e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1059e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
1060e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
10610070d398d13759adc519f9bc764ffd39bc88890eBrian Paul      else if (ctx->Line.Width!=1.0 || ctx->Line.StippleFlag) {
1062e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         if (ctx->Light.ShadeModel==GL_SMOOTH) {
1063e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (rgbmode)
1064233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(general_smooth_rgba_line);
1065e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else
1066233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(general_smooth_ci_line);
1067e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
1068e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         else {
1069e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (rgbmode)
1070233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(general_flat_rgba_line);
1071e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else
1072233aafbb30594d0193b00705d0532be97060ebd1Brian Paul               USE(general_flat_ci_line);
1073e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
1074e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
1075e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      else {
1076e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	 if (ctx->Light.ShadeModel==GL_SMOOTH) {
1077e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	    /* Width==1, non-stippled, smooth-shaded */
1078e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (ctx->Depth.Test || ctx->Fog.Enabled) {
1079e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               if (rgbmode)
1080233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(smooth_rgba_z_line);
1081e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               else
1082233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(smooth_ci_z_line);
1083e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1084e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else {
1085e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               if (rgbmode)
1086233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(smooth_rgba_line);
1087e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               else
1088233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(smooth_ci_line);
1089e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1090e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	 }
1091e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         else {
1092e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell	    /* Width==1, non-stippled, flat-shaded */
1093e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            if (ctx->Depth.Test || ctx->Fog.Enabled) {
1094e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               if (rgbmode)
1095233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(flat_rgba_z_line);
1096e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               else
1097233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(flat_ci_z_line);
1098e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1099e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            else {
1100e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               if (rgbmode)
1101233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(flat_rgba_line);
1102e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell               else
1103233aafbb30594d0193b00705d0532be97060ebd1Brian Paul                  USE(flat_ci_line);
1104e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell            }
1105e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell         }
1106e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      }
1107e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
1108e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else if (ctx->RenderMode==GL_FEEDBACK) {
1109233aafbb30594d0193b00705d0532be97060ebd1Brian Paul      USE(_mesa_feedback_line);
1110e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
1111e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   else {
1112e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell      /* GL_SELECT mode */
1113233aafbb30594d0193b00705d0532be97060ebd1Brian Paul      USE(_mesa_select_line);
1114e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   }
1115e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell
1116e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell   /*_mesa_print_line_function(ctx);*/
1117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell}
1118