1fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/**************************************************************************
2fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
3fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellCopyright 2002 Tungsten Graphics Inc., Cedar Park, Texas.
451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieCopyright 2011 Dave Airlie (ARB_vertex_type_2_10_10_10_rev support)
5fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellAll Rights Reserved.
6fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
7fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellPermission is hereby granted, free of charge, to any person obtaining a
8fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellcopy of this software and associated documentation files (the "Software"),
9fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellto deal in the Software without restriction, including without limitation
10fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellon the rights to use, copy, modify, merge, publish, distribute, sub
11fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwelllicense, and/or sell copies of the Software, and to permit persons to whom
12fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellthe Software is furnished to do so, subject to the following conditions:
13fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
14fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellThe above copyright notice and this permission notice (including the next
15fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellparagraph) shall be included in all copies or substantial portions of the
16fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellSoftware.
17fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
18fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellTUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellUSE OR OTHER DEALINGS IN THE SOFTWARE.
25fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
26fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell**************************************************************************/
27fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
28ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul/* float */
29492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR1FV( A, V ) ATTR( A, 1, GL_FLOAT, (V)[0], 0, 0, 1 )
30492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2FV( A, V ) ATTR( A, 2, GL_FLOAT, (V)[0], (V)[1], 0, 1 )
31492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3FV( A, V ) ATTR( A, 3, GL_FLOAT, (V)[0], (V)[1], (V)[2], 1 )
32492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4FV( A, V ) ATTR( A, 4, GL_FLOAT, (V)[0], (V)[1], (V)[2], (V)[3] )
33fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
34492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR1F( A, X )          ATTR( A, 1, GL_FLOAT, X, 0, 0, 1 )
35492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2F( A, X, Y )       ATTR( A, 2, GL_FLOAT, X, Y, 0, 1 )
36492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3F( A, X, Y, Z )    ATTR( A, 3, GL_FLOAT, X, Y, Z, 1 )
37492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, GL_FLOAT, X, Y, Z, W )
38fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
39ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul/* int */
40492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI( A, N, X, Y, Z, W) ATTR( A, N, GL_INT, \
41492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák                                       INT_AS_FLT(X), INT_AS_FLT(Y), \
42492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák                                       INT_AS_FLT(Z), INT_AS_FLT(W) )
43ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
44492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 )
45492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
46492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
47492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák
48492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR1I( A, X )          ATTRI( A, 1, X, 0, 0, 1 )
49492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2I( A, X, Y )       ATTRI( A, 2, X, Y, 0, 1 )
50492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3I( A, X, Y, Z )    ATTRI( A, 3, X, Y, Z, 1 )
51492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W )
52ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
53ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
54ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul/* uint */
55492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI( A, N, X, Y, Z, W) ATTR( A, N, GL_UNSIGNED_INT, \
56492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák                                        UINT_AS_FLT(X), UINT_AS_FLT(Y), \
57492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák                                        UINT_AS_FLT(Z), UINT_AS_FLT(W) )
58492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák
59492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 )
60492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
61492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
62ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
63492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR1UI( A, X )          ATTRUI( A, 1, X, 0, 0, 1 )
64492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR2UI( A, X, Y )       ATTRUI( A, 2, X, Y, 0, 1 )
65492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR3UI( A, X, Y, Z )    ATTRUI( A, 3, X, Y, Z, 1 )
66492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W )
67ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
68492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define MAT_ATTR( A, N, V ) ATTR( A, N, GL_FLOAT, (V)[0], (V)[1], (V)[2], (V)[3] )
69fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
709520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_ui10_to_norm_float(unsigned ui10)
7151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
7251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (float)(ui10) / 1023.0;
7351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
7451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
759520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_ui2_to_norm_float(unsigned ui2)
7651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
7751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (float)(ui2) / 3.0;
7851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
7951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
80492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10_1( A, UI ) ATTR( A, 1, GL_FLOAT, (UI) & 0x3ff, 0, 0, 1 )
81492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10_2( A, UI ) ATTR( A, 2, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
82492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10_3( A, UI ) ATTR( A, 3, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
83492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10_4( A, UI ) ATTR( A, 4, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
8451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
85492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10N_1( A, UI ) ATTR( A, 1, GL_FLOAT, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
86492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10N_2( A, UI ) ATTR( A, 2, GL_FLOAT, \
8751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float((UI) & 0x3ff), \
8851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 )
89492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10N_3( A, UI ) ATTR( A, 3, GL_FLOAT, \
9051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float((UI) & 0x3ff), \
9151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
9251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 )
93492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRUI10N_4( A, UI ) ATTR( A, 4, GL_FLOAT, \
9451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float((UI) & 0x3ff), \
9551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
9651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \
9751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				   conv_ui2_to_norm_float(((UI) >> 30) & 0x3) )
9851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
9951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestruct attr_bits_10 {signed int x:10;};
10051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestruct attr_bits_2 {signed int x:2;};
10151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1029520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_i10_to_i(int i10)
10351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
10451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   struct attr_bits_10 val;
10551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   val.x = i10;
10651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (float)val.x;
10751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
10851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1099520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_i2_to_i(int i2)
11051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
11151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   struct attr_bits_2 val;
11251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   val.x = i2;
11351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (float)val.x;
11451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
11551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1169520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_i10_to_norm_float(int i10)
11751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
11851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   struct attr_bits_10 val;
11951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   val.x = i10;
12051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (2.0F * (float)val.x + 1.0F) * (1.0F  / 511.0F);
12151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
12251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1239520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline float conv_i2_to_norm_float(int i2)
12451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
12551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   struct attr_bits_2 val;
12651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   val.x = i2;
12751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   return (float)val.x;
12851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
12951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
130492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10_1( A, I10 ) ATTR( A, 1, GL_FLOAT, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
131492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10_2( A, I10 ) ATTR( A, 2, GL_FLOAT, \
13251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i((I10) & 0x3ff),		\
13351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 )
134492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10_3( A, I10 ) ATTR( A, 3, GL_FLOAT, \
13551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i((I10) & 0x3ff),	    \
13651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i(((I10) >> 10) & 0x3ff), \
13751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 )
138492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10_4( A, I10 ) ATTR( A, 4, GL_FLOAT, \
13951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i((I10) & 0x3ff),		\
14051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i(((I10) >> 10) & 0x3ff), \
14151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_i(((I10) >> 20) & 0x3ff), \
14251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i2_to_i(((I10) >> 30) & 0x3))
14351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
14451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
145492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10N_1( A, I10 ) ATTR( A, 1, GL_FLOAT, conv_i10_to_norm_float((I10) & 0x3ff), 0, 0, 1 )
146492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10N_2( A, I10 ) ATTR( A, 2, GL_FLOAT, \
14751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float((I10) & 0x3ff),		\
14851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), 0, 1 )
149492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10N_3( A, I10 ) ATTR( A, 3, GL_FLOAT, \
15051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float((I10) & 0x3ff),	    \
15151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
15251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), 1 )
153492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák#define ATTRI10N_4( A, I10 ) ATTR( A, 4, GL_FLOAT, \
15451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float((I10) & 0x3ff),		\
15551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
15651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), \
15751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie				conv_i2_to_norm_float(((I10) >> 30) & 0x3))
15851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
15951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie#define ATTR_UI(val, type, normalized, attr, arg) do {		\
16051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) {		\
16151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      if (normalized) {						\
16251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTRUI10N_##val((attr), (arg));			\
16351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      } else {							\
16451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTRUI10_##val((attr), (arg));				\
16551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      }								\
16651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   }   else if ((type) == GL_INT_2_10_10_10_REV) {		\
16751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      if (normalized) {						\
16851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTRI10N_##val((attr), (arg));				\
16951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      } else {							\
17051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTRI10_##val((attr), (arg));				\
17151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      }								\
17251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   } else							\
17351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      ERROR(GL_INVALID_VALUE);					\
17451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   } while(0)
17551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
17651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie#define ATTR_UI_INDEX(val, type, normalized, index, arg) do {	\
17751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      if ((index) == 0) {					\
17851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTR_UI(val, (type), normalized, 0, (arg));			\
17951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      } else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) {		\
18051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ATTR_UI(val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \
18151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie      } else								\
18251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie	 ERROR(GL_INVALID_VALUE);					\
18351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   } while(0)
184beea704be231ef13edab93a7299efa297039239dBrian Paul
185beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
186beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex2f)(GLfloat x, GLfloat y)
187fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
188beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
189beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2F(VBO_ATTRIB_POS, x, y);
190fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
191fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
192beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
193beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex2fv)(const GLfloat * v)
194fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
195beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
196beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2FV(VBO_ATTRIB_POS, v);
197fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
198fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
199beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
200beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
201fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
202beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
203beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(VBO_ATTRIB_POS, x, y, z);
204fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
205fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
206beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
207beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex3fv)(const GLfloat * v)
208fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
209beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
210beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(VBO_ATTRIB_POS, v);
211fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
212fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
213beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
214beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
215fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
216beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
217beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4F(VBO_ATTRIB_POS, x, y, z, w);
218fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
219fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
220beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
221beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Vertex4fv)(const GLfloat * v)
222fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
223beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
224beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4FV(VBO_ATTRIB_POS, v);
225fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
226fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
227beea704be231ef13edab93a7299efa297039239dBrian Paul
228beea704be231ef13edab93a7299efa297039239dBrian Paul
229beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
230beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord1f)(GLfloat x)
231fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
232beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
233beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1F(VBO_ATTRIB_TEX0, x);
234fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
235fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
236beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
237beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord1fv)(const GLfloat * v)
238fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
239beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
240beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1FV(VBO_ATTRIB_TEX0, v);
241fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
242fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
243beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
244beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord2f)(GLfloat x, GLfloat y)
245fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
246beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
247beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2F(VBO_ATTRIB_TEX0, x, y);
248fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
249fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
250beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
251beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord2fv)(const GLfloat * v)
252fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
253beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
254beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2FV(VBO_ATTRIB_TEX0, v);
255fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
256fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
257beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
258beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z)
259fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
260beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
261beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(VBO_ATTRIB_TEX0, x, y, z);
262fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
263fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
264beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
265beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord3fv)(const GLfloat * v)
266fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
267beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
268beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(VBO_ATTRIB_TEX0, v);
269fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
270fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
271beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
272beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
273fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
274beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
275beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4F(VBO_ATTRIB_TEX0, x, y, z, w);
276fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
277fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
278beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
279beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(TexCoord4fv)(const GLfloat * v)
280fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
281beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
282beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4FV(VBO_ATTRIB_TEX0, v);
283fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
284fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
285beea704be231ef13edab93a7299efa297039239dBrian Paul
286beea704be231ef13edab93a7299efa297039239dBrian Paul
287beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
288beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z)
289fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
290beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
291beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(VBO_ATTRIB_NORMAL, x, y, z);
292fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
293fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
294beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
295beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Normal3fv)(const GLfloat * v)
296fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
297beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
298beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(VBO_ATTRIB_NORMAL, v);
299fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
300fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
301beea704be231ef13edab93a7299efa297039239dBrian Paul
302beea704be231ef13edab93a7299efa297039239dBrian Paul
303beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
304beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(FogCoordfEXT)(GLfloat x)
305fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
306beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
307beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1F(VBO_ATTRIB_FOG, x);
308fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
309fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
310beea704be231ef13edab93a7299efa297039239dBrian Paul
311beea704be231ef13edab93a7299efa297039239dBrian Paul
312beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
313beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(FogCoordfvEXT)(const GLfloat * v)
314fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
315beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
316beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1FV(VBO_ATTRIB_FOG, v);
317fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
318fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
319beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
320beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Color3f)(GLfloat x, GLfloat y, GLfloat z)
321fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
322beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
323beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(VBO_ATTRIB_COLOR0, x, y, z);
324fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
325fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
326beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
327beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Color3fv)(const GLfloat * v)
328fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
329beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
330beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(VBO_ATTRIB_COLOR0, v);
331fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
332fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
333beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
334beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
335fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
336beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
337beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4F(VBO_ATTRIB_COLOR0, x, y, z, w);
338fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
339fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
340beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
341beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Color4fv)(const GLfloat * v)
342fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
343beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
344beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4FV(VBO_ATTRIB_COLOR0, v);
345fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
346fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
347beea704be231ef13edab93a7299efa297039239dBrian Paul
348beea704be231ef13edab93a7299efa297039239dBrian Paul
349beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
350beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(SecondaryColor3fEXT)(GLfloat x, GLfloat y, GLfloat z)
351fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
352beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
353beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(VBO_ATTRIB_COLOR1, x, y, z);
354fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
355fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
356beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
357beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(SecondaryColor3fvEXT)(const GLfloat * v)
358fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
359beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
360beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(VBO_ATTRIB_COLOR1, v);
361fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
362fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
363fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
364beea704be231ef13edab93a7299efa297039239dBrian Paul
365beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
366beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(EdgeFlag)(GLboolean b)
367fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
368beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
369beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b);
370fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
371fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
372beea704be231ef13edab93a7299efa297039239dBrian Paul
373beea704be231ef13edab93a7299efa297039239dBrian Paul
374beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
375beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Indexf)(GLfloat f)
376fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
377beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
378beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1F(VBO_ATTRIB_INDEX, f);
379fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
380fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
381beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
382beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(Indexfv)(const GLfloat * f)
383fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
384beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
385beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1FV(VBO_ATTRIB_INDEX, f);
386fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
387fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
388fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
389beea704be231ef13edab93a7299efa297039239dBrian Paul
390beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
391beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord1f)(GLenum target, GLfloat x)
392fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
393beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
394fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
395beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1F(attr, x);
396fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
397fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
398beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
399beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
400fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
401beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
402fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
403beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR1FV(attr, v);
404fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
405fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
406beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
407beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord2f)(GLenum target, GLfloat x, GLfloat y)
408fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
409beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
410fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
411beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2F(attr, x, y);
412fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
413fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
414beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
415beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
416fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
417beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
418fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
419beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR2FV(attr, v);
420fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
421fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
422beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
423beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord3f)(GLenum target, GLfloat x, GLfloat y, GLfloat z)
424fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
425beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
426fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
427beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3F(attr, x, y, z);
428fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
429fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
430beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
431beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
432fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
433beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
434fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
435beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR3FV(attr, v);
436fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
437fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
438beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
439beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord4f)(GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
440fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
441beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
442fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
443beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4F(attr, x, y, z, w);
444fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
445fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
446beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
447beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
448fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
449beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
450fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
451beea704be231ef13edab93a7299efa297039239dBrian Paul   ATTR4FV(attr, v);
452fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
453fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
454fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
455beea704be231ef13edab93a7299efa297039239dBrian Paul
456beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
457beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib1fARB)(GLuint index, GLfloat x)
458fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
459beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
460beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
461fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1F(0, x);
4624a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
463fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1F(VBO_ATTRIB_GENERIC0 + index, x);
464fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
465a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
466fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
467fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
468beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
469beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v)
470fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
471beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
472beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
473fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1FV(0, v);
4744a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
475fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v);
476fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
477a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
478fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
479fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
480beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
481beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y)
482fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
483beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
484beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
485fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2F(0, x, y);
4864a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
487fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y);
488fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
489a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
490fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
491fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
492beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
493beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v)
494fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
495beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
496beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
497fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2FV(0, v);
4984a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
499fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v);
500fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
501a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
502fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
503fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
504beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
505beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
506fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
507beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
508beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
509fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3F(0, x, y, z);
5104a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
511fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z);
512fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
513a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
514fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
515fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
516beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
517beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v)
518fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
519beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
520beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
521fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3FV(0, v);
5224a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
523fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v);
524fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
525a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
526fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
527fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
528beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
529beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
530fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
531beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
532beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
533fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4F(0, x, y, z, w);
5344a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
535fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
536fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
537a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
538fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
539fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
540beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
541beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)
542fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
543beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
544beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index == 0)
545fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4FV(0, v);
5464a95185c9f30c2de7a03bb1a0653f51b53b1111dBrian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
547fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v);
548fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   else
549a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
550fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
551fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
552fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
553ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
554ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul/* Integer-valued generic attributes.
555ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul * XXX: the integers just get converted to floats at this time
556ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul */
557ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
558ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI1i)(GLuint index, GLint x)
559ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
560ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
561ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
562ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR1I(0, x);
563ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
564ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR1I(VBO_ATTRIB_GENERIC0 + index, x);
565ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
566a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
567ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
568ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
569ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
570ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI2i)(GLuint index, GLint x, GLint y)
571ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
572ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
573ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
574ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2I(0, x, y);
575ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
576ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y);
577ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
578a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
579ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
580ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
581ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
582ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z)
583ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
584ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
585ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
586ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3I(0, x, y, z);
587ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
588ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z);
589ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
590a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
591ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
592ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
593ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
594ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w)
595ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
596ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
597ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
598ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4I(0, x, y, z, w);
599ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
600ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
601ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
602a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
603ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
604ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
605ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
606ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI2iv)(GLuint index, const GLint *v)
607ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
608ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
609ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
610ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2IV(0, v);
611ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
612ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v);
613ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
614a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
615ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
616ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
617ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
618ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI3iv)(GLuint index, const GLint *v)
619ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
620ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
621ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
622ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3IV(0, v);
623ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
624ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v);
625ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
626a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
627ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
628ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
629ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
630ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI4iv)(GLuint index, const GLint *v)
631ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
632ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
633ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
634ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4IV(0, v);
635ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
636ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v);
637ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
638a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
639ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
640ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
641ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
642ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
643ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul/* Unsigned integer-valued generic attributes.
644ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul * XXX: the integers just get converted to floats at this time
645ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul */
646ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
647ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI1ui)(GLuint index, GLuint x)
648ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
649ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
650ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
651ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR1UI(0, x);
652ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
653ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x);
654ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
655a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
656ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
657ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
658ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
659ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y)
660ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
661ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
662ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
663ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2UI(0, x, y);
664ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
665ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y);
666ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
667a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
668ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
669ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
670ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
671ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z)
672ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
673ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
674ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
675ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3UI(0, x, y, z);
676ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
677ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z);
678ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
679a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
680ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
681ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
682ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
683ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
684ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
685ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
686ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
687ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4UI(0, x, y, z, w);
688ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
689ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
690ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
691a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
692ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
693ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
694ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
695ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI2uiv)(GLuint index, const GLuint *v)
696ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
697ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
698ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
699ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2UIV(0, v);
700ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
701ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v);
702ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
703a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
704ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
705ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
706ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
707ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI3uiv)(GLuint index, const GLuint *v)
708ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
709ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
710ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
711ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3UIV(0, v);
712ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
713ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v);
714ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
715a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
716ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
717ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
718ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paulstatic void GLAPIENTRY
719ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian PaulTAG(VertexAttribI4uiv)(GLuint index, const GLuint *v)
720ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul{
721ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   GET_CURRENT_CONTEXT(ctx);
722ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   if (index == 0)
723ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4UIV(0, v);
724ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
725ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul      ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v);
726ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul   else
727a2924b488b8d77381779bbb5a0097c467678d39bBrian Paul      ERROR(GL_INVALID_VALUE);
728ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul}
729ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
730ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
731ca2618f4b632bf4b357a539a8fb7dafc99b35976Brian Paul
7322421b25dd777ebfd614ae45907fd4af8c2713102Keith Whitwell/* In addition to supporting NV_vertex_program, these entrypoints are
733fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * used by the display list and other code specifically because of
7342421b25dd777ebfd614ae45907fd4af8c2713102Keith Whitwell * their property of aliasing with other attributes.  (See
7352421b25dd777ebfd614ae45907fd4af8c2713102Keith Whitwell * vbo_save_loopback.c)
736fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */
737beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
738beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib1fNV)(GLuint index, GLfloat x)
739fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
740beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
741fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   if (index < VBO_ATTRIB_MAX)
742fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1F(index, x);
743fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
744fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
745beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
746beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
747fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
748beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
749beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
750fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR1FV(index, v);
751fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
752fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
753beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
754beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
755fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
756beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
757beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
758fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2F(index, x, y);
759fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
760fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
761beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
762beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
763fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
764beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
765beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
766fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR2FV(index, v);
767fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
768fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
769beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
770beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
771fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
772beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
773beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
774fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3F(index, x, y, z);
775fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
776fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
777beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
778beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib3fvNV)(GLuint index,
779beea704be231ef13edab93a7299efa297039239dBrian Paul const GLfloat * v)
780fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
781beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
782beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
783fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR3FV(index, v);
784fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
785fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
786beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
787beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
788fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
789beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
790beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
791fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4F(index, x, y, z, w);
792fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
793fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
794beea704be231ef13edab93a7299efa297039239dBrian Paulstatic void GLAPIENTRY
795beea704be231ef13edab93a7299efa297039239dBrian PaulTAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
796fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
797beea704be231ef13edab93a7299efa297039239dBrian Paul   GET_CURRENT_CONTEXT(ctx);
798beea704be231ef13edab93a7299efa297039239dBrian Paul   if (index < VBO_ATTRIB_MAX)
799fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ATTR4FV(index, v);
800fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
801fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
802fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
80351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
80451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP2ui)(GLenum type, GLuint value)
80551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
80651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
80751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, VBO_ATTRIB_POS, value);
80851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
80951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
81051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
81151fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP2uiv)(GLenum type, const GLuint *value)
81251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
81351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
81451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, VBO_ATTRIB_POS, value[0]);
81551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
81651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
81751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
81851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP3ui)(GLenum type, GLuint value)
81951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
82051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
82151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, VBO_ATTRIB_POS, value);
82251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
82351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
82451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
82551fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP3uiv)(GLenum type, const GLuint *value)
82651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
82751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
82851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, VBO_ATTRIB_POS, value[0]);
82951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
83051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
83151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
83251fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP4ui)(GLenum type, GLuint value)
83351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
83451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
83551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, VBO_ATTRIB_POS, value);
83651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
83751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
83851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
83951fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexP4uiv)(GLenum type, const GLuint *value)
84051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
84151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
84251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, VBO_ATTRIB_POS, value[0]);
84351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
84451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
84551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
84651fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP1ui)(GLenum type, GLuint coords)
84751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
84851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
84951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(1, type, 0, VBO_ATTRIB_TEX0, coords);
85051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
85151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
85251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
85351fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP1uiv)(GLenum type, const GLuint *coords)
85451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
85551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
85651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(1, type, 0, VBO_ATTRIB_TEX0, coords[0]);
85751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
85851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
85951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
86051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP2ui)(GLenum type, GLuint coords)
86151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
86251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
86351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, VBO_ATTRIB_TEX0, coords);
86451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
86551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
86651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
86751fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP2uiv)(GLenum type, const GLuint *coords)
86851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
86951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
87051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, VBO_ATTRIB_TEX0, coords[0]);
87151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
87251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
87351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
87451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP3ui)(GLenum type, GLuint coords)
87551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
87651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
87751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, VBO_ATTRIB_TEX0, coords);
87851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
87951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
88051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
88151fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP3uiv)(GLenum type, const GLuint *coords)
88251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
88351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
88451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, VBO_ATTRIB_TEX0, coords[0]);
88551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
88651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
88751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
88851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP4ui)(GLenum type, GLuint coords)
88951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
89051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
89151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, VBO_ATTRIB_TEX0, coords);
89251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
89351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
89451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
89551fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(TexCoordP4uiv)(GLenum type, const GLuint *coords)
89651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
89751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
89851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, VBO_ATTRIB_TEX0, coords[0]);
89951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
90051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
90151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
90251fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP1ui)(GLenum target, GLenum type, GLuint coords)
90351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
90451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
90551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
90651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(1, type, 0, attr, coords);
90751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
90851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
90951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
91051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP1uiv)(GLenum target, GLenum type, const GLuint *coords)
91151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
91251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
91351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
91451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(1, type, 0, attr, coords[0]);
91551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
91651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
91751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
91851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP2ui)(GLenum target, GLenum type, GLuint coords)
91951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
92051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
92151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
92251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, attr, coords);
92351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
92451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
92551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
92651fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP2uiv)(GLenum target, GLenum type, const GLuint *coords)
92751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
92851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
92951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
93051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(2, type, 0, attr, coords[0]);
93151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
93251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
93351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
93451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP3ui)(GLenum target, GLenum type, GLuint coords)
93551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
93651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
93751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
93851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, attr, coords);
93951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
94051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
94151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
94251fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP3uiv)(GLenum target, GLenum type, const GLuint *coords)
94351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
94451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
94551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
94651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 0, attr, coords[0]);
94751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
94851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
94951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
95051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP4ui)(GLenum target, GLenum type, GLuint coords)
95151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
95251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
95351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
95451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, attr, coords);
95551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
95651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
95751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
95851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(MultiTexCoordP4uiv)(GLenum target, GLenum type, const GLuint *coords)
95951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
96051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
96151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
96251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 0, attr, coords[0]);
96351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
96451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
96551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
96651fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(NormalP3ui)(GLenum type, GLuint coords)
96751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
96851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
96951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_NORMAL, coords);
97051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
97151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
97251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
97351fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(NormalP3uiv)(GLenum type, const GLuint *coords)
97451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
97551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
97651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_NORMAL, coords[0]);
97751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
97851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
97951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
98051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(ColorP3ui)(GLenum type, GLuint color)
98151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
98251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
98351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR0, color);
98451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
98551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
98651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
98751fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(ColorP3uiv)(GLenum type, const GLuint *color)
98851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
98951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
99051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR0, color[0]);
99151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
99251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
99351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
99451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(ColorP4ui)(GLenum type, GLuint color)
99551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
99651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
99751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 1, VBO_ATTRIB_COLOR0, color);
99851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
99951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
100051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
100151fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(ColorP4uiv)(GLenum type, const GLuint *color)
100251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
100351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
100451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(4, type, 1, VBO_ATTRIB_COLOR0, color[0]);
100551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
100651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
100751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
100851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(SecondaryColorP3ui)(GLenum type, GLuint color)
100951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
101051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
101151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR1, color);
101251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
101351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
101451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
101551fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(SecondaryColorP3uiv)(GLenum type, const GLuint *color)
101651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
101751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
101851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR1, color[0]);
101951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
102051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
102151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
102251fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized,
102351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		      GLuint value)
102451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
102551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
102651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(1, type, normalized, index, value);
102751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
102851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
102951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
103051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized,
103151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		      GLuint value)
103251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
103351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
103451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(2, type, normalized, index, value);
103551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
103651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
103751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
103851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized,
103951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		      GLuint value)
104051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
104151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
104251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(3, type, normalized, index, value);
104351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
104451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
104551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
104651fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized,
104751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		      GLuint value)
104851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
104951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
105051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(4, type, normalized, index, value);
105151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
105251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
105351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
105451fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized,
105551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		       const GLuint *value)
105651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
105751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
105851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(1, type, normalized, index, *value);
105951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
106051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
106151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
106251fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized,
106351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		       const GLuint *value)
106451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
106551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
106651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(2, type, normalized, index, *value);
106751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
106851fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
106951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
107051fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized,
107151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		       const GLuint *value)
107251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
107351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
107451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(3, type, normalized, index, *value);
107551fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
107651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
107751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airliestatic void GLAPIENTRY
107851fcf080a342896ea0bc71dce01e948c810a8db9Dave AirlieTAG(VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized,
107951fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie		      const GLuint *value)
108051fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie{
108151fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   GET_CURRENT_CONTEXT(ctx);
108251fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie   ATTR_UI_INDEX(4, type, normalized, index, *value);
108351fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie}
108451fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1085fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
1086fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR1FV
1087fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR2FV
1088fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR3FV
1089fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR4FV
1090fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
1091fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR1F
1092fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR2F
1093fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR3F
1094fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef ATTR4F
1095fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
109651fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie#undef ATTR_UI
109751fcf080a342896ea0bc71dce01e948c810a8db9Dave Airlie
1098fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#undef MAT
1099