1/**
2 * \file api_loopback.c
3 *
4 * \author Keith Whitwell <keithw@vmware.com>
5 */
6
7/*
8 * Mesa 3-D graphics library
9 *
10 * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
18 *
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
26 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
27 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28 * OTHER DEALINGS IN THE SOFTWARE.
29 */
30
31
32#include "glheader.h"
33#include "macros.h"
34#include "api_loopback.h"
35#include "mtypes.h"
36#include "glapi/glapi.h"
37#include "main/dispatch.h"
38#include "main/context.h"
39
40/* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
41 * calls to a smaller set of driver-provided formats.  Currently just
42 * go back to dispatch to find these (eg. call glNormal3f directly),
43 * hence 'loopback'.
44 *
45 * The driver must supply all of the remaining entry points, which are
46 * listed in dd.h.  The easiest way for a driver to do this is to
47 * install the supplied software t&l module.
48 */
49#define COLORF(r,g,b,a)             CALL_Color4f(GET_DISPATCH(), (r,g,b,a))
50#define VERTEX2(x,y)	            CALL_Vertex2f(GET_DISPATCH(), (x,y))
51#define VERTEX3(x,y,z)	            CALL_Vertex3f(GET_DISPATCH(), (x,y,z))
52#define VERTEX4(x,y,z,w)            CALL_Vertex4f(GET_DISPATCH(), (x,y,z,w))
53#define NORMAL(x,y,z)               CALL_Normal3f(GET_DISPATCH(), (x,y,z))
54#define TEXCOORD1(s)                CALL_TexCoord1f(GET_DISPATCH(), (s))
55#define TEXCOORD2(s,t)              CALL_TexCoord2f(GET_DISPATCH(), (s,t))
56#define TEXCOORD3(s,t,u)            CALL_TexCoord3f(GET_DISPATCH(), (s,t,u))
57#define TEXCOORD4(s,t,u,v)          CALL_TexCoord4f(GET_DISPATCH(), (s,t,u,v))
58#define INDEX(c)		    CALL_Indexf(GET_DISPATCH(), (c))
59#define MULTI_TEXCOORD1(z,s)	    CALL_MultiTexCoord1fARB(GET_DISPATCH(), (z,s))
60#define MULTI_TEXCOORD2(z,s,t)	    CALL_MultiTexCoord2fARB(GET_DISPATCH(), (z,s,t))
61#define MULTI_TEXCOORD3(z,s,t,u)    CALL_MultiTexCoord3fARB(GET_DISPATCH(), (z,s,t,u))
62#define MULTI_TEXCOORD4(z,s,t,u,v)  CALL_MultiTexCoord4fARB(GET_DISPATCH(), (z,s,t,u,v))
63#define EVALCOORD1(x)               CALL_EvalCoord1f(GET_DISPATCH(), (x))
64#define EVALCOORD2(x,y)             CALL_EvalCoord2f(GET_DISPATCH(), (x,y))
65#define MATERIALFV(a,b,c)           CALL_Materialfv(GET_DISPATCH(), (a,b,c))
66#define RECTF(a,b,c,d)              CALL_Rectf(GET_DISPATCH(), (a,b,c,d))
67
68#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x))
69#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c))
70
71#define ATTRIB1NV(index,x)          CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x))
72#define ATTRIB2NV(index,x,y)        CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y))
73#define ATTRIB3NV(index,x,y,z)      CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z))
74#define ATTRIB4NV(index,x,y,z,w)    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w))
75
76#define ATTRIB1ARB(index,x)         CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x))
77#define ATTRIB2ARB(index,x,y)       CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y))
78#define ATTRIB3ARB(index,x,y,z)     CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z))
79#define ATTRIB4ARB(index,x,y,z,w)   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w))
80
81#define ATTRIBI_1I(index,x)   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index,x))
82#define ATTRIBI_1UI(index,x)   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index,x))
83#define ATTRIBI_4I(index,x,y,z,w)   CALL_VertexAttribI4iEXT(GET_DISPATCH(), (index,x,y,z,w))
84
85#define ATTRIBI_4UI(index,x,y,z,w)   CALL_VertexAttribI4uiEXT(GET_DISPATCH(), (index,x,y,z,w))
86
87#define ATTRIB1_D(index,x)         CALL_VertexAttribL1d(GET_DISPATCH(), (index,x))
88#define ATTRIB2_D(index,x,y)       CALL_VertexAttribL2d(GET_DISPATCH(), (index,x,y))
89#define ATTRIB3_D(index,x,y,z)     CALL_VertexAttribL3d(GET_DISPATCH(), (index,x,y,z))
90#define ATTRIB4_D(index,x,y,z,w)    CALL_VertexAttribL4d(GET_DISPATCH(), (index,x,y,z,w))
91
92#define ATTRIB1_UI64(index, x)     CALL_VertexAttribL1ui64ARB(GET_DISPATCH(), (index, x))
93
94void GLAPIENTRY
95_mesa_Color3b( GLbyte red, GLbyte green, GLbyte blue )
96{
97   COLORF( BYTE_TO_FLOAT(red),
98	   BYTE_TO_FLOAT(green),
99	   BYTE_TO_FLOAT(blue),
100	   1.0 );
101}
102
103void GLAPIENTRY
104_mesa_Color3d( GLdouble red, GLdouble green, GLdouble blue )
105{
106   COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, 1.0 );
107}
108
109void GLAPIENTRY
110_mesa_Color3i( GLint red, GLint green, GLint blue )
111{
112   COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
113	   INT_TO_FLOAT(blue), 1.0);
114}
115
116void GLAPIENTRY
117_mesa_Color3s( GLshort red, GLshort green, GLshort blue )
118{
119   COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
120	   SHORT_TO_FLOAT(blue), 1.0);
121}
122
123void GLAPIENTRY
124_mesa_Color3ui( GLuint red, GLuint green, GLuint blue )
125{
126   COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
127	   UINT_TO_FLOAT(blue), 1.0 );
128}
129
130void GLAPIENTRY
131_mesa_Color3us( GLushort red, GLushort green, GLushort blue )
132{
133   COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
134	   USHORT_TO_FLOAT(blue), 1.0 );
135}
136
137void GLAPIENTRY
138_mesa_Color3ub( GLubyte red, GLubyte green, GLubyte blue )
139{
140   COLORF( UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green),
141	   UBYTE_TO_FLOAT(blue), 1.0 );
142}
143
144
145void GLAPIENTRY
146_mesa_Color3bv( const GLbyte *v )
147{
148   COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
149	   BYTE_TO_FLOAT(v[2]), 1.0 );
150}
151
152void GLAPIENTRY
153_mesa_Color3dv( const GLdouble *v )
154{
155   COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0 );
156}
157
158void GLAPIENTRY
159_mesa_Color3iv( const GLint *v )
160{
161   COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
162	   INT_TO_FLOAT(v[2]), 1.0 );
163}
164
165void GLAPIENTRY
166_mesa_Color3sv( const GLshort *v )
167{
168   COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
169	   SHORT_TO_FLOAT(v[2]), 1.0 );
170}
171
172void GLAPIENTRY
173_mesa_Color3uiv( const GLuint *v )
174{
175   COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
176	   UINT_TO_FLOAT(v[2]), 1.0 );
177}
178
179void GLAPIENTRY
180_mesa_Color3usv( const GLushort *v )
181{
182   COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
183	   USHORT_TO_FLOAT(v[2]), 1.0 );
184}
185
186void GLAPIENTRY
187_mesa_Color3ubv( const GLubyte *v )
188{
189   COLORF( UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
190	   UBYTE_TO_FLOAT(v[2]), 1.0 );
191}
192
193
194void GLAPIENTRY
195_mesa_Color4b( GLbyte red, GLbyte green, GLbyte blue,
196			      GLbyte alpha )
197{
198   COLORF( BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green),
199	   BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha) );
200}
201
202void GLAPIENTRY
203_mesa_Color4d( GLdouble red, GLdouble green, GLdouble blue,
204			      GLdouble alpha )
205{
206   COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, (GLfloat) alpha );
207}
208
209void GLAPIENTRY
210_mesa_Color4i( GLint red, GLint green, GLint blue, GLint alpha )
211{
212   COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
213	   INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha) );
214}
215
216void GLAPIENTRY
217_mesa_Color4s( GLshort red, GLshort green, GLshort blue,
218			      GLshort alpha )
219{
220   COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
221	   SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha) );
222}
223
224void GLAPIENTRY
225_mesa_Color4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha )
226{
227   COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
228	   UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha) );
229}
230
231void GLAPIENTRY
232_mesa_Color4us( GLushort red, GLushort green, GLushort blue, GLushort alpha )
233{
234   COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
235	   USHORT_TO_FLOAT(blue), USHORT_TO_FLOAT(alpha) );
236}
237
238void GLAPIENTRY
239_mesa_Color4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
240{
241   COLORF( UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green),
242	   UBYTE_TO_FLOAT(blue), UBYTE_TO_FLOAT(alpha) );
243}
244
245
246void GLAPIENTRY
247_mesa_Color4iv( const GLint *v )
248{
249   COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
250	   INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) );
251}
252
253
254void GLAPIENTRY
255_mesa_Color4bv( const GLbyte *v )
256{
257   COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
258	   BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]) );
259}
260
261void GLAPIENTRY
262_mesa_Color4dv( const GLdouble *v )
263{
264   COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3] );
265}
266
267
268void GLAPIENTRY
269_mesa_Color4sv( const GLshort *v)
270{
271   COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
272	   SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]) );
273}
274
275
276void GLAPIENTRY
277_mesa_Color4uiv( const GLuint *v)
278{
279   COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
280	   UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]) );
281}
282
283void GLAPIENTRY
284_mesa_Color4usv( const GLushort *v)
285{
286   COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
287	   USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]) );
288}
289
290void GLAPIENTRY
291_mesa_Color4ubv( const GLubyte *v)
292{
293   COLORF( UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
294	   UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]) );
295}
296
297
298void GLAPIENTRY
299_mesa_FogCoordd( GLdouble d )
300{
301   FOGCOORDF( (GLfloat) d );
302}
303
304void GLAPIENTRY
305_mesa_FogCoorddv( const GLdouble *v )
306{
307   FOGCOORDF( (GLfloat) *v );
308}
309
310
311void GLAPIENTRY
312_mesa_Indexd( GLdouble c )
313{
314   INDEX( (GLfloat) c );
315}
316
317void GLAPIENTRY
318_mesa_Indexi( GLint c )
319{
320   INDEX( (GLfloat) c );
321}
322
323void GLAPIENTRY
324_mesa_Indexs( GLshort c )
325{
326   INDEX( (GLfloat) c );
327}
328
329void GLAPIENTRY
330_mesa_Indexub( GLubyte c )
331{
332   INDEX( (GLfloat) c );
333}
334
335void GLAPIENTRY
336_mesa_Indexdv( const GLdouble *c )
337{
338   INDEX( (GLfloat) *c );
339}
340
341void GLAPIENTRY
342_mesa_Indexiv( const GLint *c )
343{
344   INDEX( (GLfloat) *c );
345}
346
347void GLAPIENTRY
348_mesa_Indexsv( const GLshort *c )
349{
350   INDEX( (GLfloat) *c );
351}
352
353void GLAPIENTRY
354_mesa_Indexubv( const GLubyte *c )
355{
356   INDEX( (GLfloat) *c );
357}
358
359
360void GLAPIENTRY
361_mesa_EdgeFlagv(const GLboolean *flag)
362{
363   CALL_EdgeFlag(GET_DISPATCH(), (*flag));
364}
365
366
367void GLAPIENTRY
368_mesa_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz )
369{
370   NORMAL( BYTE_TO_FLOAT(nx), BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) );
371}
372
373void GLAPIENTRY
374_mesa_Normal3d( GLdouble nx, GLdouble ny, GLdouble nz )
375{
376   NORMAL((GLfloat) nx, (GLfloat) ny, (GLfloat) nz);
377}
378
379void GLAPIENTRY
380_mesa_Normal3i( GLint nx, GLint ny, GLint nz )
381{
382   NORMAL( INT_TO_FLOAT(nx), INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) );
383}
384
385void GLAPIENTRY
386_mesa_Normal3s( GLshort nx, GLshort ny, GLshort nz )
387{
388   NORMAL( SHORT_TO_FLOAT(nx), SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) );
389}
390
391void GLAPIENTRY
392_mesa_Normal3bv( const GLbyte *v )
393{
394   NORMAL( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) );
395}
396
397void GLAPIENTRY
398_mesa_Normal3dv( const GLdouble *v )
399{
400   NORMAL( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
401}
402
403void GLAPIENTRY
404_mesa_Normal3iv( const GLint *v )
405{
406   NORMAL( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) );
407}
408
409void GLAPIENTRY
410_mesa_Normal3sv( const GLshort *v )
411{
412   NORMAL( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) );
413}
414
415void GLAPIENTRY
416_mesa_TexCoord1d( GLdouble s )
417{
418   TEXCOORD1((GLfloat) s);
419}
420
421void GLAPIENTRY
422_mesa_TexCoord1i( GLint s )
423{
424   TEXCOORD1((GLfloat) s);
425}
426
427void GLAPIENTRY
428_mesa_TexCoord1s( GLshort s )
429{
430   TEXCOORD1((GLfloat) s);
431}
432
433void GLAPIENTRY
434_mesa_TexCoord2d( GLdouble s, GLdouble t )
435{
436   TEXCOORD2((GLfloat) s,(GLfloat) t);
437}
438
439void GLAPIENTRY
440_mesa_TexCoord2s( GLshort s, GLshort t )
441{
442   TEXCOORD2((GLfloat) s,(GLfloat) t);
443}
444
445void GLAPIENTRY
446_mesa_TexCoord2i( GLint s, GLint t )
447{
448   TEXCOORD2((GLfloat) s,(GLfloat) t);
449}
450
451void GLAPIENTRY
452_mesa_TexCoord3d( GLdouble s, GLdouble t, GLdouble r )
453{
454   TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
455}
456
457void GLAPIENTRY
458_mesa_TexCoord3i( GLint s, GLint t, GLint r )
459{
460   TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
461}
462
463void GLAPIENTRY
464_mesa_TexCoord3s( GLshort s, GLshort t, GLshort r )
465{
466   TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
467}
468
469void GLAPIENTRY
470_mesa_TexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
471{
472   TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
473}
474
475void GLAPIENTRY
476_mesa_TexCoord4i( GLint s, GLint t, GLint r, GLint q )
477{
478   TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
479}
480
481void GLAPIENTRY
482_mesa_TexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
483{
484   TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
485}
486
487void GLAPIENTRY
488_mesa_TexCoord1dv( const GLdouble *v )
489{
490   TEXCOORD1((GLfloat) v[0]);
491}
492
493void GLAPIENTRY
494_mesa_TexCoord1iv( const GLint *v )
495{
496   TEXCOORD1((GLfloat) v[0]);
497}
498
499void GLAPIENTRY
500_mesa_TexCoord1sv( const GLshort *v )
501{
502   TEXCOORD1((GLfloat) v[0]);
503}
504
505void GLAPIENTRY
506_mesa_TexCoord2dv( const GLdouble *v )
507{
508   TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
509}
510
511void GLAPIENTRY
512_mesa_TexCoord2iv( const GLint *v )
513{
514   TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
515}
516
517void GLAPIENTRY
518_mesa_TexCoord2sv( const GLshort *v )
519{
520   TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
521}
522
523void GLAPIENTRY
524_mesa_TexCoord3dv( const GLdouble *v )
525{
526   TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
527}
528
529void GLAPIENTRY
530_mesa_TexCoord3iv( const GLint *v )
531{
532   TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
533}
534
535void GLAPIENTRY
536_mesa_TexCoord3sv( const GLshort *v )
537{
538   TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
539}
540
541void GLAPIENTRY
542_mesa_TexCoord4dv( const GLdouble *v )
543{
544   TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
545}
546
547void GLAPIENTRY
548_mesa_TexCoord4iv( const GLint *v )
549{
550   TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
551}
552
553void GLAPIENTRY
554_mesa_TexCoord4sv( const GLshort *v )
555{
556   TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
557}
558
559void GLAPIENTRY
560_mesa_Vertex2d( GLdouble x, GLdouble y )
561{
562   VERTEX2( (GLfloat) x, (GLfloat) y );
563}
564
565void GLAPIENTRY
566_mesa_Vertex2i( GLint x, GLint y )
567{
568   VERTEX2( (GLfloat) x, (GLfloat) y );
569}
570
571void GLAPIENTRY
572_mesa_Vertex2s( GLshort x, GLshort y )
573{
574   VERTEX2( (GLfloat) x, (GLfloat) y );
575}
576
577void GLAPIENTRY
578_mesa_Vertex3d( GLdouble x, GLdouble y, GLdouble z )
579{
580   VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
581}
582
583void GLAPIENTRY
584_mesa_Vertex3i( GLint x, GLint y, GLint z )
585{
586   VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
587}
588
589void GLAPIENTRY
590_mesa_Vertex3s( GLshort x, GLshort y, GLshort z )
591{
592   VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
593}
594
595void GLAPIENTRY
596_mesa_Vertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
597{
598   VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
599}
600
601void GLAPIENTRY
602_mesa_Vertex4i( GLint x, GLint y, GLint z, GLint w )
603{
604   VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
605}
606
607void GLAPIENTRY
608_mesa_Vertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
609{
610   VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
611}
612
613void GLAPIENTRY
614_mesa_Vertex2dv( const GLdouble *v )
615{
616   VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
617}
618
619void GLAPIENTRY
620_mesa_Vertex2iv( const GLint *v )
621{
622   VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
623}
624
625void GLAPIENTRY
626_mesa_Vertex2sv( const GLshort *v )
627{
628   VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
629}
630
631void GLAPIENTRY
632_mesa_Vertex3dv( const GLdouble *v )
633{
634   if (v[2] == 0.0)
635      VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
636   else
637      VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
638}
639
640void GLAPIENTRY
641_mesa_Vertex3iv( const GLint *v )
642{
643   VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
644}
645
646void GLAPIENTRY
647_mesa_Vertex3sv( const GLshort *v )
648{
649   VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
650}
651
652void GLAPIENTRY
653_mesa_Vertex4dv( const GLdouble *v )
654{
655   VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
656	    (GLfloat) v[2], (GLfloat) v[3] );
657}
658
659void GLAPIENTRY
660_mesa_Vertex4iv( const GLint *v )
661{
662   VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
663	    (GLfloat) v[2], (GLfloat) v[3] );
664}
665
666void GLAPIENTRY
667_mesa_Vertex4sv( const GLshort *v )
668{
669   VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
670	    (GLfloat) v[2], (GLfloat) v[3] );
671}
672
673void GLAPIENTRY
674_mesa_MultiTexCoord1d(GLenum target, GLdouble s)
675{
676   MULTI_TEXCOORD1( target, (GLfloat) s );
677}
678
679void GLAPIENTRY
680_mesa_MultiTexCoord1dv(GLenum target, const GLdouble *v)
681{
682   MULTI_TEXCOORD1( target, (GLfloat) v[0] );
683}
684
685void GLAPIENTRY
686_mesa_MultiTexCoord1i(GLenum target, GLint s)
687{
688   MULTI_TEXCOORD1( target, (GLfloat) s );
689}
690
691void GLAPIENTRY
692_mesa_MultiTexCoord1iv(GLenum target, const GLint *v)
693{
694   MULTI_TEXCOORD1( target, (GLfloat) v[0] );
695}
696
697void GLAPIENTRY
698_mesa_MultiTexCoord1s(GLenum target, GLshort s)
699{
700   MULTI_TEXCOORD1( target, (GLfloat) s );
701}
702
703void GLAPIENTRY
704_mesa_MultiTexCoord1sv(GLenum target, const GLshort *v)
705{
706   MULTI_TEXCOORD1( target, (GLfloat) v[0] );
707}
708
709void GLAPIENTRY
710_mesa_MultiTexCoord2d(GLenum target, GLdouble s, GLdouble t)
711{
712   MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
713}
714
715void GLAPIENTRY
716_mesa_MultiTexCoord2dv(GLenum target, const GLdouble *v)
717{
718   MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
719}
720
721void GLAPIENTRY
722_mesa_MultiTexCoord2i(GLenum target, GLint s, GLint t)
723{
724   MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
725}
726
727void GLAPIENTRY
728_mesa_MultiTexCoord2iv(GLenum target, const GLint *v)
729{
730   MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
731}
732
733void GLAPIENTRY
734_mesa_MultiTexCoord2s(GLenum target, GLshort s, GLshort t)
735{
736   MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
737}
738
739void GLAPIENTRY
740_mesa_MultiTexCoord2sv(GLenum target, const GLshort *v)
741{
742   MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
743}
744
745void GLAPIENTRY
746_mesa_MultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r)
747{
748   MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
749}
750
751void GLAPIENTRY
752_mesa_MultiTexCoord3dv(GLenum target, const GLdouble *v)
753{
754   MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
755}
756
757void GLAPIENTRY
758_mesa_MultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r)
759{
760   MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
761}
762
763void GLAPIENTRY
764_mesa_MultiTexCoord3iv(GLenum target, const GLint *v)
765{
766   MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
767}
768
769void GLAPIENTRY
770_mesa_MultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r)
771{
772   MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
773}
774
775void GLAPIENTRY
776_mesa_MultiTexCoord3sv(GLenum target, const GLshort *v)
777{
778   MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
779}
780
781void GLAPIENTRY
782_mesa_MultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
783{
784   MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
785		    (GLfloat) r, (GLfloat) q );
786}
787
788void GLAPIENTRY
789_mesa_MultiTexCoord4dv(GLenum target, const GLdouble *v)
790{
791   MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
792		    (GLfloat) v[2], (GLfloat) v[3] );
793}
794
795void GLAPIENTRY
796_mesa_MultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q)
797{
798   MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
799		    (GLfloat) r, (GLfloat) q );
800}
801
802void GLAPIENTRY
803_mesa_MultiTexCoord4iv(GLenum target, const GLint *v)
804{
805   MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
806		    (GLfloat) v[2], (GLfloat) v[3] );
807}
808
809void GLAPIENTRY
810_mesa_MultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
811{
812   MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
813		    (GLfloat) r, (GLfloat) q );
814}
815
816void GLAPIENTRY
817_mesa_MultiTexCoord4sv(GLenum target, const GLshort *v)
818{
819   MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
820		    (GLfloat) v[2], (GLfloat) v[3] );
821}
822
823void GLAPIENTRY
824_mesa_EvalCoord2dv( const GLdouble *u )
825{
826   EVALCOORD2( (GLfloat) u[0], (GLfloat) u[1] );
827}
828
829void GLAPIENTRY
830_mesa_EvalCoord2fv( const GLfloat *u )
831{
832   EVALCOORD2( u[0], u[1] );
833}
834
835void GLAPIENTRY
836_mesa_EvalCoord2d( GLdouble u, GLdouble v )
837{
838   EVALCOORD2( (GLfloat) u, (GLfloat) v );
839}
840
841void GLAPIENTRY
842_mesa_EvalCoord1dv( const GLdouble *u )
843{
844   EVALCOORD1( (GLfloat) *u );
845}
846
847void GLAPIENTRY
848_mesa_EvalCoord1fv( const GLfloat *u )
849{
850   EVALCOORD1( (GLfloat) *u );
851}
852
853void GLAPIENTRY
854_mesa_EvalCoord1d( GLdouble u )
855{
856   EVALCOORD1( (GLfloat) u );
857}
858
859void GLAPIENTRY
860_mesa_Materialf( GLenum face, GLenum pname, GLfloat param )
861{
862   GLfloat fparam[4];
863   fparam[0] = param;
864   MATERIALFV( face, pname, fparam );
865}
866
867void GLAPIENTRY
868_mesa_Materiali(GLenum face, GLenum pname, GLint param )
869{
870   GLfloat p[4];
871   p[0] = (GLfloat) param;
872   MATERIALFV(face, pname, p);
873}
874
875void GLAPIENTRY
876_mesa_Materialiv(GLenum face, GLenum pname, const GLint *params )
877{
878   GLfloat fparam[4];
879   switch (pname) {
880   case GL_AMBIENT:
881   case GL_DIFFUSE:
882   case GL_SPECULAR:
883   case GL_EMISSION:
884   case GL_AMBIENT_AND_DIFFUSE:
885      fparam[0] = INT_TO_FLOAT( params[0] );
886      fparam[1] = INT_TO_FLOAT( params[1] );
887      fparam[2] = INT_TO_FLOAT( params[2] );
888      fparam[3] = INT_TO_FLOAT( params[3] );
889      break;
890   case GL_SHININESS:
891      fparam[0] = (GLfloat) params[0];
892      break;
893   case GL_COLOR_INDEXES:
894      fparam[0] = (GLfloat) params[0];
895      fparam[1] = (GLfloat) params[1];
896      fparam[2] = (GLfloat) params[2];
897      break;
898   default:
899      ;
900   }
901   MATERIALFV(face, pname, fparam);
902}
903
904
905void GLAPIENTRY
906_mesa_Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
907{
908   RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
909}
910
911void GLAPIENTRY
912_mesa_Rectdv(const GLdouble *v1, const GLdouble *v2)
913{
914   RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
915}
916
917void GLAPIENTRY
918_mesa_Rectfv(const GLfloat *v1, const GLfloat *v2)
919{
920   RECTF(v1[0], v1[1], v2[0], v2[1]);
921}
922
923void GLAPIENTRY
924_mesa_Recti(GLint x1, GLint y1, GLint x2, GLint y2)
925{
926   RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
927}
928
929void GLAPIENTRY
930_mesa_Rectiv(const GLint *v1, const GLint *v2)
931{
932   RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
933}
934
935void GLAPIENTRY
936_mesa_Rects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
937{
938   RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
939}
940
941void GLAPIENTRY
942_mesa_Rectsv(const GLshort *v1, const GLshort *v2)
943{
944   RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
945}
946
947void GLAPIENTRY
948_mesa_SecondaryColor3b( GLbyte red, GLbyte green, GLbyte blue )
949{
950   SECONDARYCOLORF( BYTE_TO_FLOAT(red),
951		    BYTE_TO_FLOAT(green),
952		    BYTE_TO_FLOAT(blue) );
953}
954
955void GLAPIENTRY
956_mesa_SecondaryColor3d( GLdouble red, GLdouble green, GLdouble blue )
957{
958   SECONDARYCOLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue );
959}
960
961void GLAPIENTRY
962_mesa_SecondaryColor3i( GLint red, GLint green, GLint blue )
963{
964   SECONDARYCOLORF( INT_TO_FLOAT(red),
965		    INT_TO_FLOAT(green),
966		    INT_TO_FLOAT(blue));
967}
968
969void GLAPIENTRY
970_mesa_SecondaryColor3s( GLshort red, GLshort green, GLshort blue )
971{
972   SECONDARYCOLORF(SHORT_TO_FLOAT(red),
973                   SHORT_TO_FLOAT(green),
974                   SHORT_TO_FLOAT(blue));
975}
976
977void GLAPIENTRY
978_mesa_SecondaryColor3ui( GLuint red, GLuint green, GLuint blue )
979{
980   SECONDARYCOLORF(UINT_TO_FLOAT(red),
981                   UINT_TO_FLOAT(green),
982                   UINT_TO_FLOAT(blue));
983}
984
985void GLAPIENTRY
986_mesa_SecondaryColor3us( GLushort red, GLushort green, GLushort blue )
987{
988   SECONDARYCOLORF(USHORT_TO_FLOAT(red),
989                   USHORT_TO_FLOAT(green),
990                   USHORT_TO_FLOAT(blue));
991}
992
993void GLAPIENTRY
994_mesa_SecondaryColor3ub( GLubyte red, GLubyte green, GLubyte blue )
995{
996   SECONDARYCOLORF(UBYTE_TO_FLOAT(red),
997                   UBYTE_TO_FLOAT(green),
998                   UBYTE_TO_FLOAT(blue));
999}
1000
1001void GLAPIENTRY
1002_mesa_SecondaryColor3bv( const GLbyte *v )
1003{
1004   SECONDARYCOLORF(BYTE_TO_FLOAT(v[0]),
1005                   BYTE_TO_FLOAT(v[1]),
1006                   BYTE_TO_FLOAT(v[2]));
1007}
1008
1009void GLAPIENTRY
1010_mesa_SecondaryColor3dv( const GLdouble *v )
1011{
1012   SECONDARYCOLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
1013}
1014void GLAPIENTRY
1015_mesa_SecondaryColor3iv( const GLint *v )
1016{
1017   SECONDARYCOLORF(INT_TO_FLOAT(v[0]),
1018                   INT_TO_FLOAT(v[1]),
1019                   INT_TO_FLOAT(v[2]));
1020}
1021
1022void GLAPIENTRY
1023_mesa_SecondaryColor3sv( const GLshort *v )
1024{
1025   SECONDARYCOLORF(SHORT_TO_FLOAT(v[0]),
1026                   SHORT_TO_FLOAT(v[1]),
1027                   SHORT_TO_FLOAT(v[2]));
1028}
1029
1030void GLAPIENTRY
1031_mesa_SecondaryColor3uiv( const GLuint *v )
1032{
1033   SECONDARYCOLORF(UINT_TO_FLOAT(v[0]),
1034                   UINT_TO_FLOAT(v[1]),
1035                   UINT_TO_FLOAT(v[2]));
1036}
1037
1038void GLAPIENTRY
1039_mesa_SecondaryColor3usv( const GLushort *v )
1040{
1041   SECONDARYCOLORF(USHORT_TO_FLOAT(v[0]),
1042                   USHORT_TO_FLOAT(v[1]),
1043                   USHORT_TO_FLOAT(v[2]));
1044}
1045
1046void GLAPIENTRY
1047_mesa_SecondaryColor3ubv( const GLubyte *v )
1048{
1049   SECONDARYCOLORF(UBYTE_TO_FLOAT(v[0]),
1050                   UBYTE_TO_FLOAT(v[1]),
1051                   UBYTE_TO_FLOAT(v[2]));
1052}
1053
1054
1055/*
1056 * GL_NV_vertex_program:
1057 * Always loop-back to one of the VertexAttrib[1234]f[v]NV functions.
1058 * Note that attribute indexes DO alias conventional vertex attributes.
1059 */
1060
1061void GLAPIENTRY
1062_mesa_VertexAttrib1sNV(GLuint index, GLshort x)
1063{
1064   ATTRIB1NV(index, (GLfloat) x);
1065}
1066
1067void GLAPIENTRY
1068_mesa_VertexAttrib1dNV(GLuint index, GLdouble x)
1069{
1070   ATTRIB1NV(index, (GLfloat) x);
1071}
1072
1073void GLAPIENTRY
1074_mesa_VertexAttrib2sNV(GLuint index, GLshort x, GLshort y)
1075{
1076   ATTRIB2NV(index, (GLfloat) x, y);
1077}
1078
1079void GLAPIENTRY
1080_mesa_VertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y)
1081{
1082   ATTRIB2NV(index, (GLfloat) x, (GLfloat) y);
1083}
1084
1085void GLAPIENTRY
1086_mesa_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
1087{
1088   ATTRIB3NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
1089}
1090
1091void GLAPIENTRY
1092_mesa_VertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z)
1093{
1094   ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
1095}
1096
1097void GLAPIENTRY
1098_mesa_VertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
1099{
1100   ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1101}
1102
1103void GLAPIENTRY
1104_mesa_VertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1105{
1106   ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1107}
1108
1109void GLAPIENTRY
1110_mesa_VertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
1111{
1112   ATTRIB4NV(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y),
1113	UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w));
1114}
1115
1116void GLAPIENTRY
1117_mesa_VertexAttrib1svNV(GLuint index, const GLshort *v)
1118{
1119   ATTRIB1NV(index, (GLfloat) v[0]);
1120}
1121
1122void GLAPIENTRY
1123_mesa_VertexAttrib1dvNV(GLuint index, const GLdouble *v)
1124{
1125   ATTRIB1NV(index, (GLfloat) v[0]);
1126}
1127
1128void GLAPIENTRY
1129_mesa_VertexAttrib2svNV(GLuint index, const GLshort *v)
1130{
1131   ATTRIB2NV(index, (GLfloat) v[0], (GLfloat) v[1]);
1132}
1133
1134void GLAPIENTRY
1135_mesa_VertexAttrib2dvNV(GLuint index, const GLdouble *v)
1136{
1137   ATTRIB2NV(index, (GLfloat) v[0], (GLfloat) v[1]);
1138}
1139
1140void GLAPIENTRY
1141_mesa_VertexAttrib3svNV(GLuint index, const GLshort *v)
1142{
1143   ATTRIB3NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
1144}
1145
1146void GLAPIENTRY
1147_mesa_VertexAttrib3dvNV(GLuint index, const GLdouble *v)
1148{
1149   ATTRIB3NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
1150}
1151
1152void GLAPIENTRY
1153_mesa_VertexAttrib4svNV(GLuint index, const GLshort *v)
1154{
1155   ATTRIB4NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2],
1156	  (GLfloat)v[3]);
1157}
1158
1159void GLAPIENTRY
1160_mesa_VertexAttrib4dvNV(GLuint index, const GLdouble *v)
1161{
1162   ATTRIB4NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1163}
1164
1165void GLAPIENTRY
1166_mesa_VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
1167{
1168   ATTRIB4NV(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
1169          UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]));
1170}
1171
1172
1173void GLAPIENTRY
1174_mesa_VertexAttribs1svNV(GLuint index, GLsizei n, const GLshort *v)
1175{
1176   GLint i;
1177   for (i = n - 1; i >= 0; i--)
1178      _mesa_VertexAttrib1svNV(index + i, v + i);
1179}
1180
1181void GLAPIENTRY
1182_mesa_VertexAttribs1fvNV(GLuint index, GLsizei n, const GLfloat *v)
1183{
1184   GLint i;
1185   for (i = n - 1; i >= 0; i--)
1186      ATTRIB1NV(index + i, v[i]);
1187}
1188
1189void GLAPIENTRY
1190_mesa_VertexAttribs1dvNV(GLuint index, GLsizei n, const GLdouble *v)
1191{
1192   GLint i;
1193   for (i = n - 1; i >= 0; i--)
1194      _mesa_VertexAttrib1dvNV(index + i, v + i);
1195}
1196
1197void GLAPIENTRY
1198_mesa_VertexAttribs2svNV(GLuint index, GLsizei n, const GLshort *v)
1199{
1200   GLint i;
1201   for (i = n - 1; i >= 0; i--)
1202      _mesa_VertexAttrib2svNV(index + i, v + 2 * i);
1203}
1204
1205void GLAPIENTRY
1206_mesa_VertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat *v)
1207{
1208   GLint i;
1209   for (i = n - 1; i >= 0; i--)
1210      ATTRIB2NV(index + i, v[2 * i], v[2 * i + 1]);
1211}
1212
1213void GLAPIENTRY
1214_mesa_VertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble *v)
1215{
1216   GLint i;
1217   for (i = n - 1; i >= 0; i--)
1218      _mesa_VertexAttrib2dvNV(index + i, v + 2 * i);
1219}
1220
1221void GLAPIENTRY
1222_mesa_VertexAttribs3svNV(GLuint index, GLsizei n, const GLshort *v)
1223{
1224   GLint i;
1225   for (i = n - 1; i >= 0; i--)
1226      _mesa_VertexAttrib3svNV(index + i, v + 3 * i);
1227}
1228
1229void GLAPIENTRY
1230_mesa_VertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat *v)
1231{
1232   GLint i;
1233   for (i = n - 1; i >= 0; i--)
1234      ATTRIB3NV(index + i, v[3 * i], v[3 * i + 1], v[3 * i + 2]);
1235}
1236
1237void GLAPIENTRY
1238_mesa_VertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble *v)
1239{
1240   GLint i;
1241   for (i = n - 1; i >= 0; i--)
1242      _mesa_VertexAttrib3dvNV(index + i, v + 3 * i);
1243}
1244
1245void GLAPIENTRY
1246_mesa_VertexAttribs4svNV(GLuint index, GLsizei n, const GLshort *v)
1247{
1248   GLint i;
1249   for (i = n - 1; i >= 0; i--)
1250      _mesa_VertexAttrib4svNV(index + i, v + 4 * i);
1251}
1252
1253void GLAPIENTRY
1254_mesa_VertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat *v)
1255{
1256   GLint i;
1257   for (i = n - 1; i >= 0; i--)
1258      ATTRIB4NV(index + i, v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3]);
1259}
1260
1261void GLAPIENTRY
1262_mesa_VertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble *v)
1263{
1264   GLint i;
1265   for (i = n - 1; i >= 0; i--)
1266      _mesa_VertexAttrib4dvNV(index + i, v + 4 * i);
1267}
1268
1269void GLAPIENTRY
1270_mesa_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)
1271{
1272   GLint i;
1273   for (i = n - 1; i >= 0; i--)
1274      _mesa_VertexAttrib4ubvNV(index + i, v + 4 * i);
1275}
1276
1277
1278/*
1279 * GL_ARB_vertex_program
1280 * Always loop-back to one of the VertexAttrib[1234]f[v]ARB functions.
1281 * Note that attribute indexes do NOT alias conventional attributes.
1282 */
1283
1284void GLAPIENTRY
1285_mesa_VertexAttrib1s(GLuint index, GLshort x)
1286{
1287   ATTRIB1ARB(index, (GLfloat) x);
1288}
1289
1290void GLAPIENTRY
1291_mesa_VertexAttrib1d(GLuint index, GLdouble x)
1292{
1293   ATTRIB1ARB(index, (GLfloat) x);
1294}
1295
1296void GLAPIENTRY
1297_mesa_VertexAttrib2s(GLuint index, GLshort x, GLshort y)
1298{
1299   ATTRIB2ARB(index, (GLfloat) x, y);
1300}
1301
1302void GLAPIENTRY
1303_mesa_VertexAttrib2d(GLuint index, GLdouble x, GLdouble y)
1304{
1305   ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y);
1306}
1307
1308void GLAPIENTRY
1309_mesa_VertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z)
1310{
1311   ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
1312}
1313
1314void GLAPIENTRY
1315_mesa_VertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z)
1316{
1317   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
1318}
1319
1320void GLAPIENTRY
1321_mesa_VertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
1322{
1323   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1324}
1325
1326void GLAPIENTRY
1327_mesa_VertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1328{
1329   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1330}
1331
1332void GLAPIENTRY
1333_mesa_VertexAttrib1sv(GLuint index, const GLshort *v)
1334{
1335   ATTRIB1ARB(index, (GLfloat) v[0]);
1336}
1337
1338void GLAPIENTRY
1339_mesa_VertexAttrib1dv(GLuint index, const GLdouble *v)
1340{
1341   ATTRIB1ARB(index, (GLfloat) v[0]);
1342}
1343
1344void GLAPIENTRY
1345_mesa_VertexAttrib2sv(GLuint index, const GLshort *v)
1346{
1347   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]);
1348}
1349
1350void GLAPIENTRY
1351_mesa_VertexAttrib2dv(GLuint index, const GLdouble *v)
1352{
1353   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]);
1354}
1355
1356void GLAPIENTRY
1357_mesa_VertexAttrib3sv(GLuint index, const GLshort *v)
1358{
1359   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
1360}
1361
1362void GLAPIENTRY
1363_mesa_VertexAttrib3dv(GLuint index, const GLdouble *v)
1364{
1365   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
1366}
1367
1368void GLAPIENTRY
1369_mesa_VertexAttrib4sv(GLuint index, const GLshort *v)
1370{
1371   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2],
1372	  (GLfloat)v[3]);
1373}
1374
1375void GLAPIENTRY
1376_mesa_VertexAttrib4dv(GLuint index, const GLdouble *v)
1377{
1378   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1379}
1380
1381void GLAPIENTRY
1382_mesa_VertexAttrib4bv(GLuint index, const GLbyte * v)
1383{
1384   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1385}
1386
1387void GLAPIENTRY
1388_mesa_VertexAttrib4iv(GLuint index, const GLint * v)
1389{
1390   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1391}
1392
1393void GLAPIENTRY
1394_mesa_VertexAttrib4ubv(GLuint index, const GLubyte * v)
1395{
1396   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1397}
1398
1399void GLAPIENTRY
1400_mesa_VertexAttrib4usv(GLuint index, const GLushort * v)
1401{
1402   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1403}
1404
1405void GLAPIENTRY
1406_mesa_VertexAttrib4uiv(GLuint index, const GLuint * v)
1407{
1408   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1409}
1410
1411void GLAPIENTRY
1412_mesa_VertexAttrib4Nbv(GLuint index, const GLbyte * v)
1413{
1414   ATTRIB4ARB(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
1415          BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]));
1416}
1417
1418void GLAPIENTRY
1419_mesa_VertexAttrib4Nsv(GLuint index, const GLshort * v)
1420{
1421   ATTRIB4ARB(index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
1422          SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]));
1423}
1424
1425void GLAPIENTRY
1426_mesa_VertexAttrib4Niv(GLuint index, const GLint * v)
1427{
1428   ATTRIB4ARB(index, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
1429          INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]));
1430}
1431
1432void GLAPIENTRY
1433_mesa_VertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
1434{
1435   ATTRIB4ARB(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y),
1436              UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w));
1437}
1438
1439void GLAPIENTRY
1440_mesa_VertexAttrib4Nubv(GLuint index, const GLubyte * v)
1441{
1442   ATTRIB4ARB(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
1443          UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]));
1444}
1445
1446void GLAPIENTRY
1447_mesa_VertexAttrib4Nusv(GLuint index, const GLushort * v)
1448{
1449   ATTRIB4ARB(index, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
1450          USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]));
1451}
1452
1453void GLAPIENTRY
1454_mesa_VertexAttrib4Nuiv(GLuint index, const GLuint * v)
1455{
1456   ATTRIB4ARB(index, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
1457          UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]));
1458}
1459
1460
1461
1462/**
1463 * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes.
1464 * Note that attribute indexes do NOT alias conventional attributes.
1465 */
1466
1467void GLAPIENTRY
1468_mesa_VertexAttribI1iv(GLuint index, const GLint *v)
1469{
1470   ATTRIBI_1I(index, v[0]);
1471}
1472
1473void GLAPIENTRY
1474_mesa_VertexAttribI1uiv(GLuint index, const GLuint *v)
1475{
1476   ATTRIBI_1UI(index, v[0]);
1477}
1478
1479void GLAPIENTRY
1480_mesa_VertexAttribI4bv(GLuint index, const GLbyte *v)
1481{
1482   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
1483}
1484
1485void GLAPIENTRY
1486_mesa_VertexAttribI4sv(GLuint index, const GLshort *v)
1487{
1488   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
1489}
1490
1491void GLAPIENTRY
1492_mesa_VertexAttribI4ubv(GLuint index, const GLubyte *v)
1493{
1494   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);
1495}
1496
1497void GLAPIENTRY
1498_mesa_VertexAttribI4usv(GLuint index, const GLushort *v)
1499{
1500   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);
1501}
1502
1503void GLAPIENTRY
1504_mesa_VertexAttribL1d(GLuint index, GLdouble x)
1505{
1506   ATTRIB1_D(index, x);
1507}
1508
1509void GLAPIENTRY
1510_mesa_VertexAttribL2d(GLuint index, GLdouble x, GLdouble y)
1511{
1512   ATTRIB2_D(index, x, y);
1513}
1514
1515void GLAPIENTRY
1516_mesa_VertexAttribL3d(GLuint index, GLdouble x, GLdouble y, GLdouble z)
1517{
1518   ATTRIB3_D(index, x, y, z);
1519}
1520
1521void GLAPIENTRY
1522_mesa_VertexAttribL4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1523{
1524   ATTRIB4_D(index, x, y, z, w);
1525}
1526
1527void GLAPIENTRY
1528_mesa_VertexAttribL1dv(GLuint index, const GLdouble *v)
1529{
1530   ATTRIB1_D(index, v[0]);
1531}
1532
1533void GLAPIENTRY
1534_mesa_VertexAttribL1ui64ARB(GLuint index, GLuint64EXT x)
1535{
1536   ATTRIB1_UI64(index, x);
1537}
1538
1539void GLAPIENTRY
1540_mesa_VertexAttribL1ui64vARB(GLuint index, const GLuint64EXT *v)
1541{
1542   ATTRIB1_UI64(index, v[0]);
1543}
1544
1545void GLAPIENTRY
1546_mesa_VertexAttribL2dv(GLuint index, const GLdouble *v)
1547{
1548   ATTRIB2_D(index, v[0], v[1]);
1549}
1550
1551void GLAPIENTRY
1552_mesa_VertexAttribL3dv(GLuint index, const GLdouble *v)
1553{
1554   ATTRIB3_D(index, v[0], v[1], v[2]);
1555}
1556
1557void GLAPIENTRY
1558_mesa_VertexAttribL4dv(GLuint index, const GLdouble *v)
1559{
1560   ATTRIB4_D(index, v[0], v[1], v[2], v[3]);
1561}
1562
1563/*
1564 * This code never registers handlers for any of the entry points
1565 * listed in vtxfmt.h.
1566 */
1567void
1568_mesa_loopback_init_api_table(const struct gl_context *ctx,
1569                              struct _glapi_table *dest)
1570{
1571   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1572      SET_Color4ub(dest, _mesa_Color4ub);
1573      SET_Materialf(dest, _mesa_Materialf);
1574   }
1575   if (ctx->API == API_OPENGL_COMPAT) {
1576      SET_Color3b(dest, _mesa_Color3b);
1577      SET_Color3d(dest, _mesa_Color3d);
1578      SET_Color3i(dest, _mesa_Color3i);
1579      SET_Color3s(dest, _mesa_Color3s);
1580      SET_Color3ui(dest, _mesa_Color3ui);
1581      SET_Color3us(dest, _mesa_Color3us);
1582      SET_Color3ub(dest, _mesa_Color3ub);
1583      SET_Color4b(dest, _mesa_Color4b);
1584      SET_Color4d(dest, _mesa_Color4d);
1585      SET_Color4i(dest, _mesa_Color4i);
1586      SET_Color4s(dest, _mesa_Color4s);
1587      SET_Color4ui(dest, _mesa_Color4ui);
1588      SET_Color4us(dest, _mesa_Color4us);
1589      SET_Color3bv(dest, _mesa_Color3bv);
1590      SET_Color3dv(dest, _mesa_Color3dv);
1591      SET_Color3iv(dest, _mesa_Color3iv);
1592      SET_Color3sv(dest, _mesa_Color3sv);
1593      SET_Color3uiv(dest, _mesa_Color3uiv);
1594      SET_Color3usv(dest, _mesa_Color3usv);
1595      SET_Color3ubv(dest, _mesa_Color3ubv);
1596      SET_Color4bv(dest, _mesa_Color4bv);
1597      SET_Color4dv(dest, _mesa_Color4dv);
1598      SET_Color4iv(dest, _mesa_Color4iv);
1599      SET_Color4sv(dest, _mesa_Color4sv);
1600      SET_Color4uiv(dest, _mesa_Color4uiv);
1601      SET_Color4usv(dest, _mesa_Color4usv);
1602      SET_Color4ubv(dest, _mesa_Color4ubv);
1603
1604      SET_SecondaryColor3b(dest, _mesa_SecondaryColor3b);
1605      SET_SecondaryColor3d(dest, _mesa_SecondaryColor3d);
1606      SET_SecondaryColor3i(dest, _mesa_SecondaryColor3i);
1607      SET_SecondaryColor3s(dest, _mesa_SecondaryColor3s);
1608      SET_SecondaryColor3ui(dest, _mesa_SecondaryColor3ui);
1609      SET_SecondaryColor3us(dest, _mesa_SecondaryColor3us);
1610      SET_SecondaryColor3ub(dest, _mesa_SecondaryColor3ub);
1611      SET_SecondaryColor3bv(dest, _mesa_SecondaryColor3bv);
1612      SET_SecondaryColor3dv(dest, _mesa_SecondaryColor3dv);
1613      SET_SecondaryColor3iv(dest, _mesa_SecondaryColor3iv);
1614      SET_SecondaryColor3sv(dest, _mesa_SecondaryColor3sv);
1615      SET_SecondaryColor3uiv(dest, _mesa_SecondaryColor3uiv);
1616      SET_SecondaryColor3usv(dest, _mesa_SecondaryColor3usv);
1617      SET_SecondaryColor3ubv(dest, _mesa_SecondaryColor3ubv);
1618
1619      SET_EdgeFlagv(dest, _mesa_EdgeFlagv);
1620
1621      SET_Indexd(dest, _mesa_Indexd);
1622      SET_Indexi(dest, _mesa_Indexi);
1623      SET_Indexs(dest, _mesa_Indexs);
1624      SET_Indexub(dest, _mesa_Indexub);
1625      SET_Indexdv(dest, _mesa_Indexdv);
1626      SET_Indexiv(dest, _mesa_Indexiv);
1627      SET_Indexsv(dest, _mesa_Indexsv);
1628      SET_Indexubv(dest, _mesa_Indexubv);
1629      SET_Normal3b(dest, _mesa_Normal3b);
1630      SET_Normal3d(dest, _mesa_Normal3d);
1631      SET_Normal3i(dest, _mesa_Normal3i);
1632      SET_Normal3s(dest, _mesa_Normal3s);
1633      SET_Normal3bv(dest, _mesa_Normal3bv);
1634      SET_Normal3dv(dest, _mesa_Normal3dv);
1635      SET_Normal3iv(dest, _mesa_Normal3iv);
1636      SET_Normal3sv(dest, _mesa_Normal3sv);
1637      SET_TexCoord1d(dest, _mesa_TexCoord1d);
1638      SET_TexCoord1i(dest, _mesa_TexCoord1i);
1639      SET_TexCoord1s(dest, _mesa_TexCoord1s);
1640      SET_TexCoord2d(dest, _mesa_TexCoord2d);
1641      SET_TexCoord2s(dest, _mesa_TexCoord2s);
1642      SET_TexCoord2i(dest, _mesa_TexCoord2i);
1643      SET_TexCoord3d(dest, _mesa_TexCoord3d);
1644      SET_TexCoord3i(dest, _mesa_TexCoord3i);
1645      SET_TexCoord3s(dest, _mesa_TexCoord3s);
1646      SET_TexCoord4d(dest, _mesa_TexCoord4d);
1647      SET_TexCoord4i(dest, _mesa_TexCoord4i);
1648      SET_TexCoord4s(dest, _mesa_TexCoord4s);
1649      SET_TexCoord1dv(dest, _mesa_TexCoord1dv);
1650      SET_TexCoord1iv(dest, _mesa_TexCoord1iv);
1651      SET_TexCoord1sv(dest, _mesa_TexCoord1sv);
1652      SET_TexCoord2dv(dest, _mesa_TexCoord2dv);
1653      SET_TexCoord2iv(dest, _mesa_TexCoord2iv);
1654      SET_TexCoord2sv(dest, _mesa_TexCoord2sv);
1655      SET_TexCoord3dv(dest, _mesa_TexCoord3dv);
1656      SET_TexCoord3iv(dest, _mesa_TexCoord3iv);
1657      SET_TexCoord3sv(dest, _mesa_TexCoord3sv);
1658      SET_TexCoord4dv(dest, _mesa_TexCoord4dv);
1659      SET_TexCoord4iv(dest, _mesa_TexCoord4iv);
1660      SET_TexCoord4sv(dest, _mesa_TexCoord4sv);
1661      SET_Vertex2d(dest, _mesa_Vertex2d);
1662      SET_Vertex2i(dest, _mesa_Vertex2i);
1663      SET_Vertex2s(dest, _mesa_Vertex2s);
1664      SET_Vertex3d(dest, _mesa_Vertex3d);
1665      SET_Vertex3i(dest, _mesa_Vertex3i);
1666      SET_Vertex3s(dest, _mesa_Vertex3s);
1667      SET_Vertex4d(dest, _mesa_Vertex4d);
1668      SET_Vertex4i(dest, _mesa_Vertex4i);
1669      SET_Vertex4s(dest, _mesa_Vertex4s);
1670      SET_Vertex2dv(dest, _mesa_Vertex2dv);
1671      SET_Vertex2iv(dest, _mesa_Vertex2iv);
1672      SET_Vertex2sv(dest, _mesa_Vertex2sv);
1673      SET_Vertex3dv(dest, _mesa_Vertex3dv);
1674      SET_Vertex3iv(dest, _mesa_Vertex3iv);
1675      SET_Vertex3sv(dest, _mesa_Vertex3sv);
1676      SET_Vertex4dv(dest, _mesa_Vertex4dv);
1677      SET_Vertex4iv(dest, _mesa_Vertex4iv);
1678      SET_Vertex4sv(dest, _mesa_Vertex4sv);
1679      SET_MultiTexCoord1d(dest, _mesa_MultiTexCoord1d);
1680      SET_MultiTexCoord1dv(dest, _mesa_MultiTexCoord1dv);
1681      SET_MultiTexCoord1i(dest, _mesa_MultiTexCoord1i);
1682      SET_MultiTexCoord1iv(dest, _mesa_MultiTexCoord1iv);
1683      SET_MultiTexCoord1s(dest, _mesa_MultiTexCoord1s);
1684      SET_MultiTexCoord1sv(dest, _mesa_MultiTexCoord1sv);
1685      SET_MultiTexCoord2d(dest, _mesa_MultiTexCoord2d);
1686      SET_MultiTexCoord2dv(dest, _mesa_MultiTexCoord2dv);
1687      SET_MultiTexCoord2i(dest, _mesa_MultiTexCoord2i);
1688      SET_MultiTexCoord2iv(dest, _mesa_MultiTexCoord2iv);
1689      SET_MultiTexCoord2s(dest, _mesa_MultiTexCoord2s);
1690      SET_MultiTexCoord2sv(dest, _mesa_MultiTexCoord2sv);
1691      SET_MultiTexCoord3d(dest, _mesa_MultiTexCoord3d);
1692      SET_MultiTexCoord3dv(dest, _mesa_MultiTexCoord3dv);
1693      SET_MultiTexCoord3i(dest, _mesa_MultiTexCoord3i);
1694      SET_MultiTexCoord3iv(dest, _mesa_MultiTexCoord3iv);
1695      SET_MultiTexCoord3s(dest, _mesa_MultiTexCoord3s);
1696      SET_MultiTexCoord3sv(dest, _mesa_MultiTexCoord3sv);
1697      SET_MultiTexCoord4d(dest, _mesa_MultiTexCoord4d);
1698      SET_MultiTexCoord4dv(dest, _mesa_MultiTexCoord4dv);
1699      SET_MultiTexCoord4i(dest, _mesa_MultiTexCoord4i);
1700      SET_MultiTexCoord4iv(dest, _mesa_MultiTexCoord4iv);
1701      SET_MultiTexCoord4s(dest, _mesa_MultiTexCoord4s);
1702      SET_MultiTexCoord4sv(dest, _mesa_MultiTexCoord4sv);
1703      SET_EvalCoord2dv(dest, _mesa_EvalCoord2dv);
1704      SET_EvalCoord2fv(dest, _mesa_EvalCoord2fv);
1705      SET_EvalCoord2d(dest, _mesa_EvalCoord2d);
1706      SET_EvalCoord1dv(dest, _mesa_EvalCoord1dv);
1707      SET_EvalCoord1fv(dest, _mesa_EvalCoord1fv);
1708      SET_EvalCoord1d(dest, _mesa_EvalCoord1d);
1709      SET_Materiali(dest, _mesa_Materiali);
1710      SET_Materialiv(dest, _mesa_Materialiv);
1711      SET_Rectd(dest, _mesa_Rectd);
1712      SET_Rectdv(dest, _mesa_Rectdv);
1713      SET_Rectfv(dest, _mesa_Rectfv);
1714      SET_Recti(dest, _mesa_Recti);
1715      SET_Rectiv(dest, _mesa_Rectiv);
1716      SET_Rects(dest, _mesa_Rects);
1717      SET_Rectsv(dest, _mesa_Rectsv);
1718      SET_FogCoordd(dest, _mesa_FogCoordd);
1719      SET_FogCoorddv(dest, _mesa_FogCoorddv);
1720   }
1721
1722   if (ctx->API == API_OPENGL_COMPAT) {
1723      SET_VertexAttrib1sNV(dest, _mesa_VertexAttrib1sNV);
1724      SET_VertexAttrib1dNV(dest, _mesa_VertexAttrib1dNV);
1725      SET_VertexAttrib2sNV(dest, _mesa_VertexAttrib2sNV);
1726      SET_VertexAttrib2dNV(dest, _mesa_VertexAttrib2dNV);
1727      SET_VertexAttrib3sNV(dest, _mesa_VertexAttrib3sNV);
1728      SET_VertexAttrib3dNV(dest, _mesa_VertexAttrib3dNV);
1729      SET_VertexAttrib4sNV(dest, _mesa_VertexAttrib4sNV);
1730      SET_VertexAttrib4dNV(dest, _mesa_VertexAttrib4dNV);
1731      SET_VertexAttrib4ubNV(dest, _mesa_VertexAttrib4ubNV);
1732      SET_VertexAttrib1svNV(dest, _mesa_VertexAttrib1svNV);
1733      SET_VertexAttrib1dvNV(dest, _mesa_VertexAttrib1dvNV);
1734      SET_VertexAttrib2svNV(dest, _mesa_VertexAttrib2svNV);
1735      SET_VertexAttrib2dvNV(dest, _mesa_VertexAttrib2dvNV);
1736      SET_VertexAttrib3svNV(dest, _mesa_VertexAttrib3svNV);
1737      SET_VertexAttrib3dvNV(dest, _mesa_VertexAttrib3dvNV);
1738      SET_VertexAttrib4svNV(dest, _mesa_VertexAttrib4svNV);
1739      SET_VertexAttrib4dvNV(dest, _mesa_VertexAttrib4dvNV);
1740      SET_VertexAttrib4ubvNV(dest, _mesa_VertexAttrib4ubvNV);
1741      SET_VertexAttribs1svNV(dest, _mesa_VertexAttribs1svNV);
1742      SET_VertexAttribs1fvNV(dest, _mesa_VertexAttribs1fvNV);
1743      SET_VertexAttribs1dvNV(dest, _mesa_VertexAttribs1dvNV);
1744      SET_VertexAttribs2svNV(dest, _mesa_VertexAttribs2svNV);
1745      SET_VertexAttribs2fvNV(dest, _mesa_VertexAttribs2fvNV);
1746      SET_VertexAttribs2dvNV(dest, _mesa_VertexAttribs2dvNV);
1747      SET_VertexAttribs3svNV(dest, _mesa_VertexAttribs3svNV);
1748      SET_VertexAttribs3fvNV(dest, _mesa_VertexAttribs3fvNV);
1749      SET_VertexAttribs3dvNV(dest, _mesa_VertexAttribs3dvNV);
1750      SET_VertexAttribs4svNV(dest, _mesa_VertexAttribs4svNV);
1751      SET_VertexAttribs4fvNV(dest, _mesa_VertexAttribs4fvNV);
1752      SET_VertexAttribs4dvNV(dest, _mesa_VertexAttribs4dvNV);
1753      SET_VertexAttribs4ubvNV(dest, _mesa_VertexAttribs4ubvNV);
1754   }
1755
1756   if (_mesa_is_desktop_gl(ctx)) {
1757      SET_VertexAttrib1s(dest, _mesa_VertexAttrib1s);
1758      SET_VertexAttrib1d(dest, _mesa_VertexAttrib1d);
1759      SET_VertexAttrib2s(dest, _mesa_VertexAttrib2s);
1760      SET_VertexAttrib2d(dest, _mesa_VertexAttrib2d);
1761      SET_VertexAttrib3s(dest, _mesa_VertexAttrib3s);
1762      SET_VertexAttrib3d(dest, _mesa_VertexAttrib3d);
1763      SET_VertexAttrib4s(dest, _mesa_VertexAttrib4s);
1764      SET_VertexAttrib4d(dest, _mesa_VertexAttrib4d);
1765      SET_VertexAttrib1sv(dest, _mesa_VertexAttrib1sv);
1766      SET_VertexAttrib1dv(dest, _mesa_VertexAttrib1dv);
1767      SET_VertexAttrib2sv(dest, _mesa_VertexAttrib2sv);
1768      SET_VertexAttrib2dv(dest, _mesa_VertexAttrib2dv);
1769      SET_VertexAttrib3sv(dest, _mesa_VertexAttrib3sv);
1770      SET_VertexAttrib3dv(dest, _mesa_VertexAttrib3dv);
1771      SET_VertexAttrib4sv(dest, _mesa_VertexAttrib4sv);
1772      SET_VertexAttrib4dv(dest, _mesa_VertexAttrib4dv);
1773      SET_VertexAttrib4Nub(dest, _mesa_VertexAttrib4Nub);
1774      SET_VertexAttrib4Nubv(dest, _mesa_VertexAttrib4Nubv);
1775      SET_VertexAttrib4bv(dest, _mesa_VertexAttrib4bv);
1776      SET_VertexAttrib4iv(dest, _mesa_VertexAttrib4iv);
1777      SET_VertexAttrib4ubv(dest, _mesa_VertexAttrib4ubv);
1778      SET_VertexAttrib4usv(dest, _mesa_VertexAttrib4usv);
1779      SET_VertexAttrib4uiv(dest, _mesa_VertexAttrib4uiv);
1780      SET_VertexAttrib4Nbv(dest, _mesa_VertexAttrib4Nbv);
1781      SET_VertexAttrib4Nsv(dest, _mesa_VertexAttrib4Nsv);
1782      SET_VertexAttrib4Nusv(dest, _mesa_VertexAttrib4Nusv);
1783      SET_VertexAttrib4Niv(dest, _mesa_VertexAttrib4Niv);
1784      SET_VertexAttrib4Nuiv(dest, _mesa_VertexAttrib4Nuiv);
1785
1786      /* GL_EXT_gpu_shader4, GL 3.0 */
1787      SET_VertexAttribI1iv(dest, _mesa_VertexAttribI1iv);
1788      SET_VertexAttribI1uiv(dest, _mesa_VertexAttribI1uiv);
1789      SET_VertexAttribI4bv(dest, _mesa_VertexAttribI4bv);
1790      SET_VertexAttribI4sv(dest, _mesa_VertexAttribI4sv);
1791      SET_VertexAttribI4ubv(dest, _mesa_VertexAttribI4ubv);
1792      SET_VertexAttribI4usv(dest, _mesa_VertexAttribI4usv);
1793   }
1794}
1795