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"
34 #define ATTRI( A, N, V0, V1, V2, V3 ) \
35 ATTR_UNION(A, N, GL_INT, uint32_t, INT_AS_UINT(V0), INT_AS_UINT(V1), \
36 INT_AS_UINT(V2), INT_AS_UINT(V3))
37 #define ATTRUI( A, N, V0, V1, V2, V3 ) \
38 ATTR_UNION(A, N, GL_UNSIGNED_INT, uint32_t, (uint32_t)(V0), (uint32_t)(V1), \
39 (uint32_t)(V2), (uint32_t)(V3))
40 #define ATTRF( A, N, V0, V1, V2, V3 ) \
41 ATTR_UNION(A, N, GL_FLOAT, uint32_t, FLOAT_AS_UINT(V0), FLOAT_AS_UINT(V1),\
42 FLOAT_AS_UINT(V2), FLOAT_AS_UINT(V3))
43 #define ATTRD( A, N, V0, V1, V2, V3 ) \
44 ATTR_UNION(A, N, GL_DOUBLE, uint64_t, DOUBLE_AS_UINT64(V0), \
45 DOUBLE_AS_UINT64(V1), DOUBLE_AS_UINT64(V2), DOUBLE_AS_UINT64(V3))
46 #define ATTRUI64( A, N, V0, V1, V2, V3 ) \
47 ATTR_UNION(A, N, GL_UNSIGNED_INT64_ARB, uint64_t, V0, V1, V2, V3)
51 #define ATTR1FV( A, V ) ATTRF( A, 1, (V)[0], 0, 0, 1 )
52 #define ATTR2FV( A, V ) ATTRF( A, 2, (V)[0], (V)[1], 0, 1 )
53 #define ATTR3FV( A, V ) ATTRF( A, 3, (V)[0], (V)[1], (V)[2], 1 )
54 #define ATTR4FV( A, V ) ATTRF( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
56 #define ATTR1F( A, X ) ATTRF( A, 1, X, 0, 0, 1 )
57 #define ATTR2F( A, X, Y ) ATTRF( A, 2, X, Y, 0, 1 )
58 #define ATTR3F( A, X, Y, Z ) ATTRF( A, 3, X, Y, Z, 1 )
59 #define ATTR4F( A, X, Y, Z, W ) ATTRF( A, 4, X, Y, Z, W )
63 #define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 )
64 #define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
65 #define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
67 #define ATTR1I( A, X ) ATTRI( A, 1, X, 0, 0, 1 )
68 #define ATTR2I( A, X, Y ) ATTRI( A, 2, X, Y, 0, 1 )
69 #define ATTR3I( A, X, Y, Z ) ATTRI( A, 3, X, Y, Z, 1 )
70 #define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W )
74 #define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 )
75 #define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
76 #define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
78 #define ATTR1UI( A, X ) ATTRUI( A, 1, X, 0, 0, 1 )
79 #define ATTR2UI( A, X, Y ) ATTRUI( A, 2, X, Y, 0, 1 )
80 #define ATTR3UI( A, X, Y, Z ) ATTRUI( A, 3, X, Y, Z, 1 )
81 #define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W )
83 #define MAT_ATTR( A, N, V ) ATTRF( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
85 #define ATTRUI10_1( A, UI ) ATTRF( A, 1, (UI) & 0x3ff, 0, 0, 1 )
86 #define ATTRUI10_2( A, UI ) ATTRF( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
87 #define ATTRUI10_3( A, UI ) ATTRF( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
88 #define ATTRUI10_4( A, UI ) ATTRF( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
90 #define ATTRUI10N_1( A, UI ) ATTRF( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
91 #define ATTRUI10N_2( A, UI ) ATTRF( A, 2, \
92 conv_ui10_to_norm_float((UI) & 0x3ff), \
93 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 )
94 #define ATTRUI10N_3( A, UI ) ATTRF( A, 3, \
95 conv_ui10_to_norm_float((UI) & 0x3ff), \
96 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
97 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 )
98 #define ATTRUI10N_4( A, UI ) ATTRF( A, 4, \
99 conv_ui10_to_norm_float((UI) & 0x3ff), \
100 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
101 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \
102 conv_ui2_to_norm_float(((UI) >> 30) & 0x3) )
104 #define ATTRI10_1( A, I10 ) ATTRF( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
105 #define ATTRI10_2( A, I10 ) ATTRF( A, 2, \
106 conv_i10_to_i((I10) & 0x3ff), \
107 conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 )
108 #define ATTRI10_3( A, I10 ) ATTRF( A, 3, \
109 conv_i10_to_i((I10) & 0x3ff), \
110 conv_i10_to_i(((I10) >> 10) & 0x3ff), \
111 conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 )
112 #define ATTRI10_4( A, I10 ) ATTRF( A, 4, \
113 conv_i10_to_i((I10) & 0x3ff), \
114 conv_i10_to_i(((I10) >> 10) & 0x3ff), \
115 conv_i10_to_i(((I10) >> 20) & 0x3ff), \
116 conv_i2_to_i(((I10) >> 30) & 0x3))
119 #define ATTRI10N_1(ctx, A, I10) ATTRF(A, 1, conv_i10_to_norm_float(ctx, (I10) & 0x3ff), 0, 0, 1 )
120 #define ATTRI10N_2(ctx, A, I10) ATTRF(A, 2, \
121 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
122 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), 0, 1 )
123 #define ATTRI10N_3(ctx, A, I10) ATTRF(A, 3, \
124 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
125 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \
126 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), 1 )
127 #define ATTRI10N_4(ctx, A, I10) ATTRF(A, 4, \
128 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \
129 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \
130 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), \
131 conv_i2_to_norm_float(ctx, ((I10) >> 30) & 0x3))
133 #define ATTR_UI(ctx, val, type, normalized, attr, arg) do { \
134 if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) { \
136 ATTRUI10N_##val((attr), (arg)); \
138 ATTRUI10_##val((attr), (arg)); \
140 } else if ((type) == GL_INT_2_10_10_10_REV) { \
142 ATTRI10N_##val(ctx, (attr), (arg)); \
144 ATTRI10_##val((attr), (arg)); \
146 } else if ((type) == GL_UNSIGNED_INT_10F_11F_11F_REV) { \
149 r11g11b10f_to_float3((arg), res); \
150 ATTR##val##FV((attr), res); \
152 ERROR(GL_INVALID_VALUE); \
155 #define ATTR_UI_INDEX(ctx, val, type, normalized, index, arg) do { \
156 if ((index) == 0 && _mesa_attr_zero_aliases_vertex(ctx)) { \
157 ATTR_UI(ctx, val, (type), normalized, 0, (arg)); \
158 } else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) { \
159 ATTR_UI(ctx, val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \
161 ERROR(GL_INVALID_VALUE); \
166 #define ATTR1DV( A, V ) ATTRD( A, 1, (V)[0], 0, 0, 1 )
167 #define ATTR2DV( A, V ) ATTRD( A, 2, (V)[0], (V)[1], 0, 1 )
168 #define ATTR3DV( A, V ) ATTRD( A, 3, (V)[0], (V)[1], (V)[2], 1 )
169 #define ATTR4DV( A, V ) ATTRD( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
171 #define ATTR1D( A, X ) ATTRD( A, 1, X, 0, 0, 1 )
172 #define ATTR2D( A, X, Y ) ATTRD( A, 2, X, Y, 0, 1 )
173 #define ATTR3D( A, X, Y, Z ) ATTRD( A, 3, X, Y, Z, 1 )
174 #define ATTR4D( A, X, Y, Z, W ) ATTRD( A, 4, X, Y, Z, W )
176 #define ATTR1UIV64( A, V ) ATTRUI64( A, 1, (V)[0], 0, 0, 0 )
177 #define ATTR1UI64( A, X ) ATTRUI64( A, 1, X, 0, 0, 0 )
180 static void GLAPIENTRY
181 TAG(Vertex2f
)(GLfloat x
, GLfloat y
)
183 GET_CURRENT_CONTEXT(ctx
);
184 ATTR2F(VBO_ATTRIB_POS
, x
, y
);
187 static void GLAPIENTRY
188 TAG(Vertex2fv
)(const GLfloat
* v
)
190 GET_CURRENT_CONTEXT(ctx
);
191 ATTR2FV(VBO_ATTRIB_POS
, v
);
194 static void GLAPIENTRY
195 TAG(Vertex3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
197 GET_CURRENT_CONTEXT(ctx
);
198 ATTR3F(VBO_ATTRIB_POS
, x
, y
, z
);
201 static void GLAPIENTRY
202 TAG(Vertex3fv
)(const GLfloat
* v
)
204 GET_CURRENT_CONTEXT(ctx
);
205 ATTR3FV(VBO_ATTRIB_POS
, v
);
208 static void GLAPIENTRY
209 TAG(Vertex4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
211 GET_CURRENT_CONTEXT(ctx
);
212 ATTR4F(VBO_ATTRIB_POS
, x
, y
, z
, w
);
215 static void GLAPIENTRY
216 TAG(Vertex4fv
)(const GLfloat
* v
)
218 GET_CURRENT_CONTEXT(ctx
);
219 ATTR4FV(VBO_ATTRIB_POS
, v
);
224 static void GLAPIENTRY
225 TAG(TexCoord1f
)(GLfloat x
)
227 GET_CURRENT_CONTEXT(ctx
);
228 ATTR1F(VBO_ATTRIB_TEX0
, x
);
231 static void GLAPIENTRY
232 TAG(TexCoord1fv
)(const GLfloat
* v
)
234 GET_CURRENT_CONTEXT(ctx
);
235 ATTR1FV(VBO_ATTRIB_TEX0
, v
);
238 static void GLAPIENTRY
239 TAG(TexCoord2f
)(GLfloat x
, GLfloat y
)
241 GET_CURRENT_CONTEXT(ctx
);
242 ATTR2F(VBO_ATTRIB_TEX0
, x
, y
);
245 static void GLAPIENTRY
246 TAG(TexCoord2fv
)(const GLfloat
* v
)
248 GET_CURRENT_CONTEXT(ctx
);
249 ATTR2FV(VBO_ATTRIB_TEX0
, v
);
252 static void GLAPIENTRY
253 TAG(TexCoord3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
255 GET_CURRENT_CONTEXT(ctx
);
256 ATTR3F(VBO_ATTRIB_TEX0
, x
, y
, z
);
259 static void GLAPIENTRY
260 TAG(TexCoord3fv
)(const GLfloat
* v
)
262 GET_CURRENT_CONTEXT(ctx
);
263 ATTR3FV(VBO_ATTRIB_TEX0
, v
);
266 static void GLAPIENTRY
267 TAG(TexCoord4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
269 GET_CURRENT_CONTEXT(ctx
);
270 ATTR4F(VBO_ATTRIB_TEX0
, x
, y
, z
, w
);
273 static void GLAPIENTRY
274 TAG(TexCoord4fv
)(const GLfloat
* v
)
276 GET_CURRENT_CONTEXT(ctx
);
277 ATTR4FV(VBO_ATTRIB_TEX0
, v
);
282 static void GLAPIENTRY
283 TAG(Normal3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
285 GET_CURRENT_CONTEXT(ctx
);
286 ATTR3F(VBO_ATTRIB_NORMAL
, x
, y
, z
);
289 static void GLAPIENTRY
290 TAG(Normal3fv
)(const GLfloat
* v
)
292 GET_CURRENT_CONTEXT(ctx
);
293 ATTR3FV(VBO_ATTRIB_NORMAL
, v
);
298 static void GLAPIENTRY
299 TAG(FogCoordfEXT
)(GLfloat x
)
301 GET_CURRENT_CONTEXT(ctx
);
302 ATTR1F(VBO_ATTRIB_FOG
, x
);
307 static void GLAPIENTRY
308 TAG(FogCoordfvEXT
)(const GLfloat
* v
)
310 GET_CURRENT_CONTEXT(ctx
);
311 ATTR1FV(VBO_ATTRIB_FOG
, v
);
314 static void GLAPIENTRY
315 TAG(Color3f
)(GLfloat x
, GLfloat y
, GLfloat z
)
317 GET_CURRENT_CONTEXT(ctx
);
318 ATTR3F(VBO_ATTRIB_COLOR0
, x
, y
, z
);
321 static void GLAPIENTRY
322 TAG(Color3fv
)(const GLfloat
* v
)
324 GET_CURRENT_CONTEXT(ctx
);
325 ATTR3FV(VBO_ATTRIB_COLOR0
, v
);
328 static void GLAPIENTRY
329 TAG(Color4f
)(GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
331 GET_CURRENT_CONTEXT(ctx
);
332 ATTR4F(VBO_ATTRIB_COLOR0
, x
, y
, z
, w
);
335 static void GLAPIENTRY
336 TAG(Color4fv
)(const GLfloat
* v
)
338 GET_CURRENT_CONTEXT(ctx
);
339 ATTR4FV(VBO_ATTRIB_COLOR0
, v
);
344 static void GLAPIENTRY
345 TAG(SecondaryColor3fEXT
)(GLfloat x
, GLfloat y
, GLfloat z
)
347 GET_CURRENT_CONTEXT(ctx
);
348 ATTR3F(VBO_ATTRIB_COLOR1
, x
, y
, z
);
351 static void GLAPIENTRY
352 TAG(SecondaryColor3fvEXT
)(const GLfloat
* v
)
354 GET_CURRENT_CONTEXT(ctx
);
355 ATTR3FV(VBO_ATTRIB_COLOR1
, v
);
360 static void GLAPIENTRY
361 TAG(EdgeFlag
)(GLboolean b
)
363 GET_CURRENT_CONTEXT(ctx
);
364 ATTR1F(VBO_ATTRIB_EDGEFLAG
, (GLfloat
) b
);
369 static void GLAPIENTRY
370 TAG(Indexf
)(GLfloat f
)
372 GET_CURRENT_CONTEXT(ctx
);
373 ATTR1F(VBO_ATTRIB_COLOR_INDEX
, f
);
376 static void GLAPIENTRY
377 TAG(Indexfv
)(const GLfloat
* f
)
379 GET_CURRENT_CONTEXT(ctx
);
380 ATTR1FV(VBO_ATTRIB_COLOR_INDEX
, f
);
385 static void GLAPIENTRY
386 TAG(MultiTexCoord1f
)(GLenum target
, GLfloat x
)
388 GET_CURRENT_CONTEXT(ctx
);
389 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
393 static void GLAPIENTRY
394 TAG(MultiTexCoord1fv
)(GLenum target
, const GLfloat
* v
)
396 GET_CURRENT_CONTEXT(ctx
);
397 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
401 static void GLAPIENTRY
402 TAG(MultiTexCoord2f
)(GLenum target
, GLfloat x
, GLfloat y
)
404 GET_CURRENT_CONTEXT(ctx
);
405 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
409 static void GLAPIENTRY
410 TAG(MultiTexCoord2fv
)(GLenum target
, const GLfloat
* v
)
412 GET_CURRENT_CONTEXT(ctx
);
413 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
417 static void GLAPIENTRY
418 TAG(MultiTexCoord3f
)(GLenum target
, GLfloat x
, GLfloat y
, GLfloat z
)
420 GET_CURRENT_CONTEXT(ctx
);
421 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
422 ATTR3F(attr
, x
, y
, z
);
425 static void GLAPIENTRY
426 TAG(MultiTexCoord3fv
)(GLenum target
, const GLfloat
* v
)
428 GET_CURRENT_CONTEXT(ctx
);
429 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
433 static void GLAPIENTRY
434 TAG(MultiTexCoord4f
)(GLenum target
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
436 GET_CURRENT_CONTEXT(ctx
);
437 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
438 ATTR4F(attr
, x
, y
, z
, w
);
441 static void GLAPIENTRY
442 TAG(MultiTexCoord4fv
)(GLenum target
, const GLfloat
* v
)
444 GET_CURRENT_CONTEXT(ctx
);
445 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
450 static void GLAPIENTRY
451 TAG(VertexAttrib1fARB
)(GLuint index
, GLfloat x
)
453 GET_CURRENT_CONTEXT(ctx
);
454 if (is_vertex_position(ctx
, index
))
456 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
457 ATTR1F(VBO_ATTRIB_GENERIC0
+ index
, x
);
459 ERROR(GL_INVALID_VALUE
);
462 static void GLAPIENTRY
463 TAG(VertexAttrib1fvARB
)(GLuint index
, const GLfloat
* v
)
465 GET_CURRENT_CONTEXT(ctx
);
466 if (is_vertex_position(ctx
, index
))
468 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
469 ATTR1FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
471 ERROR(GL_INVALID_VALUE
);
474 static void GLAPIENTRY
475 TAG(VertexAttrib2fARB
)(GLuint index
, GLfloat x
, GLfloat y
)
477 GET_CURRENT_CONTEXT(ctx
);
478 if (is_vertex_position(ctx
, index
))
480 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
481 ATTR2F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
483 ERROR(GL_INVALID_VALUE
);
486 static void GLAPIENTRY
487 TAG(VertexAttrib2fvARB
)(GLuint index
, const GLfloat
* v
)
489 GET_CURRENT_CONTEXT(ctx
);
490 if (is_vertex_position(ctx
, index
))
492 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
493 ATTR2FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
495 ERROR(GL_INVALID_VALUE
);
498 static void GLAPIENTRY
499 TAG(VertexAttrib3fARB
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
)
501 GET_CURRENT_CONTEXT(ctx
);
502 if (is_vertex_position(ctx
, index
))
504 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
505 ATTR3F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
507 ERROR(GL_INVALID_VALUE
);
510 static void GLAPIENTRY
511 TAG(VertexAttrib3fvARB
)(GLuint index
, const GLfloat
* v
)
513 GET_CURRENT_CONTEXT(ctx
);
514 if (is_vertex_position(ctx
, index
))
516 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
517 ATTR3FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
519 ERROR(GL_INVALID_VALUE
);
522 static void GLAPIENTRY
523 TAG(VertexAttrib4fARB
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
525 GET_CURRENT_CONTEXT(ctx
);
526 if (is_vertex_position(ctx
, index
))
527 ATTR4F(0, x
, y
, z
, w
);
528 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
529 ATTR4F(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
531 ERROR(GL_INVALID_VALUE
);
534 static void GLAPIENTRY
535 TAG(VertexAttrib4fvARB
)(GLuint index
, const GLfloat
* v
)
537 GET_CURRENT_CONTEXT(ctx
);
538 if (is_vertex_position(ctx
, index
))
540 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
541 ATTR4FV(VBO_ATTRIB_GENERIC0
+ index
, v
);
543 ERROR(GL_INVALID_VALUE
);
548 /* Integer-valued generic attributes.
549 * XXX: the integers just get converted to floats at this time
551 static void GLAPIENTRY
552 TAG(VertexAttribI1i
)(GLuint index
, GLint x
)
554 GET_CURRENT_CONTEXT(ctx
);
555 if (is_vertex_position(ctx
, index
))
557 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
558 ATTR1I(VBO_ATTRIB_GENERIC0
+ index
, x
);
560 ERROR(GL_INVALID_VALUE
);
563 static void GLAPIENTRY
564 TAG(VertexAttribI2i
)(GLuint index
, GLint x
, GLint y
)
566 GET_CURRENT_CONTEXT(ctx
);
567 if (is_vertex_position(ctx
, index
))
569 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
570 ATTR2I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
572 ERROR(GL_INVALID_VALUE
);
575 static void GLAPIENTRY
576 TAG(VertexAttribI3i
)(GLuint index
, GLint x
, GLint y
, GLint z
)
578 GET_CURRENT_CONTEXT(ctx
);
579 if (is_vertex_position(ctx
, index
))
581 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
582 ATTR3I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
584 ERROR(GL_INVALID_VALUE
);
587 static void GLAPIENTRY
588 TAG(VertexAttribI4i
)(GLuint index
, GLint x
, GLint y
, GLint z
, GLint w
)
590 GET_CURRENT_CONTEXT(ctx
);
591 if (is_vertex_position(ctx
, index
))
592 ATTR4I(0, x
, y
, z
, w
);
593 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
594 ATTR4I(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
596 ERROR(GL_INVALID_VALUE
);
599 static void GLAPIENTRY
600 TAG(VertexAttribI2iv
)(GLuint index
, const GLint
*v
)
602 GET_CURRENT_CONTEXT(ctx
);
603 if (is_vertex_position(ctx
, index
))
605 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
606 ATTR2IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
608 ERROR(GL_INVALID_VALUE
);
611 static void GLAPIENTRY
612 TAG(VertexAttribI3iv
)(GLuint index
, const GLint
*v
)
614 GET_CURRENT_CONTEXT(ctx
);
615 if (is_vertex_position(ctx
, index
))
617 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
618 ATTR3IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
620 ERROR(GL_INVALID_VALUE
);
623 static void GLAPIENTRY
624 TAG(VertexAttribI4iv
)(GLuint index
, const GLint
*v
)
626 GET_CURRENT_CONTEXT(ctx
);
627 if (is_vertex_position(ctx
, index
))
629 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
630 ATTR4IV(VBO_ATTRIB_GENERIC0
+ index
, v
);
632 ERROR(GL_INVALID_VALUE
);
637 /* Unsigned integer-valued generic attributes.
638 * XXX: the integers just get converted to floats at this time
640 static void GLAPIENTRY
641 TAG(VertexAttribI1ui
)(GLuint index
, GLuint x
)
643 GET_CURRENT_CONTEXT(ctx
);
644 if (is_vertex_position(ctx
, index
))
646 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
647 ATTR1UI(VBO_ATTRIB_GENERIC0
+ index
, x
);
649 ERROR(GL_INVALID_VALUE
);
652 static void GLAPIENTRY
653 TAG(VertexAttribI2ui
)(GLuint index
, GLuint x
, GLuint y
)
655 GET_CURRENT_CONTEXT(ctx
);
656 if (is_vertex_position(ctx
, index
))
658 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
659 ATTR2UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
661 ERROR(GL_INVALID_VALUE
);
664 static void GLAPIENTRY
665 TAG(VertexAttribI3ui
)(GLuint index
, GLuint x
, GLuint y
, GLuint z
)
667 GET_CURRENT_CONTEXT(ctx
);
668 if (is_vertex_position(ctx
, index
))
670 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
671 ATTR3UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
673 ERROR(GL_INVALID_VALUE
);
676 static void GLAPIENTRY
677 TAG(VertexAttribI4ui
)(GLuint index
, GLuint x
, GLuint y
, GLuint z
, GLuint w
)
679 GET_CURRENT_CONTEXT(ctx
);
680 if (is_vertex_position(ctx
, index
))
681 ATTR4UI(0, x
, y
, z
, w
);
682 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
683 ATTR4UI(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
685 ERROR(GL_INVALID_VALUE
);
688 static void GLAPIENTRY
689 TAG(VertexAttribI2uiv
)(GLuint index
, const GLuint
*v
)
691 GET_CURRENT_CONTEXT(ctx
);
692 if (is_vertex_position(ctx
, index
))
694 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
695 ATTR2UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
697 ERROR(GL_INVALID_VALUE
);
700 static void GLAPIENTRY
701 TAG(VertexAttribI3uiv
)(GLuint index
, const GLuint
*v
)
703 GET_CURRENT_CONTEXT(ctx
);
704 if (is_vertex_position(ctx
, index
))
706 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
707 ATTR3UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
709 ERROR(GL_INVALID_VALUE
);
712 static void GLAPIENTRY
713 TAG(VertexAttribI4uiv
)(GLuint index
, const GLuint
*v
)
715 GET_CURRENT_CONTEXT(ctx
);
716 if (is_vertex_position(ctx
, index
))
718 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
719 ATTR4UIV(VBO_ATTRIB_GENERIC0
+ index
, v
);
721 ERROR(GL_INVALID_VALUE
);
726 /* These entrypoints are no longer used for NV_vertex_program but they are
727 * used by the display list and other code specifically because of their
728 * property of aliasing with the legacy Vertex, TexCoord, Normal, etc
729 * attributes. (See vbo_save_loopback.c)
731 static void GLAPIENTRY
732 TAG(VertexAttrib1fNV
)(GLuint index
, GLfloat x
)
734 GET_CURRENT_CONTEXT(ctx
);
735 if (index
< VBO_ATTRIB_MAX
)
739 static void GLAPIENTRY
740 TAG(VertexAttrib1fvNV
)(GLuint index
, const GLfloat
* v
)
742 GET_CURRENT_CONTEXT(ctx
);
743 if (index
< VBO_ATTRIB_MAX
)
747 static void GLAPIENTRY
748 TAG(VertexAttrib2fNV
)(GLuint index
, GLfloat x
, GLfloat y
)
750 GET_CURRENT_CONTEXT(ctx
);
751 if (index
< VBO_ATTRIB_MAX
)
755 static void GLAPIENTRY
756 TAG(VertexAttrib2fvNV
)(GLuint index
, const GLfloat
* v
)
758 GET_CURRENT_CONTEXT(ctx
);
759 if (index
< VBO_ATTRIB_MAX
)
763 static void GLAPIENTRY
764 TAG(VertexAttrib3fNV
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
)
766 GET_CURRENT_CONTEXT(ctx
);
767 if (index
< VBO_ATTRIB_MAX
)
768 ATTR3F(index
, x
, y
, z
);
771 static void GLAPIENTRY
772 TAG(VertexAttrib3fvNV
)(GLuint index
,
775 GET_CURRENT_CONTEXT(ctx
);
776 if (index
< VBO_ATTRIB_MAX
)
780 static void GLAPIENTRY
781 TAG(VertexAttrib4fNV
)(GLuint index
, GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
)
783 GET_CURRENT_CONTEXT(ctx
);
784 if (index
< VBO_ATTRIB_MAX
)
785 ATTR4F(index
, x
, y
, z
, w
);
788 static void GLAPIENTRY
789 TAG(VertexAttrib4fvNV
)(GLuint index
, const GLfloat
* v
)
791 GET_CURRENT_CONTEXT(ctx
);
792 if (index
< VBO_ATTRIB_MAX
)
796 static void GLAPIENTRY
797 TAG(VertexP2ui
)(GLenum type
, GLuint value
)
799 GET_CURRENT_CONTEXT(ctx
);
800 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP2ui");
801 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_POS
, value
);
804 static void GLAPIENTRY
805 TAG(VertexP2uiv
)(GLenum type
, const GLuint
*value
)
807 GET_CURRENT_CONTEXT(ctx
);
808 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP2uiv");
809 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_POS
, value
[0]);
812 static void GLAPIENTRY
813 TAG(VertexP3ui
)(GLenum type
, GLuint value
)
815 GET_CURRENT_CONTEXT(ctx
);
816 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP3ui");
817 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_POS
, value
);
820 static void GLAPIENTRY
821 TAG(VertexP3uiv
)(GLenum type
, const GLuint
*value
)
823 GET_CURRENT_CONTEXT(ctx
);
824 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP3uiv");
825 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_POS
, value
[0]);
828 static void GLAPIENTRY
829 TAG(VertexP4ui
)(GLenum type
, GLuint value
)
831 GET_CURRENT_CONTEXT(ctx
);
832 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP4ui");
833 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_POS
, value
);
836 static void GLAPIENTRY
837 TAG(VertexP4uiv
)(GLenum type
, const GLuint
*value
)
839 GET_CURRENT_CONTEXT(ctx
);
840 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexP4uiv");
841 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_POS
, value
[0]);
844 static void GLAPIENTRY
845 TAG(TexCoordP1ui
)(GLenum type
, GLuint coords
)
847 GET_CURRENT_CONTEXT(ctx
);
848 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP1ui");
849 ATTR_UI(ctx
, 1, type
, 0, VBO_ATTRIB_TEX0
, coords
);
852 static void GLAPIENTRY
853 TAG(TexCoordP1uiv
)(GLenum type
, const GLuint
*coords
)
855 GET_CURRENT_CONTEXT(ctx
);
856 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP1uiv");
857 ATTR_UI(ctx
, 1, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
860 static void GLAPIENTRY
861 TAG(TexCoordP2ui
)(GLenum type
, GLuint coords
)
863 GET_CURRENT_CONTEXT(ctx
);
864 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP2ui");
865 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_TEX0
, coords
);
868 static void GLAPIENTRY
869 TAG(TexCoordP2uiv
)(GLenum type
, const GLuint
*coords
)
871 GET_CURRENT_CONTEXT(ctx
);
872 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP2uiv");
873 ATTR_UI(ctx
, 2, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
876 static void GLAPIENTRY
877 TAG(TexCoordP3ui
)(GLenum type
, GLuint coords
)
879 GET_CURRENT_CONTEXT(ctx
);
880 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP3ui");
881 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_TEX0
, coords
);
884 static void GLAPIENTRY
885 TAG(TexCoordP3uiv
)(GLenum type
, const GLuint
*coords
)
887 GET_CURRENT_CONTEXT(ctx
);
888 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP3uiv");
889 ATTR_UI(ctx
, 3, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
892 static void GLAPIENTRY
893 TAG(TexCoordP4ui
)(GLenum type
, GLuint coords
)
895 GET_CURRENT_CONTEXT(ctx
);
896 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP4ui");
897 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_TEX0
, coords
);
900 static void GLAPIENTRY
901 TAG(TexCoordP4uiv
)(GLenum type
, const GLuint
*coords
)
903 GET_CURRENT_CONTEXT(ctx
);
904 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glTexCoordP4uiv");
905 ATTR_UI(ctx
, 4, type
, 0, VBO_ATTRIB_TEX0
, coords
[0]);
908 static void GLAPIENTRY
909 TAG(MultiTexCoordP1ui
)(GLenum target
, GLenum type
, GLuint coords
)
911 GET_CURRENT_CONTEXT(ctx
);
912 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
913 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP1ui");
914 ATTR_UI(ctx
, 1, type
, 0, attr
, coords
);
917 static void GLAPIENTRY
918 TAG(MultiTexCoordP1uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
920 GET_CURRENT_CONTEXT(ctx
);
921 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
922 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP1uiv");
923 ATTR_UI(ctx
, 1, type
, 0, attr
, coords
[0]);
926 static void GLAPIENTRY
927 TAG(MultiTexCoordP2ui
)(GLenum target
, GLenum type
, GLuint coords
)
929 GET_CURRENT_CONTEXT(ctx
);
930 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
931 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP2ui");
932 ATTR_UI(ctx
, 2, type
, 0, attr
, coords
);
935 static void GLAPIENTRY
936 TAG(MultiTexCoordP2uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
938 GET_CURRENT_CONTEXT(ctx
);
939 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
940 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP2uiv");
941 ATTR_UI(ctx
, 2, type
, 0, attr
, coords
[0]);
944 static void GLAPIENTRY
945 TAG(MultiTexCoordP3ui
)(GLenum target
, GLenum type
, GLuint coords
)
947 GET_CURRENT_CONTEXT(ctx
);
948 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
949 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP3ui");
950 ATTR_UI(ctx
, 3, type
, 0, attr
, coords
);
953 static void GLAPIENTRY
954 TAG(MultiTexCoordP3uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
956 GET_CURRENT_CONTEXT(ctx
);
957 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
958 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP3uiv");
959 ATTR_UI(ctx
, 3, type
, 0, attr
, coords
[0]);
962 static void GLAPIENTRY
963 TAG(MultiTexCoordP4ui
)(GLenum target
, GLenum type
, GLuint coords
)
965 GET_CURRENT_CONTEXT(ctx
);
966 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
967 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP4ui");
968 ATTR_UI(ctx
, 4, type
, 0, attr
, coords
);
971 static void GLAPIENTRY
972 TAG(MultiTexCoordP4uiv
)(GLenum target
, GLenum type
, const GLuint
*coords
)
974 GET_CURRENT_CONTEXT(ctx
);
975 GLuint attr
= (target
& 0x7) + VBO_ATTRIB_TEX0
;
976 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glMultiTexCoordP4uiv");
977 ATTR_UI(ctx
, 4, type
, 0, attr
, coords
[0]);
980 static void GLAPIENTRY
981 TAG(NormalP3ui
)(GLenum type
, GLuint coords
)
983 GET_CURRENT_CONTEXT(ctx
);
984 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glNormalP3ui");
985 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_NORMAL
, coords
);
988 static void GLAPIENTRY
989 TAG(NormalP3uiv
)(GLenum type
, const GLuint
*coords
)
991 GET_CURRENT_CONTEXT(ctx
);
992 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glNormalP3uiv");
993 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_NORMAL
, coords
[0]);
996 static void GLAPIENTRY
997 TAG(ColorP3ui
)(GLenum type
, GLuint color
)
999 GET_CURRENT_CONTEXT(ctx
);
1000 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP3ui");
1001 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR0
, color
);
1004 static void GLAPIENTRY
1005 TAG(ColorP3uiv
)(GLenum type
, const GLuint
*color
)
1007 GET_CURRENT_CONTEXT(ctx
);
1008 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP3uiv");
1009 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR0
, color
[0]);
1012 static void GLAPIENTRY
1013 TAG(ColorP4ui
)(GLenum type
, GLuint color
)
1015 GET_CURRENT_CONTEXT(ctx
);
1016 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP4ui");
1017 ATTR_UI(ctx
, 4, type
, 1, VBO_ATTRIB_COLOR0
, color
);
1020 static void GLAPIENTRY
1021 TAG(ColorP4uiv
)(GLenum type
, const GLuint
*color
)
1023 GET_CURRENT_CONTEXT(ctx
);
1024 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glColorP4uiv");
1025 ATTR_UI(ctx
, 4, type
, 1, VBO_ATTRIB_COLOR0
, color
[0]);
1028 static void GLAPIENTRY
1029 TAG(SecondaryColorP3ui
)(GLenum type
, GLuint color
)
1031 GET_CURRENT_CONTEXT(ctx
);
1032 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glSecondaryColorP3ui");
1033 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR1
, color
);
1036 static void GLAPIENTRY
1037 TAG(SecondaryColorP3uiv
)(GLenum type
, const GLuint
*color
)
1039 GET_CURRENT_CONTEXT(ctx
);
1040 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glSecondaryColorP3uiv");
1041 ATTR_UI(ctx
, 3, type
, 1, VBO_ATTRIB_COLOR1
, color
[0]);
1044 static void GLAPIENTRY
1045 TAG(VertexAttribP1ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1048 GET_CURRENT_CONTEXT(ctx
);
1049 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP1ui");
1050 ATTR_UI_INDEX(ctx
, 1, type
, normalized
, index
, value
);
1053 static void GLAPIENTRY
1054 TAG(VertexAttribP2ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1057 GET_CURRENT_CONTEXT(ctx
);
1058 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP2ui");
1059 ATTR_UI_INDEX(ctx
, 2, type
, normalized
, index
, value
);
1062 static void GLAPIENTRY
1063 TAG(VertexAttribP3ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1066 GET_CURRENT_CONTEXT(ctx
);
1067 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP3ui");
1068 ATTR_UI_INDEX(ctx
, 3, type
, normalized
, index
, value
);
1071 static void GLAPIENTRY
1072 TAG(VertexAttribP4ui
)(GLuint index
, GLenum type
, GLboolean normalized
,
1075 GET_CURRENT_CONTEXT(ctx
);
1076 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexAttribP4ui");
1077 ATTR_UI_INDEX(ctx
, 4, type
, normalized
, index
, value
);
1080 static void GLAPIENTRY
1081 TAG(VertexAttribP1uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1082 const GLuint
*value
)
1084 GET_CURRENT_CONTEXT(ctx
);
1085 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP1uiv");
1086 ATTR_UI_INDEX(ctx
, 1, type
, normalized
, index
, *value
);
1089 static void GLAPIENTRY
1090 TAG(VertexAttribP2uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1091 const GLuint
*value
)
1093 GET_CURRENT_CONTEXT(ctx
);
1094 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP2uiv");
1095 ATTR_UI_INDEX(ctx
, 2, type
, normalized
, index
, *value
);
1098 static void GLAPIENTRY
1099 TAG(VertexAttribP3uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1100 const GLuint
*value
)
1102 GET_CURRENT_CONTEXT(ctx
);
1103 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx
, type
, "glVertexAttribP3uiv");
1104 ATTR_UI_INDEX(ctx
, 3, type
, normalized
, index
, *value
);
1107 static void GLAPIENTRY
1108 TAG(VertexAttribP4uiv
)(GLuint index
, GLenum type
, GLboolean normalized
,
1109 const GLuint
*value
)
1111 GET_CURRENT_CONTEXT(ctx
);
1112 ERROR_IF_NOT_PACKED_TYPE(ctx
, type
, "glVertexAttribP4uiv");
1113 ATTR_UI_INDEX(ctx
, 4, type
, normalized
, index
, *value
);
1118 static void GLAPIENTRY
1119 TAG(VertexAttribL1d
)(GLuint index
, GLdouble x
)
1121 GET_CURRENT_CONTEXT(ctx
);
1122 if (is_vertex_position(ctx
, index
))
1124 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1125 ATTR1D(VBO_ATTRIB_GENERIC0
+ index
, x
);
1127 ERROR(GL_INVALID_VALUE
);
1130 static void GLAPIENTRY
1131 TAG(VertexAttribL1dv
)(GLuint index
, const GLdouble
* v
)
1133 GET_CURRENT_CONTEXT(ctx
);
1134 if (is_vertex_position(ctx
, index
))
1136 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1137 ATTR1DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1139 ERROR(GL_INVALID_VALUE
);
1142 static void GLAPIENTRY
1143 TAG(VertexAttribL2d
)(GLuint index
, GLdouble x
, GLdouble y
)
1145 GET_CURRENT_CONTEXT(ctx
);
1146 if (is_vertex_position(ctx
, index
))
1148 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1149 ATTR2D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
);
1151 ERROR(GL_INVALID_VALUE
);
1154 static void GLAPIENTRY
1155 TAG(VertexAttribL2dv
)(GLuint index
, const GLdouble
* v
)
1157 GET_CURRENT_CONTEXT(ctx
);
1158 if (is_vertex_position(ctx
, index
))
1160 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1161 ATTR2DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1163 ERROR(GL_INVALID_VALUE
);
1166 static void GLAPIENTRY
1167 TAG(VertexAttribL3d
)(GLuint index
, GLdouble x
, GLdouble y
, GLdouble z
)
1169 GET_CURRENT_CONTEXT(ctx
);
1170 if (is_vertex_position(ctx
, index
))
1172 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1173 ATTR3D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
);
1175 ERROR(GL_INVALID_VALUE
);
1178 static void GLAPIENTRY
1179 TAG(VertexAttribL3dv
)(GLuint index
, const GLdouble
* v
)
1181 GET_CURRENT_CONTEXT(ctx
);
1182 if (is_vertex_position(ctx
, index
))
1184 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1185 ATTR3DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1187 ERROR(GL_INVALID_VALUE
);
1190 static void GLAPIENTRY
1191 TAG(VertexAttribL4d
)(GLuint index
, GLdouble x
, GLdouble y
, GLdouble z
, GLdouble w
)
1193 GET_CURRENT_CONTEXT(ctx
);
1194 if (is_vertex_position(ctx
, index
))
1195 ATTR4D(0, x
, y
, z
, w
);
1196 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1197 ATTR4D(VBO_ATTRIB_GENERIC0
+ index
, x
, y
, z
, w
);
1199 ERROR(GL_INVALID_VALUE
);
1202 static void GLAPIENTRY
1203 TAG(VertexAttribL4dv
)(GLuint index
, const GLdouble
* v
)
1205 GET_CURRENT_CONTEXT(ctx
);
1206 if (is_vertex_position(ctx
, index
))
1208 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1209 ATTR4DV(VBO_ATTRIB_GENERIC0
+ index
, v
);
1211 ERROR(GL_INVALID_VALUE
);
1214 static void GLAPIENTRY
1215 TAG(VertexAttribL1ui64ARB
)(GLuint index
, GLuint64EXT x
)
1217 GET_CURRENT_CONTEXT(ctx
);
1218 if (is_vertex_position(ctx
, index
))
1220 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1221 ATTR1UI64(VBO_ATTRIB_GENERIC0
+ index
, x
);
1223 ERROR(GL_INVALID_VALUE
);
1226 static void GLAPIENTRY
1227 TAG(VertexAttribL1ui64vARB
)(GLuint index
, const GLuint64EXT
*v
)
1229 GET_CURRENT_CONTEXT(ctx
);
1230 if (is_vertex_position(ctx
, index
))
1232 else if (index
< MAX_VERTEX_GENERIC_ATTRIBS
)
1233 ATTR1UIV64(VBO_ATTRIB_GENERIC0
+ index
, v
);
1235 ERROR(GL_INVALID_VALUE
);