1 /**************************************************************************
3 Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas.
7 Permission is hereby granted, free of charge, to any person obtaining a
8 copy of this software and associated documentation files (the "Software"),
9 to deal in the Software without restriction, including without limitation
10 on the rights to use, copy, modify, merge, publish, distribute, sub
11 license, and/or sell copies of the Software, and to permit persons to whom
12 the Software is furnished to do so, subject to the following conditions:
14 The above copyright notice and this permission notice (including the next
15 paragraph) shall be included in all copies or substantial portions of the
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21 TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24 USE OR OTHER DEALINGS IN THE SOFTWARE.
26 **************************************************************************/
28 #define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
29 #define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
30 #define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
31 #define ATTR4FV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
33 #define ATTR1F( A, X ) ATTR( A, 1, X, 0, 0, 1 )
34 #define ATTR2F( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
35 #define ATTR3F( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
36 #define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
38 #define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
40 static void GLAPIENTRY
TAG(Vertex2f
)( GLfloat x
, GLfloat y
)
42 GET_CURRENT_CONTEXT( ctx
);
43 ATTR2F( BRW_ATTRIB_POS
, x
, y
);
46 static void GLAPIENTRY
TAG(Vertex2fv
)( const GLfloat
*v
)
48 GET_CURRENT_CONTEXT( ctx
);
49 ATTR2FV( BRW_ATTRIB_POS
, v
);
52 static void GLAPIENTRY
TAG(Vertex3f
)( GLfloat x
, GLfloat y
, GLfloat z
)
54 GET_CURRENT_CONTEXT( ctx
);
55 ATTR3F( BRW_ATTRIB_POS
, x
, y
, z
);
58 static void GLAPIENTRY
TAG(Vertex3fv
)( const GLfloat
*v
)
60 GET_CURRENT_CONTEXT( ctx
);
61 ATTR3FV( BRW_ATTRIB_POS
, v
);
64 static void GLAPIENTRY
TAG(Vertex4f
)( GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
66 GET_CURRENT_CONTEXT( ctx
);
67 ATTR4F( BRW_ATTRIB_POS
, x
, y
, z
, w
);
70 static void GLAPIENTRY
TAG(Vertex4fv
)( const GLfloat
*v
)
72 GET_CURRENT_CONTEXT( ctx
);
73 ATTR4FV( BRW_ATTRIB_POS
, v
);
76 static void GLAPIENTRY
TAG(TexCoord1f
)( GLfloat x
)
78 GET_CURRENT_CONTEXT( ctx
);
79 ATTR1F( BRW_ATTRIB_TEX0
, x
);
82 static void GLAPIENTRY
TAG(TexCoord1fv
)( const GLfloat
*v
)
84 GET_CURRENT_CONTEXT( ctx
);
85 ATTR1FV( BRW_ATTRIB_TEX0
, v
);
88 static void GLAPIENTRY
TAG(TexCoord2f
)( GLfloat x
, GLfloat y
)
90 GET_CURRENT_CONTEXT( ctx
);
91 ATTR2F( BRW_ATTRIB_TEX0
, x
, y
);
94 static void GLAPIENTRY
TAG(TexCoord2fv
)( const GLfloat
*v
)
96 GET_CURRENT_CONTEXT( ctx
);
97 ATTR2FV( BRW_ATTRIB_TEX0
, v
);
100 static void GLAPIENTRY
TAG(TexCoord3f
)( GLfloat x
, GLfloat y
, GLfloat z
)
102 GET_CURRENT_CONTEXT( ctx
);
103 ATTR3F( BRW_ATTRIB_TEX0
, x
, y
, z
);
106 static void GLAPIENTRY
TAG(TexCoord3fv
)( const GLfloat
*v
)
108 GET_CURRENT_CONTEXT( ctx
);
109 ATTR3FV( BRW_ATTRIB_TEX0
, v
);
112 static void GLAPIENTRY
TAG(TexCoord4f
)( GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
114 GET_CURRENT_CONTEXT( ctx
);
115 ATTR4F( BRW_ATTRIB_TEX0
, x
, y
, z
, w
);
118 static void GLAPIENTRY
TAG(TexCoord4fv
)( const GLfloat
*v
)
120 GET_CURRENT_CONTEXT( ctx
);
121 ATTR4FV( BRW_ATTRIB_TEX0
, v
);
124 static void GLAPIENTRY
TAG(Normal3f
)( GLfloat x
, GLfloat y
, GLfloat z
)
126 GET_CURRENT_CONTEXT( ctx
);
127 ATTR3F( BRW_ATTRIB_NORMAL
, x
, y
, z
);
130 static void GLAPIENTRY
TAG(Normal3fv
)( const GLfloat
*v
)
132 GET_CURRENT_CONTEXT( ctx
);
133 ATTR3FV( BRW_ATTRIB_NORMAL
, v
);
136 static void GLAPIENTRY
TAG(FogCoordfEXT
)( GLfloat x
)
138 GET_CURRENT_CONTEXT( ctx
);
139 ATTR1F( BRW_ATTRIB_FOG
, x
);
142 static void GLAPIENTRY
TAG(FogCoordfvEXT
)( const GLfloat
*v
)
144 GET_CURRENT_CONTEXT( ctx
);
145 ATTR1FV( BRW_ATTRIB_FOG
, v
);
148 static void GLAPIENTRY
TAG(Color3f
)( GLfloat x
, GLfloat y
, GLfloat z
)
150 GET_CURRENT_CONTEXT( ctx
);
151 ATTR3F( BRW_ATTRIB_COLOR0
, x
, y
, z
);
154 static void GLAPIENTRY
TAG(Color3fv
)( const GLfloat
*v
)
156 GET_CURRENT_CONTEXT( ctx
);
157 ATTR3FV( BRW_ATTRIB_COLOR0
, v
);
160 static void GLAPIENTRY
TAG(Color4f
)( GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
162 GET_CURRENT_CONTEXT( ctx
);
163 ATTR4F( BRW_ATTRIB_COLOR0
, x
, y
, z
, w
);
166 static void GLAPIENTRY
TAG(Color4fv
)( const GLfloat
*v
)
168 GET_CURRENT_CONTEXT( ctx
);
169 ATTR4FV( BRW_ATTRIB_COLOR0
, v
);
172 static void GLAPIENTRY
TAG(SecondaryColor3fEXT
)( GLfloat x
, GLfloat y
, GLfloat z
)
174 GET_CURRENT_CONTEXT( ctx
);
175 ATTR3F( BRW_ATTRIB_COLOR1
, x
, y
, z
);
178 static void GLAPIENTRY
TAG(SecondaryColor3fvEXT
)( const GLfloat
*v
)
180 GET_CURRENT_CONTEXT( ctx
);
181 ATTR3FV( BRW_ATTRIB_COLOR1
, v
);
185 static void GLAPIENTRY
TAG(EdgeFlag
)( GLboolean b
)
187 GET_CURRENT_CONTEXT( ctx
);
188 ATTR1F( BRW_ATTRIB_EDGEFLAG
, (GLfloat
)b
);
191 static void GLAPIENTRY
TAG(Indexf
)( GLfloat f
)
193 GET_CURRENT_CONTEXT( ctx
);
194 ATTR1F( BRW_ATTRIB_INDEX
, f
);
197 static void GLAPIENTRY
TAG(Indexfv
)( const GLfloat
*f
)
199 GET_CURRENT_CONTEXT( ctx
);
200 ATTR1FV( BRW_ATTRIB_INDEX
, f
);
204 static void GLAPIENTRY
TAG(MultiTexCoord1f
)( GLenum target
, GLfloat x
)
206 GET_CURRENT_CONTEXT( ctx
);
207 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
211 static void GLAPIENTRY
TAG(MultiTexCoord1fv
)( GLenum target
, const GLfloat
*v
)
213 GET_CURRENT_CONTEXT( ctx
);
214 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
218 static void GLAPIENTRY
TAG(MultiTexCoord2f
)( GLenum target
, GLfloat x
, GLfloat y
)
220 GET_CURRENT_CONTEXT( ctx
);
221 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
222 ATTR2F( attr
, x
, y
);
225 static void GLAPIENTRY
TAG(MultiTexCoord2fv
)( GLenum target
, const GLfloat
*v
)
227 GET_CURRENT_CONTEXT( ctx
);
228 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
232 static void GLAPIENTRY
TAG(MultiTexCoord3f
)( GLenum target
, GLfloat x
, GLfloat y
,
235 GET_CURRENT_CONTEXT( ctx
);
236 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
237 ATTR3F( attr
, x
, y
, z
);
240 static void GLAPIENTRY
TAG(MultiTexCoord3fv
)( GLenum target
, const GLfloat
*v
)
242 GET_CURRENT_CONTEXT( ctx
);
243 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
247 static void GLAPIENTRY
TAG(MultiTexCoord4f
)( GLenum target
, GLfloat x
, GLfloat y
,
248 GLfloat z
, GLfloat w
)
250 GET_CURRENT_CONTEXT( ctx
);
251 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
252 ATTR4F( attr
, x
, y
, z
, w
);
255 static void GLAPIENTRY
TAG(MultiTexCoord4fv
)( GLenum target
, const GLfloat
*v
)
257 GET_CURRENT_CONTEXT( ctx
);
258 GLuint attr
= (target
& 0x7) + BRW_ATTRIB_TEX0
;
263 static void GLAPIENTRY
TAG(VertexAttrib1fARB
)( GLuint index
, GLfloat x
)
265 GET_CURRENT_CONTEXT( ctx
);
268 else if (index
< MAX_VERTEX_ATTRIBS
)
269 ATTR1F(BRW_ATTRIB_GENERIC0
+ index
, x
);
274 static void GLAPIENTRY
TAG(VertexAttrib1fvARB
)( GLuint index
,
277 GET_CURRENT_CONTEXT( ctx
);
280 else if (index
< MAX_VERTEX_ATTRIBS
)
281 ATTR1FV(BRW_ATTRIB_GENERIC0
+ index
, v
);
286 static void GLAPIENTRY
TAG(VertexAttrib2fARB
)( GLuint index
, GLfloat x
,
289 GET_CURRENT_CONTEXT( ctx
);
292 else if (index
< MAX_VERTEX_ATTRIBS
)
293 ATTR2F(BRW_ATTRIB_GENERIC0
+ index
, x
, y
);
298 static void GLAPIENTRY
TAG(VertexAttrib2fvARB
)( GLuint index
,
301 GET_CURRENT_CONTEXT( ctx
);
304 else if (index
< MAX_VERTEX_ATTRIBS
)
305 ATTR2FV(BRW_ATTRIB_GENERIC0
+ index
, v
);
310 static void GLAPIENTRY
TAG(VertexAttrib3fARB
)( GLuint index
, GLfloat x
,
311 GLfloat y
, GLfloat z
)
313 GET_CURRENT_CONTEXT( ctx
);
316 else if (index
< MAX_VERTEX_ATTRIBS
)
317 ATTR3F(BRW_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
322 static void GLAPIENTRY
TAG(VertexAttrib3fvARB
)( GLuint index
,
325 GET_CURRENT_CONTEXT( ctx
);
328 else if (index
< MAX_VERTEX_ATTRIBS
)
329 ATTR3FV(BRW_ATTRIB_GENERIC0
+ index
, v
);
334 static void GLAPIENTRY
TAG(VertexAttrib4fARB
)( GLuint index
, GLfloat x
,
335 GLfloat y
, GLfloat z
,
338 GET_CURRENT_CONTEXT( ctx
);
340 ATTR4F(0, x
, y
, z
, w
);
341 else if (index
< MAX_VERTEX_ATTRIBS
)
342 ATTR4F(BRW_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
347 static void GLAPIENTRY
TAG(VertexAttrib4fvARB
)( GLuint index
,
350 GET_CURRENT_CONTEXT( ctx
);
353 else if (index
< MAX_VERTEX_ATTRIBS
)
354 ATTR4FV(BRW_ATTRIB_GENERIC0
+ index
, v
);
360 /* Although we don't export NV_vertex_program, these entrypoints are
361 * used by the display list and other code specifically because of
362 * their property of aliasing with other attributes.
364 static void GLAPIENTRY
TAG(VertexAttrib1fNV
)( GLuint index
, GLfloat x
)
366 GET_CURRENT_CONTEXT( ctx
);
367 if (index
< BRW_ATTRIB_MAX
)
371 static void GLAPIENTRY
TAG(VertexAttrib1fvNV
)( GLuint index
,
374 GET_CURRENT_CONTEXT( ctx
);
375 if (index
< BRW_ATTRIB_MAX
)
379 static void GLAPIENTRY
TAG(VertexAttrib2fNV
)( GLuint index
, GLfloat x
,
382 GET_CURRENT_CONTEXT( ctx
);
383 if (index
< BRW_ATTRIB_MAX
)
387 static void GLAPIENTRY
TAG(VertexAttrib2fvNV
)( GLuint index
,
390 GET_CURRENT_CONTEXT( ctx
);
391 if (index
< BRW_ATTRIB_MAX
)
395 static void GLAPIENTRY
TAG(VertexAttrib3fNV
)( GLuint index
, GLfloat x
,
396 GLfloat y
, GLfloat z
)
398 GET_CURRENT_CONTEXT( ctx
);
399 if (index
< BRW_ATTRIB_MAX
)
400 ATTR3F(index
, x
, y
, z
);
403 static void GLAPIENTRY
TAG(VertexAttrib3fvNV
)( GLuint index
,
406 GET_CURRENT_CONTEXT( ctx
);
407 if (index
< BRW_ATTRIB_MAX
)
411 static void GLAPIENTRY
TAG(VertexAttrib4fNV
)( GLuint index
, GLfloat x
,
412 GLfloat y
, GLfloat z
,
415 GET_CURRENT_CONTEXT( ctx
);
416 if (index
< BRW_ATTRIB_MAX
)
417 ATTR4F(index
, x
, y
, z
, w
);
420 static void GLAPIENTRY
TAG(VertexAttrib4fvNV
)( GLuint index
,
423 GET_CURRENT_CONTEXT( ctx
);
424 if (index
< BRW_ATTRIB_MAX
)
429 #define MAT( ATTR, N, face, params ) \
431 if (face != GL_BACK) \
432 MAT_ATTR( ATTR, N, params ); /* front */ \
433 if (face != GL_FRONT) \
434 MAT_ATTR( ATTR + 1, N, params ); /* back */ \
438 /* Colormaterial conflicts are dealt with later.
440 static void GLAPIENTRY
TAG(Materialfv
)( GLenum face
, GLenum pname
,
441 const GLfloat
*params
)
443 GET_CURRENT_CONTEXT( ctx
);
446 MAT( BRW_ATTRIB_MAT_FRONT_EMISSION
, 4, face
, params
);
449 MAT( BRW_ATTRIB_MAT_FRONT_AMBIENT
, 4, face
, params
);
452 MAT( BRW_ATTRIB_MAT_FRONT_DIFFUSE
, 4, face
, params
);
455 MAT( BRW_ATTRIB_MAT_FRONT_SPECULAR
, 4, face
, params
);
458 MAT( BRW_ATTRIB_MAT_FRONT_SHININESS
, 1, face
, params
);
460 case GL_COLOR_INDEXES
:
461 MAT( BRW_ATTRIB_MAT_FRONT_INDEXES
, 3, face
, params
);
463 case GL_AMBIENT_AND_DIFFUSE
:
464 MAT( BRW_ATTRIB_MAT_FRONT_AMBIENT
, 4, face
, params
);
465 MAT( BRW_ATTRIB_MAT_FRONT_DIFFUSE
, 4, face
, params
);