1 /**************************************************************************
3 Copyright 2002 VMware, Inc.
4 Copyright 2011 Dave Airlie (ARB_vertex_type_2_10_10_10_rev support)
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 VMWARE 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 #include "util/format_r11g11b10f.h"
29 #include "main/varray.h"
31 #include "util/u_half.h"
35 #define ATTRI( A, N, V0, V1, V2, V3 ) \
36 ATTR_UNION(A, N, GL_INT, uint32_t, INT_AS_UINT(V0), INT_AS_UINT(V1), \
37 INT_AS_UINT(V2), INT_AS_UINT(V3))
38 #define ATTRUI( A, N, V0, V1, V2, V3 ) \
39 ATTR_UNION(A, N, GL_UNSIGNED_INT, uint32_t, (uint32_t)(V0), (uint32_t)(V1), \
40 (uint32_t)(V2), (uint32_t)(V3))
41 #define ATTRF( A, N, V0, V1, V2, V3 ) \
42 ATTR_UNION(A, N, GL_FLOAT, uint32_t, FLOAT_AS_UINT(V0), FLOAT_AS_UINT(V1),\
43 FLOAT_AS_UINT(V2), FLOAT_AS_UINT(V3))
44 #define ATTRD( A, N, V0, V1, V2, V3 ) \
45 ATTR_UNION(A, N, GL_DOUBLE, uint64_t, DOUBLE_AS_UINT64(V0), \
46 DOUBLE_AS_UINT64(V1), DOUBLE_AS_UINT64(V2), DOUBLE_AS_UINT64(V3))
47 #define ATTRUI64( A, N, V0, V1, V2, V3 ) \
48 ATTR_UNION(A, N, GL_UNSIGNED_INT64_ARB, uint64_t, V0, V1, V2, V3)
52 #define ATTR1FV( A, V ) ATTRF( A, 1, (V)[0], 0, 0, 1 )
53 #define ATTR2FV( A, V ) ATTRF( A, 2, (V)[0], (V)[1], 0, 1 )
54 #define ATTR3FV( A, V ) ATTRF( A, 3, (V)[0], (V)[1], (V)[2], 1 )
55 #define ATTR4FV( A, V ) ATTRF( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
57 #define ATTR1F( A, X ) ATTRF( A, 1, X, 0, 0, 1 )
58 #define ATTR2F( A, X, Y ) ATTRF( A, 2, X, Y, 0, 1 )
59 #define ATTR3F( A, X, Y, Z ) ATTRF( A, 3, X, Y, Z, 1 )
60 #define ATTR4F( A, X, Y, Z, W ) ATTRF( A, 4, X, Y, Z, W )
64 #define ATTR1HV( A, V ) ATTRF( A, 1, util_half_to_float((uint16_t)(V)[0]), \
66 #define ATTR2HV( A, V ) ATTRF( A, 2, util_half_to_float((uint16_t)(V)[0]), \
67 util_half_to_float((uint16_t)(V)[1]), 0, 1 )
68 #define ATTR3HV( A, V ) ATTRF( A, 3, util_half_to_float((uint16_t)(V)[0]), \
69 util_half_to_float((uint16_t)(V)[1]), \
70 util_half_to_float((uint16_t)(V)[2]), 1 )
71 #define ATTR4HV( A, V ) ATTRF( A, 4, util_half_to_float((uint16_t)(V)[0]), \
72 util_half_to_float((uint16_t)(V)[1]), \
73 util_half_to_float((uint16_t)(V)[2]), \
74 util_half_to_float((uint16_t)(V)[3]) )
76 #define ATTR1H( A, X ) ATTRF( A, 1, util_half_to_float(X), 0, 0, 1 )
77 #define ATTR2H( A, X, Y ) ATTRF( A, 2, util_half_to_float(X), \
78 util_half_to_float(Y), 0, 1 )
79 #define ATTR3H( A, X, Y, Z ) ATTRF( A, 3, util_half_to_float(X), \
80 util_half_to_float(Y), \
81 util_half_to_float(Z), 1 )
82 #define ATTR4H( A, X, Y, Z, W ) ATTRF( A, 4, util_half_to_float(X), \
83 util_half_to_float(Y), \
84 util_half_to_float(Z), \
85 util_half_to_float(W) )
89 #define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 )
90 #define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
91 #define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
93 #define ATTR1I( A, X ) ATTRI( A, 1, X, 0, 0, 1 )
94 #define ATTR2I( A, X, Y ) ATTRI( A, 2, X, Y, 0, 1 )
95 #define ATTR3I( A, X, Y, Z ) ATTRI( A, 3, X, Y, Z, 1 )
96 #define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W )
100 #define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 )
101 #define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
102 #define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
104 #define ATTR1UI( A, X ) ATTRUI( A, 1, X, 0, 0, 1 )
105 #define ATTR2UI( A, X, Y ) ATTRUI( A, 2, X, Y, 0, 1 )
106 #define ATTR3UI( A, X, Y, Z ) ATTRUI( A, 3, X, Y, Z, 1 )
107 #define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W )
109 #define MAT_ATTR( A, N, V ) ATTRF( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
111 #define ATTRUI10_1( A, UI ) ATTRF( A, 1, (UI) & 0x3ff, 0, 0, 1 )
112 #define ATTRUI10_2( A, UI ) ATTRF( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
113 #define ATTRUI10_3( A, UI ) ATTRF( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
114 #define ATTRUI10_4( A, UI ) ATTRF( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
116 #define ATTRUI10N_1( A, UI ) ATTRF( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
117 #define ATTRUI10N_2( A, UI ) ATTRF( A, 2, \
118 conv_ui10_to_norm_float((UI) & 0x3ff), \
119 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 )
120 #define ATTRUI10N_3( A, UI ) ATTRF( A, 3, \
121 conv_ui10_to_norm_float((UI) & 0x3ff), \
122 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
123 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 )
124 #define ATTRUI10N_4( A, UI ) ATTRF( A, 4, \
125 conv_ui10_to_norm_float((UI) & 0x3ff), \
126 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
127 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \
128 conv_ui2_to_norm_float(((UI) >> 30) & 0x3) )
130 #define ATTRI10_1( A, I10 ) ATTRF( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
131 #define ATTRI10_2( A, I10 ) ATTRF( A, 2, \
132 conv_i10_to_i((I10) & 0x3ff), \
133 conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 )
134 #define ATTRI10_3( A, I10 ) ATTRF( A, 3, \
135 conv_i10_to_i((I10) & 0x3ff), \
136 conv_i10_to_i(((I10) >> 10) & 0x3ff), \
137 conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 )
138 #define ATTRI10_4( A, I10 ) ATTRF( A, 4, \
139 conv_i10_to_i((I10) & 0x3ff), \
140 conv_i10_to_i(((I10) >> 10) & 0x3ff), \
141 conv_i10_to_i(((I10) >> 20) & 0x3ff), \
142 conv_i2_to_i(((I10) >> 30) & 0x3))
145 #define ATTRI10N_1(ctx, A, I10) ATTRF(A, 1, conv_i10_to_norm_float(ctx, (I10) & 0x3ff), 0, 0, 1 )
146 #define ATTRI10N_2(ctx, A, I10) ATTRF(A, 2, \
147 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
148 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), 0, 1 )
149 #define ATTRI10N_3(ctx, A, I10) ATTRF(A, 3, \
150 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
151 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \
152 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), 1 )
153 #define ATTRI10N_4(ctx, A, I10) ATTRF(A, 4, \
154 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
155 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \
156 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), \
157 conv_i2_to_norm_float(ctx, ((I10) >> 30) & 0x3))
159 #define ATTR_UI(ctx, val, type, normalized, attr, arg) do { \
160 if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) { \
162 ATTRUI10N_##val((attr), (arg)); \
164 ATTRUI10_##val((attr), (arg)); \
166 } else if ((type) == GL_INT_2_10_10_10_REV) { \
168 ATTRI10N_##val(ctx, (attr), (arg)); \
170 ATTRI10_##val((attr), (arg)); \
172 } else if ((type) == GL_UNSIGNED_INT_10F_11F_11F_REV) { \
175 r11g11b10f_to_float3((arg), res); \
176 ATTR##val##FV((attr), res); \
178 ERROR(GL_INVALID_VALUE); \
181 #define ATTR_UI_INDEX(ctx, val, type, normalized, index, arg) do { \
182 if ((index) == 0 && _mesa_attr_zero_aliases_vertex(ctx)) { \
183 ATTR_UI(ctx, val, (type), normalized, 0, (arg)); \
184 } else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) { \
185 ATTR_UI(ctx, val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \
187 ERROR(GL_INVALID_VALUE); \
192 #define ATTR1DV( A, V ) ATTRD( A, 1, (V)[0], 0, 0, 1 )
193 #define ATTR2DV( A, V ) ATTRD( A, 2, (V)[0], (V)[1], 0, 1 )
194 #define ATTR3DV( A, V ) ATTRD( A, 3, (V)[0], (V)[1], (V)[2], 1 )
195 #define ATTR4DV( A, V ) ATTRD( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
197 #define ATTR1D( A, X ) ATTRD( A, 1, X, 0, 0, 1 )
198 #define ATTR2D( A, X, Y ) ATTRD( A, 2, X, Y, 0, 1 )
199 #define ATTR3D( A, X, Y, Z ) ATTRD( A, 3, X, Y, Z, 1 )
200 #define ATTR4D( A, X, Y, Z, W ) ATTRD( A, 4, X, Y, Z, W )
202 #define ATTR1UIV64( A, V ) ATTRUI64( A, 1, (V)[0], 0, 0, 0 )
203 #define ATTR1UI64( A, X ) ATTRUI64( A, 1, X, 0, 0, 0 )
206 static void GLAPIENTRY
207 TAG(Vertex2f
)(GLfloat x
, GLfloat y
)
209 GET_CURRENT_CONTEXT(ctx
);
210 ATTR2F(VBO_ATTRIB_POS
, x
, y
);
213 static void GLAPIENTRY
214 TAG(Vertex2fv
)(const GLfloat
* v
)
216 GET_CURRENT_CONTEXT(ctx
);
217 ATTR2FV(VBO_ATTRIB_POS
, v
);
220 static void GLAPIENTRY
221 TAG(Vertex3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
223 GET_CURRENT_CONTEXT(ctx
);
224 ATTR3F(VBO_ATTRIB_POS
, x
, y
, z
);
227 static void GLAPIENTRY
228 TAG(Vertex3fv
)(const GLfloat
* v
)
230 GET_CURRENT_CONTEXT(ctx
);
231 ATTR3FV(VBO_ATTRIB_POS
, v
);
234 static void GLAPIENTRY
235 TAG(Vertex4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
237 GET_CURRENT_CONTEXT(ctx
);
238 ATTR4F(VBO_ATTRIB_POS
, x
, y
, z
, w
);
241 static void GLAPIENTRY
242 TAG(Vertex4fv
)(const GLfloat
* v
)
244 GET_CURRENT_CONTEXT(ctx
);
245 ATTR4FV(VBO_ATTRIB_POS
, v
);
250 static void GLAPIENTRY
251 TAG(TexCoord1f
)(GLfloat x
)
253 GET_CURRENT_CONTEXT(ctx
);
254 ATTR1F(VBO_ATTRIB_TEX0
, x
);
257 static void GLAPIENTRY
258 TAG(TexCoord1fv
)(const GLfloat
* v
)
260 GET_CURRENT_CONTEXT(ctx
);
261 ATTR1FV(VBO_ATTRIB_TEX0
, v
);
264 static void GLAPIENTRY
265 TAG(TexCoord2f
)(GLfloat x
, GLfloat y
)
267 GET_CURRENT_CONTEXT(ctx
);
268 ATTR2F(VBO_ATTRIB_TEX0
, x
, y
);
271 static void GLAPIENTRY
272 TAG(TexCoord2fv
)(const GLfloat
* v
)
274 GET_CURRENT_CONTEXT(ctx
);
275 ATTR2FV(VBO_ATTRIB_TEX0
, v
);
278 static void GLAPIENTRY
279 TAG(TexCoord3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
281 GET_CURRENT_CONTEXT(ctx
);
282 ATTR3F(VBO_ATTRIB_TEX0
, x
, y
, z
);
285 static void GLAPIENTRY
286 TAG(TexCoord3fv
)(const GLfloat
* v
)
288 GET_CURRENT_CONTEXT(ctx
);
289 ATTR3FV(VBO_ATTRIB_TEX0
, v
);
292 static void GLAPIENTRY
293 TAG(TexCoord4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
295 GET_CURRENT_CONTEXT(ctx
);
296 ATTR4F(VBO_ATTRIB_TEX0
, x
, y
, z
, w
);
299 static void GLAPIENTRY
300 TAG(TexCoord4fv
)(const GLfloat
* v
)
302 GET_CURRENT_CONTEXT(ctx
);
303 ATTR4FV(VBO_ATTRIB_TEX0
, v
);
308 static void GLAPIENTRY
309 TAG(Normal3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
311 GET_CURRENT_CONTEXT(ctx
);
312 ATTR3F(VBO_ATTRIB_NORMAL
, x
, y
, z
);
315 static void GLAPIENTRY
316 TAG(Normal3fv
)(const GLfloat
* v
)
318 GET_CURRENT_CONTEXT(ctx
);
319 ATTR3FV(VBO_ATTRIB_NORMAL
, v
);
324 static void GLAPIENTRY
325 TAG(FogCoordfEXT
)(GLfloat x
)
327 GET_CURRENT_CONTEXT(ctx
);
328 ATTR1F(VBO_ATTRIB_FOG
, x
);
333 static void GLAPIENTRY
334 TAG(FogCoordfvEXT
)(const GLfloat
* v
)
336 GET_CURRENT_CONTEXT(ctx
);
337 ATTR1FV(VBO_ATTRIB_FOG
, v
);
340 static void GLAPIENTRY
341 TAG(Color3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
343 GET_CURRENT_CONTEXT(ctx
);
344 ATTR3F(VBO_ATTRIB_COLOR0
, x
, y
, z
);
347 static void GLAPIENTRY
348 TAG(Color3fv
)(const GLfloat
* v
)
350 GET_CURRENT_CONTEXT(ctx
);
351 ATTR3FV(VBO_ATTRIB_COLOR0
, v
);
354 static void GLAPIENTRY
355 TAG(Color4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
357 GET_CURRENT_CONTEXT(ctx
);
358 ATTR4F(VBO_ATTRIB_COLOR0
, x
, y
, z
, w
);
361 static void GLAPIENTRY
362 TAG(Color4fv
)(const GLfloat
* v
)
364 GET_CURRENT_CONTEXT(ctx
);
365 ATTR4FV(VBO_ATTRIB_COLOR0
, v
);
370 static void GLAPIENTRY
371 TAG(SecondaryColor3fEXT
)(GLfloat x
, GLfloat y
, GLfloat z
)
373 GET_CURRENT_CONTEXT(ctx
);
374 ATTR3F(VBO_ATTRIB_COLOR1
, x
, y
, z
);
377 static void GLAPIENTRY
378 TAG(SecondaryColor3fvEXT
)(const GLfloat
* v
)
380 GET_CURRENT_CONTEXT(ctx
);
381 ATTR3FV(VBO_ATTRIB_COLOR1
, v
);
386 static void GLAPIENTRY
387 TAG(EdgeFlag
)(GLboolean b
)
389 GET_CURRENT_CONTEXT(ctx
);
390 ATTR1F(VBO_ATTRIB_EDGEFLAG
, (GLfloat
) b
);
395 static void GLAPIENTRY
396 TAG(Indexf
)(GLfloat f
)
398 GET_CURRENT_CONTEXT(ctx
);
399 ATTR1F(VBO_ATTRIB_COLOR_INDEX
, f
);
402 static void GLAPIENTRY
403 TAG(Indexfv
)(const GLfloat
* f
)
405 GET_CURRENT_CONTEXT(ctx
);
406 ATTR1FV(VBO_ATTRIB_COLOR_INDEX
, f
);
411 static void GLAPIENTRY
412 TAG(MultiTexCoord1f
)(GLenum target
, GLfloat x
)
414 GET_CURRENT_CONTEXT(ctx
);
415 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
419 static void GLAPIENTRY
420 TAG(MultiTexCoord1fv
)(GLenum target
, const GLfloat
* v
)
422 GET_CURRENT_CONTEXT(ctx
);
423 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
427 static void GLAPIENTRY
428 TAG(MultiTexCoord2f
)(GLenum target
, GLfloat x
, GLfloat y
)
430 GET_CURRENT_CONTEXT(ctx
);
431 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
435 static void GLAPIENTRY
436 TAG(MultiTexCoord2fv
)(GLenum target
, const GLfloat
* v
)
438 GET_CURRENT_CONTEXT(ctx
);
439 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
443 static void GLAPIENTRY
444 TAG(MultiTexCoord3f
)(GLenum target
, GLfloat x
, GLfloat y
, GLfloat z
)
446 GET_CURRENT_CONTEXT(ctx
);
447 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
448 ATTR3F(attr
, x
, y
, z
);
451 static void GLAPIENTRY
452 TAG(MultiTexCoord3fv
)(GLenum target
, const GLfloat
* v
)
454 GET_CURRENT_CONTEXT(ctx
);
455 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
459 static void GLAPIENTRY
460 TAG(MultiTexCoord4f
)(GLenum target
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
462 GET_CURRENT_CONTEXT(ctx
);
463 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
464 ATTR4F(attr
, x
, y
, z
, w
);
467 static void GLAPIENTRY
468 TAG(MultiTexCoord4fv
)(GLenum target
, const GLfloat
* v
)
470 GET_CURRENT_CONTEXT(ctx
);
471 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
476 static void GLAPIENTRY
477 TAG(VertexAttrib1fARB
)(GLuint index
, GLfloat x
)
479 GET_CURRENT_CONTEXT(ctx
);
480 if (is_vertex_position(ctx
, index
))
482 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
483 ATTR1F(VBO_ATTRIB_GENERIC0
+ index
, x
);
485 ERROR(GL_INVALID_VALUE
);
488 static void GLAPIENTRY
489 TAG(VertexAttrib1fvARB
)(GLuint index
, const GLfloat
* v
)
491 GET_CURRENT_CONTEXT(ctx
);
492 if (is_vertex_position(ctx
, index
))
494 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
495 ATTR1FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
497 ERROR(GL_INVALID_VALUE
);
500 static void GLAPIENTRY
501 TAG(VertexAttrib2fARB
)(GLuint index
, GLfloat x
, GLfloat y
)
503 GET_CURRENT_CONTEXT(ctx
);
504 if (is_vertex_position(ctx
, index
))
506 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
507 ATTR2F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
509 ERROR(GL_INVALID_VALUE
);
512 static void GLAPIENTRY
513 TAG(VertexAttrib2fvARB
)(GLuint index
, const GLfloat
* v
)
515 GET_CURRENT_CONTEXT(ctx
);
516 if (is_vertex_position(ctx
, index
))
518 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
519 ATTR2FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
521 ERROR(GL_INVALID_VALUE
);
524 static void GLAPIENTRY
525 TAG(VertexAttrib3fARB
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
)
527 GET_CURRENT_CONTEXT(ctx
);
528 if (is_vertex_position(ctx
, index
))
530 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
531 ATTR3F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
533 ERROR(GL_INVALID_VALUE
);
536 static void GLAPIENTRY
537 TAG(VertexAttrib3fvARB
)(GLuint index
, const GLfloat
* v
)
539 GET_CURRENT_CONTEXT(ctx
);
540 if (is_vertex_position(ctx
, index
))
542 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
543 ATTR3FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
545 ERROR(GL_INVALID_VALUE
);
548 static void GLAPIENTRY
549 TAG(VertexAttrib4fARB
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
551 GET_CURRENT_CONTEXT(ctx
);
552 if (is_vertex_position(ctx
, index
))
553 ATTR4F(0, x
, y
, z
, w
);
554 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
555 ATTR4F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
557 ERROR(GL_INVALID_VALUE
);
560 static void GLAPIENTRY
561 TAG(VertexAttrib4fvARB
)(GLuint index
, const GLfloat
* v
)
563 GET_CURRENT_CONTEXT(ctx
);
564 if (is_vertex_position(ctx
, index
))
566 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
567 ATTR4FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
569 ERROR(GL_INVALID_VALUE
);
574 /* Integer-valued generic attributes.
575 * XXX: the integers just get converted to floats at this time
577 static void GLAPIENTRY
578 TAG(VertexAttribI1i
)(GLuint index
, GLint x
)
580 GET_CURRENT_CONTEXT(ctx
);
581 if (is_vertex_position(ctx
, index
))
583 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
584 ATTR1I(VBO_ATTRIB_GENERIC0
+ index
, x
);
586 ERROR(GL_INVALID_VALUE
);
589 static void GLAPIENTRY
590 TAG(VertexAttribI2i
)(GLuint index
, GLint x
, GLint y
)
592 GET_CURRENT_CONTEXT(ctx
);
593 if (is_vertex_position(ctx
, index
))
595 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
596 ATTR2I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
598 ERROR(GL_INVALID_VALUE
);
601 static void GLAPIENTRY
602 TAG(VertexAttribI3i
)(GLuint index
, GLint x
, GLint y
, GLint z
)
604 GET_CURRENT_CONTEXT(ctx
);
605 if (is_vertex_position(ctx
, index
))
607 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
608 ATTR3I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
610 ERROR(GL_INVALID_VALUE
);
613 static void GLAPIENTRY
614 TAG(VertexAttribI4i
)(GLuint index
, GLint x
, GLint y
, GLint z
, GLint w
)
616 GET_CURRENT_CONTEXT(ctx
);
617 if (is_vertex_position(ctx
, index
))
618 ATTR4I(0, x
, y
, z
, w
);
619 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
620 ATTR4I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
622 ERROR(GL_INVALID_VALUE
);
625 static void GLAPIENTRY
626 TAG(VertexAttribI2iv
)(GLuint index
, const GLint
*v
)
628 GET_CURRENT_CONTEXT(ctx
);
629 if (is_vertex_position(ctx
, index
))
631 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
632 ATTR2IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
634 ERROR(GL_INVALID_VALUE
);
637 static void GLAPIENTRY
638 TAG(VertexAttribI3iv
)(GLuint index
, const GLint
*v
)
640 GET_CURRENT_CONTEXT(ctx
);
641 if (is_vertex_position(ctx
, index
))
643 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
644 ATTR3IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
646 ERROR(GL_INVALID_VALUE
);
649 static void GLAPIENTRY
650 TAG(VertexAttribI4iv
)(GLuint index
, const GLint
*v
)
652 GET_CURRENT_CONTEXT(ctx
);
653 if (is_vertex_position(ctx
, index
))
655 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
656 ATTR4IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
658 ERROR(GL_INVALID_VALUE
);
663 /* Unsigned integer-valued generic attributes.
664 * XXX: the integers just get converted to floats at this time
666 static void GLAPIENTRY
667 TAG(VertexAttribI1ui
)(GLuint index
, GLuint x
)
669 GET_CURRENT_CONTEXT(ctx
);
670 if (is_vertex_position(ctx
, index
))
672 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
673 ATTR1UI(VBO_ATTRIB_GENERIC0
+ index
, x
);
675 ERROR(GL_INVALID_VALUE
);
678 static void GLAPIENTRY
679 TAG(VertexAttribI2ui
)(GLuint index
, GLuint x
, GLuint y
)
681 GET_CURRENT_CONTEXT(ctx
);
682 if (is_vertex_position(ctx
, index
))
684 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
685 ATTR2UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
687 ERROR(GL_INVALID_VALUE
);
690 static void GLAPIENTRY
691 TAG(VertexAttribI3ui
)(GLuint index
, GLuint x
, GLuint y
, GLuint z
)
693 GET_CURRENT_CONTEXT(ctx
);
694 if (is_vertex_position(ctx
, index
))
696 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
697 ATTR3UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
699 ERROR(GL_INVALID_VALUE
);
702 static void GLAPIENTRY
703 TAG(VertexAttribI4ui
)(GLuint index
, GLuint x
, GLuint y
, GLuint z
, GLuint w
)
705 GET_CURRENT_CONTEXT(ctx
);
706 if (is_vertex_position(ctx
, index
))
707 ATTR4UI(0, x
, y
, z
, w
);
708 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
709 ATTR4UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
711 ERROR(GL_INVALID_VALUE
);
714 static void GLAPIENTRY
715 TAG(VertexAttribI2uiv
)(GLuint index
, const GLuint
*v
)
717 GET_CURRENT_CONTEXT(ctx
);
718 if (is_vertex_position(ctx
, index
))
720 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
721 ATTR2UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
723 ERROR(GL_INVALID_VALUE
);
726 static void GLAPIENTRY
727 TAG(VertexAttribI3uiv
)(GLuint index
, const GLuint
*v
)
729 GET_CURRENT_CONTEXT(ctx
);
730 if (is_vertex_position(ctx
, index
))
732 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
733 ATTR3UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
735 ERROR(GL_INVALID_VALUE
);
738 static void GLAPIENTRY
739 TAG(VertexAttribI4uiv
)(GLuint index
, const GLuint
*v
)
741 GET_CURRENT_CONTEXT(ctx
);
742 if (is_vertex_position(ctx
, index
))
744 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
745 ATTR4UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
747 ERROR(GL_INVALID_VALUE
);
752 /* These entrypoints are no longer used for NV_vertex_program but they are
753 * used by the display list and other code specifically because of their
754 * property of aliasing with the legacy Vertex, TexCoord, Normal, etc
755 * attributes. (See vbo_save_loopback.c)
757 static void GLAPIENTRY
758 TAG(VertexAttrib1fNV
)(GLuint index
, GLfloat x
)
760 GET_CURRENT_CONTEXT(ctx
);
761 if (index
< VBO_ATTRIB_MAX
)
765 static void GLAPIENTRY
766 TAG(VertexAttrib1fvNV
)(GLuint index
, const GLfloat
* v
)
768 GET_CURRENT_CONTEXT(ctx
);
769 if (index
< VBO_ATTRIB_MAX
)
773 static void GLAPIENTRY
774 TAG(VertexAttrib2fNV
)(GLuint index
, GLfloat x
, GLfloat y
)
776 GET_CURRENT_CONTEXT(ctx
);
777 if (index
< VBO_ATTRIB_MAX
)
781 static void GLAPIENTRY
782 TAG(VertexAttrib2fvNV
)(GLuint index
, const GLfloat
* v
)
784 GET_CURRENT_CONTEXT(ctx
);
785 if (index
< VBO_ATTRIB_MAX
)
789 static void GLAPIENTRY
790 TAG(VertexAttrib3fNV
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
)
792 GET_CURRENT_CONTEXT(ctx
);
793 if (index
< VBO_ATTRIB_MAX
)
794 ATTR3F(index
, x
, y
, z
);
797 static void GLAPIENTRY
798 TAG(VertexAttrib3fvNV
)(GLuint index
,
801 GET_CURRENT_CONTEXT(ctx
);
802 if (index
< VBO_ATTRIB_MAX
)
806 static void GLAPIENTRY
807 TAG(VertexAttrib4fNV
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
809 GET_CURRENT_CONTEXT(ctx
);
810 if (index
< VBO_ATTRIB_MAX
)
811 ATTR4F(index
, x
, y
, z
, w
);
814 static void GLAPIENTRY
815 TAG(VertexAttrib4fvNV
)(GLuint index
, const GLfloat
* v
)
817 GET_CURRENT_CONTEXT(ctx
);
818 if (index
< VBO_ATTRIB_MAX
)
822 static void GLAPIENTRY
823 TAG(VertexP2ui
)(GLenum type
, GLuint value
)
825 GET_CURRENT_CONTEXT(ctx
);
826 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP2ui");
827 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_POS
, value
);
830 static void GLAPIENTRY
831 TAG(VertexP2uiv
)(GLenum type
, const GLuint
*value
)
833 GET_CURRENT_CONTEXT(ctx
);
834 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP2uiv");
835 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_POS
, value
[0]);
838 static void GLAPIENTRY
839 TAG(VertexP3ui
)(GLenum type
, GLuint value
)
841 GET_CURRENT_CONTEXT(ctx
);
842 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP3ui");
843 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_POS
, value
);
846 static void GLAPIENTRY
847 TAG(VertexP3uiv
)(GLenum type
, const GLuint
*value
)
849 GET_CURRENT_CONTEXT(ctx
);
850 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP3uiv");
851 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_POS
, value
[0]);
854 static void GLAPIENTRY
855 TAG(VertexP4ui
)(GLenum type
, GLuint value
)
857 GET_CURRENT_CONTEXT(ctx
);
858 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP4ui");
859 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_POS
, value
);
862 static void GLAPIENTRY
863 TAG(VertexP4uiv
)(GLenum type
, const GLuint
*value
)
865 GET_CURRENT_CONTEXT(ctx
);
866 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP4uiv");
867 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_POS
, value
[0]);
870 static void GLAPIENTRY
871 TAG(TexCoordP1ui
)(GLenum type
, GLuint coords
)
873 GET_CURRENT_CONTEXT(ctx
);
874 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP1ui");
875 ATTR_UI(ctx
, 1, type
, 0, VBO_ATTRIB_TEX0
, coords
);
878 static void GLAPIENTRY
879 TAG(TexCoordP1uiv
)(GLenum type
, const GLuint
*coords
)
881 GET_CURRENT_CONTEXT(ctx
);
882 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP1uiv");
883 ATTR_UI(ctx
, 1, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
886 static void GLAPIENTRY
887 TAG(TexCoordP2ui
)(GLenum type
, GLuint coords
)
889 GET_CURRENT_CONTEXT(ctx
);
890 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP2ui");
891 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_TEX0
, coords
);
894 static void GLAPIENTRY
895 TAG(TexCoordP2uiv
)(GLenum type
, const GLuint
*coords
)
897 GET_CURRENT_CONTEXT(ctx
);
898 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP2uiv");
899 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
902 static void GLAPIENTRY
903 TAG(TexCoordP3ui
)(GLenum type
, GLuint coords
)
905 GET_CURRENT_CONTEXT(ctx
);
906 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP3ui");
907 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_TEX0
, coords
);
910 static void GLAPIENTRY
911 TAG(TexCoordP3uiv
)(GLenum type
, const GLuint
*coords
)
913 GET_CURRENT_CONTEXT(ctx
);
914 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP3uiv");
915 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
918 static void GLAPIENTRY
919 TAG(TexCoordP4ui
)(GLenum type
, GLuint coords
)
921 GET_CURRENT_CONTEXT(ctx
);
922 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP4ui");
923 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_TEX0
, coords
);
926 static void GLAPIENTRY
927 TAG(TexCoordP4uiv
)(GLenum type
, const GLuint
*coords
)
929 GET_CURRENT_CONTEXT(ctx
);
930 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP4uiv");
931 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
934 static void GLAPIENTRY
935 TAG(MultiTexCoordP1ui
)(GLenum target
, GLenum type
, GLuint coords
)
937 GET_CURRENT_CONTEXT(ctx
);
938 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
939 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP1ui");
940 ATTR_UI(ctx
, 1, type
, 0, attr
, coords
);
943 static void GLAPIENTRY
944 TAG(MultiTexCoordP1uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
946 GET_CURRENT_CONTEXT(ctx
);
947 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
948 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP1uiv");
949 ATTR_UI(ctx
, 1, type
, 0, attr
, coords
[0]);
952 static void GLAPIENTRY
953 TAG(MultiTexCoordP2ui
)(GLenum target
, GLenum type
, GLuint coords
)
955 GET_CURRENT_CONTEXT(ctx
);
956 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
957 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP2ui");
958 ATTR_UI(ctx
, 2, type
, 0, attr
, coords
);
961 static void GLAPIENTRY
962 TAG(MultiTexCoordP2uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
964 GET_CURRENT_CONTEXT(ctx
);
965 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
966 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP2uiv");
967 ATTR_UI(ctx
, 2, type
, 0, attr
, coords
[0]);
970 static void GLAPIENTRY
971 TAG(MultiTexCoordP3ui
)(GLenum target
, GLenum type
, GLuint coords
)
973 GET_CURRENT_CONTEXT(ctx
);
974 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
975 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP3ui");
976 ATTR_UI(ctx
, 3, type
, 0, attr
, coords
);
979 static void GLAPIENTRY
980 TAG(MultiTexCoordP3uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
982 GET_CURRENT_CONTEXT(ctx
);
983 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
984 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP3uiv");
985 ATTR_UI(ctx
, 3, type
, 0, attr
, coords
[0]);
988 static void GLAPIENTRY
989 TAG(MultiTexCoordP4ui
)(GLenum target
, GLenum type
, GLuint coords
)
991 GET_CURRENT_CONTEXT(ctx
);
992 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
993 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP4ui");
994 ATTR_UI(ctx
, 4, type
, 0, attr
, coords
);
997 static void GLAPIENTRY
998 TAG(MultiTexCoordP4uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
1000 GET_CURRENT_CONTEXT(ctx
);
1001 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1002 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP4uiv");
1003 ATTR_UI(ctx
, 4, type
, 0, attr
, coords
[0]);
1006 static void GLAPIENTRY
1007 TAG(NormalP3ui
)(GLenum type
, GLuint coords
)
1009 GET_CURRENT_CONTEXT(ctx
);
1010 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glNormalP3ui");
1011 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_NORMAL
, coords
);
1014 static void GLAPIENTRY
1015 TAG(NormalP3uiv
)(GLenum type
, const GLuint
*coords
)
1017 GET_CURRENT_CONTEXT(ctx
);
1018 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glNormalP3uiv");
1019 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_NORMAL
, coords
[0]);
1022 static void GLAPIENTRY
1023 TAG(ColorP3ui
)(GLenum type
, GLuint color
)
1025 GET_CURRENT_CONTEXT(ctx
);
1026 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP3ui");
1027 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR0
, color
);
1030 static void GLAPIENTRY
1031 TAG(ColorP3uiv
)(GLenum type
, const GLuint
*color
)
1033 GET_CURRENT_CONTEXT(ctx
);
1034 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP3uiv");
1035 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR0
, color
[0]);
1038 static void GLAPIENTRY
1039 TAG(ColorP4ui
)(GLenum type
, GLuint color
)
1041 GET_CURRENT_CONTEXT(ctx
);
1042 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP4ui");
1043 ATTR_UI(ctx
, 4, type
, 1, VBO_ATTRIB_COLOR0
, color
);
1046 static void GLAPIENTRY
1047 TAG(ColorP4uiv
)(GLenum type
, const GLuint
*color
)
1049 GET_CURRENT_CONTEXT(ctx
);
1050 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP4uiv");
1051 ATTR_UI(ctx
, 4, type
, 1, VBO_ATTRIB_COLOR0
, color
[0]);
1054 static void GLAPIENTRY
1055 TAG(SecondaryColorP3ui
)(GLenum type
, GLuint color
)
1057 GET_CURRENT_CONTEXT(ctx
);
1058 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glSecondaryColorP3ui");
1059 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR1
, color
);
1062 static void GLAPIENTRY
1063 TAG(SecondaryColorP3uiv
)(GLenum type
, const GLuint
*color
)
1065 GET_CURRENT_CONTEXT(ctx
);
1066 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glSecondaryColorP3uiv");
1067 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR1
, color
[0]);
1070 static void GLAPIENTRY
1071 TAG(VertexAttribP1ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1074 GET_CURRENT_CONTEXT(ctx
);
1075 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP1ui");
1076 ATTR_UI_INDEX(ctx
, 1, type
, normalized
, index
, value
);
1079 static void GLAPIENTRY
1080 TAG(VertexAttribP2ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1083 GET_CURRENT_CONTEXT(ctx
);
1084 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP2ui");
1085 ATTR_UI_INDEX(ctx
, 2, type
, normalized
, index
, value
);
1088 static void GLAPIENTRY
1089 TAG(VertexAttribP3ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1092 GET_CURRENT_CONTEXT(ctx
);
1093 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP3ui");
1094 ATTR_UI_INDEX(ctx
, 3, type
, normalized
, index
, value
);
1097 static void GLAPIENTRY
1098 TAG(VertexAttribP4ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1101 GET_CURRENT_CONTEXT(ctx
);
1102 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexAttribP4ui");
1103 ATTR_UI_INDEX(ctx
, 4, type
, normalized
, index
, value
);
1106 static void GLAPIENTRY
1107 TAG(VertexAttribP1uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1108 const GLuint
*value
)
1110 GET_CURRENT_CONTEXT(ctx
);
1111 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP1uiv");
1112 ATTR_UI_INDEX(ctx
, 1, type
, normalized
, index
, *value
);
1115 static void GLAPIENTRY
1116 TAG(VertexAttribP2uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1117 const GLuint
*value
)
1119 GET_CURRENT_CONTEXT(ctx
);
1120 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP2uiv");
1121 ATTR_UI_INDEX(ctx
, 2, type
, normalized
, index
, *value
);
1124 static void GLAPIENTRY
1125 TAG(VertexAttribP3uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1126 const GLuint
*value
)
1128 GET_CURRENT_CONTEXT(ctx
);
1129 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP3uiv");
1130 ATTR_UI_INDEX(ctx
, 3, type
, normalized
, index
, *value
);
1133 static void GLAPIENTRY
1134 TAG(VertexAttribP4uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1135 const GLuint
*value
)
1137 GET_CURRENT_CONTEXT(ctx
);
1138 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexAttribP4uiv");
1139 ATTR_UI_INDEX(ctx
, 4, type
, normalized
, index
, *value
);
1144 static void GLAPIENTRY
1145 TAG(VertexAttribL1d
)(GLuint index
, GLdouble x
)
1147 GET_CURRENT_CONTEXT(ctx
);
1148 if (is_vertex_position(ctx
, index
))
1150 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1151 ATTR1D(VBO_ATTRIB_GENERIC0
+ index
, x
);
1153 ERROR(GL_INVALID_VALUE
);
1156 static void GLAPIENTRY
1157 TAG(VertexAttribL1dv
)(GLuint index
, const GLdouble
* v
)
1159 GET_CURRENT_CONTEXT(ctx
);
1160 if (is_vertex_position(ctx
, index
))
1162 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1163 ATTR1DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1165 ERROR(GL_INVALID_VALUE
);
1168 static void GLAPIENTRY
1169 TAG(VertexAttribL2d
)(GLuint index
, GLdouble x
, GLdouble y
)
1171 GET_CURRENT_CONTEXT(ctx
);
1172 if (is_vertex_position(ctx
, index
))
1174 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1175 ATTR2D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
1177 ERROR(GL_INVALID_VALUE
);
1180 static void GLAPIENTRY
1181 TAG(VertexAttribL2dv
)(GLuint index
, const GLdouble
* v
)
1183 GET_CURRENT_CONTEXT(ctx
);
1184 if (is_vertex_position(ctx
, index
))
1186 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1187 ATTR2DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1189 ERROR(GL_INVALID_VALUE
);
1192 static void GLAPIENTRY
1193 TAG(VertexAttribL3d
)(GLuint index
, GLdouble x
, GLdouble y
, GLdouble z
)
1195 GET_CURRENT_CONTEXT(ctx
);
1196 if (is_vertex_position(ctx
, index
))
1198 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1199 ATTR3D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
1201 ERROR(GL_INVALID_VALUE
);
1204 static void GLAPIENTRY
1205 TAG(VertexAttribL3dv
)(GLuint index
, const GLdouble
* v
)
1207 GET_CURRENT_CONTEXT(ctx
);
1208 if (is_vertex_position(ctx
, index
))
1210 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1211 ATTR3DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1213 ERROR(GL_INVALID_VALUE
);
1216 static void GLAPIENTRY
1217 TAG(VertexAttribL4d
)(GLuint index
, GLdouble x
, GLdouble y
, GLdouble z
, GLdouble w
)
1219 GET_CURRENT_CONTEXT(ctx
);
1220 if (is_vertex_position(ctx
, index
))
1221 ATTR4D(0, x
, y
, z
, w
);
1222 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1223 ATTR4D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
1225 ERROR(GL_INVALID_VALUE
);
1228 static void GLAPIENTRY
1229 TAG(VertexAttribL4dv
)(GLuint index
, const GLdouble
* v
)
1231 GET_CURRENT_CONTEXT(ctx
);
1232 if (is_vertex_position(ctx
, index
))
1234 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1235 ATTR4DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1237 ERROR(GL_INVALID_VALUE
);
1240 static void GLAPIENTRY
1241 TAG(VertexAttribL1ui64ARB
)(GLuint index
, GLuint64EXT x
)
1243 GET_CURRENT_CONTEXT(ctx
);
1244 if (is_vertex_position(ctx
, index
))
1246 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1247 ATTR1UI64(VBO_ATTRIB_GENERIC0
+ index
, x
);
1249 ERROR(GL_INVALID_VALUE
);
1252 static void GLAPIENTRY
1253 TAG(VertexAttribL1ui64vARB
)(GLuint index
, const GLuint64EXT
*v
)
1255 GET_CURRENT_CONTEXT(ctx
);
1256 if (is_vertex_position(ctx
, index
))
1258 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1259 ATTR1UIV64(VBO_ATTRIB_GENERIC0
+ index
, v
);
1261 ERROR(GL_INVALID_VALUE
);
1264 /* GL_NV_half_float */
1265 static void GLAPIENTRY
1266 TAG(Vertex2hNV
)(GLhalfNV x
, GLhalfNV y
)
1268 GET_CURRENT_CONTEXT(ctx
);
1269 ATTR2H(VBO_ATTRIB_POS
, x
, y
);
1272 static void GLAPIENTRY
1273 TAG(Vertex2hvNV
)(const GLhalfNV
* v
)
1275 GET_CURRENT_CONTEXT(ctx
);
1276 ATTR2HV(VBO_ATTRIB_POS
, v
);
1279 static void GLAPIENTRY
1280 TAG(Vertex3hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1282 GET_CURRENT_CONTEXT(ctx
);
1283 ATTR3H(VBO_ATTRIB_POS
, x
, y
, z
);
1286 static void GLAPIENTRY
1287 TAG(Vertex3hvNV
)(const GLhalfNV
* v
)
1289 GET_CURRENT_CONTEXT(ctx
);
1290 ATTR3HV(VBO_ATTRIB_POS
, v
);
1293 static void GLAPIENTRY
1294 TAG(Vertex4hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
, GLhalfNV w
)
1296 GET_CURRENT_CONTEXT(ctx
);
1297 ATTR4H(VBO_ATTRIB_POS
, x
, y
, z
, w
);
1300 static void GLAPIENTRY
1301 TAG(Vertex4hvNV
)(const GLhalfNV
* v
)
1303 GET_CURRENT_CONTEXT(ctx
);
1304 ATTR4HV(VBO_ATTRIB_POS
, v
);
1309 static void GLAPIENTRY
1310 TAG(Normal3hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1312 GET_CURRENT_CONTEXT(ctx
);
1313 ATTR3H(VBO_ATTRIB_NORMAL
, x
, y
, z
);
1316 static void GLAPIENTRY
1317 TAG(Normal3hvNV
)(const GLhalfNV
* v
)
1319 GET_CURRENT_CONTEXT(ctx
);
1320 ATTR3HV(VBO_ATTRIB_NORMAL
, v
);
1325 static void GLAPIENTRY
1326 TAG(Color3hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1328 GET_CURRENT_CONTEXT(ctx
);
1329 ATTR3H(VBO_ATTRIB_COLOR0
, x
, y
, z
);
1332 static void GLAPIENTRY
1333 TAG(Color3hvNV
)(const GLhalfNV
* v
)
1335 GET_CURRENT_CONTEXT(ctx
);
1336 ATTR3HV(VBO_ATTRIB_COLOR0
, v
);
1339 static void GLAPIENTRY
1340 TAG(Color4hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
, GLhalfNV w
)
1342 GET_CURRENT_CONTEXT(ctx
);
1343 ATTR4H(VBO_ATTRIB_COLOR0
, x
, y
, z
, w
);
1346 static void GLAPIENTRY
1347 TAG(Color4hvNV
)(const GLhalfNV
* v
)
1349 GET_CURRENT_CONTEXT(ctx
);
1350 ATTR4HV(VBO_ATTRIB_COLOR0
, v
);
1355 static void GLAPIENTRY
1356 TAG(TexCoord1hNV
)(GLhalfNV x
)
1358 GET_CURRENT_CONTEXT(ctx
);
1359 ATTR1H(VBO_ATTRIB_TEX0
, x
);
1362 static void GLAPIENTRY
1363 TAG(TexCoord1hvNV
)(const GLhalfNV
* v
)
1365 GET_CURRENT_CONTEXT(ctx
);
1366 ATTR1HV(VBO_ATTRIB_TEX0
, v
);
1369 static void GLAPIENTRY
1370 TAG(TexCoord2hNV
)(GLhalfNV x
, GLhalfNV y
)
1372 GET_CURRENT_CONTEXT(ctx
);
1373 ATTR2H(VBO_ATTRIB_TEX0
, x
, y
);
1376 static void GLAPIENTRY
1377 TAG(TexCoord2hvNV
)(const GLhalfNV
* v
)
1379 GET_CURRENT_CONTEXT(ctx
);
1380 ATTR2HV(VBO_ATTRIB_TEX0
, v
);
1383 static void GLAPIENTRY
1384 TAG(TexCoord3hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1386 GET_CURRENT_CONTEXT(ctx
);
1387 ATTR3H(VBO_ATTRIB_TEX0
, x
, y
, z
);
1390 static void GLAPIENTRY
1391 TAG(TexCoord3hvNV
)(const GLhalfNV
* v
)
1393 GET_CURRENT_CONTEXT(ctx
);
1394 ATTR3HV(VBO_ATTRIB_TEX0
, v
);
1397 static void GLAPIENTRY
1398 TAG(TexCoord4hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
, GLhalfNV w
)
1400 GET_CURRENT_CONTEXT(ctx
);
1401 ATTR4H(VBO_ATTRIB_TEX0
, x
, y
, z
, w
);
1404 static void GLAPIENTRY
1405 TAG(TexCoord4hvNV
)(const GLhalfNV
* v
)
1407 GET_CURRENT_CONTEXT(ctx
);
1408 ATTR4HV(VBO_ATTRIB_TEX0
, v
);
1413 static void GLAPIENTRY
1414 TAG(MultiTexCoord1hNV
)(GLenum target
, GLhalfNV x
)
1416 GET_CURRENT_CONTEXT(ctx
);
1417 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1421 static void GLAPIENTRY
1422 TAG(MultiTexCoord1hvNV
)(GLenum target
, const GLhalfNV
* v
)
1424 GET_CURRENT_CONTEXT(ctx
);
1425 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1429 static void GLAPIENTRY
1430 TAG(MultiTexCoord2hNV
)(GLenum target
, GLhalfNV x
, GLhalfNV y
)
1432 GET_CURRENT_CONTEXT(ctx
);
1433 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1437 static void GLAPIENTRY
1438 TAG(MultiTexCoord2hvNV
)(GLenum target
, const GLhalfNV
* v
)
1440 GET_CURRENT_CONTEXT(ctx
);
1441 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1445 static void GLAPIENTRY
1446 TAG(MultiTexCoord3hNV
)(GLenum target
, GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1448 GET_CURRENT_CONTEXT(ctx
);
1449 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1450 ATTR3H(attr
, x
, y
, z
);
1453 static void GLAPIENTRY
1454 TAG(MultiTexCoord3hvNV
)(GLenum target
, const GLhalfNV
* v
)
1456 GET_CURRENT_CONTEXT(ctx
);
1457 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1461 static void GLAPIENTRY
1462 TAG(MultiTexCoord4hNV
)(GLenum target
, GLhalfNV x
, GLhalfNV y
, GLhalfNV z
, GLhalfNV w
)
1464 GET_CURRENT_CONTEXT(ctx
);
1465 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1466 ATTR4H(attr
, x
, y
, z
, w
);
1469 static void GLAPIENTRY
1470 TAG(MultiTexCoord4hvNV
)(GLenum target
, const GLhalfNV
* v
)
1472 GET_CURRENT_CONTEXT(ctx
);
1473 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
1479 static void GLAPIENTRY
1480 TAG(FogCoordhNV
)(GLhalf x
)
1482 GET_CURRENT_CONTEXT(ctx
);
1483 ATTR1H(VBO_ATTRIB_FOG
, x
);
1486 static void GLAPIENTRY
1487 TAG(FogCoordhvNV
)(const GLhalf
* v
)
1489 GET_CURRENT_CONTEXT(ctx
);
1490 ATTR1HV(VBO_ATTRIB_FOG
, v
);
1495 static void GLAPIENTRY
1496 TAG(SecondaryColor3hNV
)(GLhalfNV x
, GLhalfNV y
, GLhalfNV z
)
1498 GET_CURRENT_CONTEXT(ctx
);
1499 ATTR3H(VBO_ATTRIB_COLOR1
, x
, y
, z
);
1502 static void GLAPIENTRY
1503 TAG(SecondaryColor3hvNV
)(const GLhalfNV
* v
)
1505 GET_CURRENT_CONTEXT(ctx
);
1506 ATTR3HV(VBO_ATTRIB_COLOR1
, v
);