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