1848b8605Smrg/************************************************************************** 2848b8605Smrg 3848b8605SmrgCopyright 2002 VMware, Inc. 4848b8605SmrgCopyright 2011 Dave Airlie (ARB_vertex_type_2_10_10_10_rev support) 5848b8605SmrgAll Rights Reserved. 6848b8605Smrg 7848b8605SmrgPermission is hereby granted, free of charge, to any person obtaining a 8848b8605Smrgcopy of this software and associated documentation files (the "Software"), 9848b8605Smrgto deal in the Software without restriction, including without limitation 10848b8605Smrgon the rights to use, copy, modify, merge, publish, distribute, sub 11848b8605Smrglicense, and/or sell copies of the Software, and to permit persons to whom 12848b8605Smrgthe Software is furnished to do so, subject to the following conditions: 13848b8605Smrg 14848b8605SmrgThe above copyright notice and this permission notice (including the next 15848b8605Smrgparagraph) shall be included in all copies or substantial portions of the 16848b8605SmrgSoftware. 17848b8605Smrg 18848b8605SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19848b8605SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20848b8605SmrgFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21848b8605SmrgVMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22848b8605SmrgDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23848b8605SmrgOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24848b8605SmrgUSE OR OTHER DEALINGS IN THE SOFTWARE. 25848b8605Smrg 26848b8605Smrg**************************************************************************/ 27848b8605Smrg 28b8e80941Smrg#include "util/format_r11g11b10f.h" 29848b8605Smrg#include "main/varray.h" 30848b8605Smrg 31b8e80941Smrg 32b8e80941Smrg/* ATTR */ 33b8e80941Smrg#define ATTRI( A, N, V0, V1, V2, V3 ) \ 34b8e80941Smrg ATTR_UNION(A, N, GL_INT, fi_type, INT_AS_UNION(V0), INT_AS_UNION(V1), \ 35b8e80941Smrg INT_AS_UNION(V2), INT_AS_UNION(V3)) 36b8e80941Smrg#define ATTRUI( A, N, V0, V1, V2, V3 ) \ 37b8e80941Smrg ATTR_UNION(A, N, GL_UNSIGNED_INT, fi_type, UINT_AS_UNION(V0), UINT_AS_UNION(V1), \ 38b8e80941Smrg UINT_AS_UNION(V2), UINT_AS_UNION(V3)) 39b8e80941Smrg#define ATTRF( A, N, V0, V1, V2, V3 ) \ 40b8e80941Smrg ATTR_UNION(A, N, GL_FLOAT, fi_type, FLOAT_AS_UNION(V0), FLOAT_AS_UNION(V1),\ 41b8e80941Smrg FLOAT_AS_UNION(V2), FLOAT_AS_UNION(V3)) 42b8e80941Smrg#define ATTRD( A, N, V0, V1, V2, V3 ) \ 43b8e80941Smrg ATTR_UNION(A, N, GL_DOUBLE, double, V0, V1, V2, V3) 44b8e80941Smrg#define ATTRUI64( A, N, V0, V1, V2, V3 ) \ 45b8e80941Smrg ATTR_UNION(A, N, GL_UNSIGNED_INT64_ARB, uint64_t, V0, V1, V2, V3) 46b8e80941Smrg 47b8e80941Smrg 48848b8605Smrg/* float */ 49b8e80941Smrg#define ATTR1FV( A, V ) ATTRF( A, 1, (V)[0], 0, 0, 1 ) 50b8e80941Smrg#define ATTR2FV( A, V ) ATTRF( A, 2, (V)[0], (V)[1], 0, 1 ) 51b8e80941Smrg#define ATTR3FV( A, V ) ATTRF( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 52b8e80941Smrg#define ATTR4FV( A, V ) ATTRF( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 53848b8605Smrg 54b8e80941Smrg#define ATTR1F( A, X ) ATTRF( A, 1, X, 0, 0, 1 ) 55b8e80941Smrg#define ATTR2F( A, X, Y ) ATTRF( A, 2, X, Y, 0, 1 ) 56b8e80941Smrg#define ATTR3F( A, X, Y, Z ) ATTRF( A, 3, X, Y, Z, 1 ) 57b8e80941Smrg#define ATTR4F( A, X, Y, Z, W ) ATTRF( A, 4, X, Y, Z, W ) 58848b8605Smrg 59848b8605Smrg 60b8e80941Smrg/* int */ 61848b8605Smrg#define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 ) 62848b8605Smrg#define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 63848b8605Smrg#define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 64848b8605Smrg 65848b8605Smrg#define ATTR1I( A, X ) ATTRI( A, 1, X, 0, 0, 1 ) 66848b8605Smrg#define ATTR2I( A, X, Y ) ATTRI( A, 2, X, Y, 0, 1 ) 67848b8605Smrg#define ATTR3I( A, X, Y, Z ) ATTRI( A, 3, X, Y, Z, 1 ) 68848b8605Smrg#define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W ) 69848b8605Smrg 70848b8605Smrg 71848b8605Smrg/* uint */ 72848b8605Smrg#define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 ) 73848b8605Smrg#define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 74848b8605Smrg#define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 75848b8605Smrg 76848b8605Smrg#define ATTR1UI( A, X ) ATTRUI( A, 1, X, 0, 0, 1 ) 77848b8605Smrg#define ATTR2UI( A, X, Y ) ATTRUI( A, 2, X, Y, 0, 1 ) 78848b8605Smrg#define ATTR3UI( A, X, Y, Z ) ATTRUI( A, 3, X, Y, Z, 1 ) 79848b8605Smrg#define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W ) 80848b8605Smrg 81b8e80941Smrg#define MAT_ATTR( A, N, V ) ATTRF( A, N, (V)[0], (V)[1], (V)[2], (V)[3] ) 82848b8605Smrg 83848b8605Smrgstatic inline float conv_ui10_to_norm_float(unsigned ui10) 84848b8605Smrg{ 85848b8605Smrg return ui10 / 1023.0f; 86848b8605Smrg} 87848b8605Smrg 88848b8605Smrgstatic inline float conv_ui2_to_norm_float(unsigned ui2) 89848b8605Smrg{ 90848b8605Smrg return ui2 / 3.0f; 91848b8605Smrg} 92848b8605Smrg 93b8e80941Smrg#define ATTRUI10_1( A, UI ) ATTRF( A, 1, (UI) & 0x3ff, 0, 0, 1 ) 94b8e80941Smrg#define ATTRUI10_2( A, UI ) ATTRF( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 ) 95b8e80941Smrg#define ATTRUI10_3( A, UI ) ATTRF( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 ) 96b8e80941Smrg#define ATTRUI10_4( A, UI ) ATTRF( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 ) 97848b8605Smrg 98b8e80941Smrg#define ATTRUI10N_1( A, UI ) ATTRF( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 ) 99b8e80941Smrg#define ATTRUI10N_2( A, UI ) ATTRF( A, 2, \ 100848b8605Smrg conv_ui10_to_norm_float((UI) & 0x3ff), \ 101848b8605Smrg conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 ) 102b8e80941Smrg#define ATTRUI10N_3( A, UI ) ATTRF( A, 3, \ 103848b8605Smrg conv_ui10_to_norm_float((UI) & 0x3ff), \ 104848b8605Smrg conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \ 105848b8605Smrg conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 ) 106b8e80941Smrg#define ATTRUI10N_4( A, UI ) ATTRF( A, 4, \ 107848b8605Smrg conv_ui10_to_norm_float((UI) & 0x3ff), \ 108848b8605Smrg conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \ 109848b8605Smrg conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \ 110848b8605Smrg conv_ui2_to_norm_float(((UI) >> 30) & 0x3) ) 111848b8605Smrg 112848b8605Smrgstruct attr_bits_10 {signed int x:10;}; 113848b8605Smrgstruct attr_bits_2 {signed int x:2;}; 114848b8605Smrg 115848b8605Smrgstatic inline float conv_i10_to_i(int i10) 116848b8605Smrg{ 117848b8605Smrg struct attr_bits_10 val; 118848b8605Smrg val.x = i10; 119848b8605Smrg return (float)val.x; 120848b8605Smrg} 121848b8605Smrg 122848b8605Smrgstatic inline float conv_i2_to_i(int i2) 123848b8605Smrg{ 124848b8605Smrg struct attr_bits_2 val; 125848b8605Smrg val.x = i2; 126848b8605Smrg return (float)val.x; 127848b8605Smrg} 128848b8605Smrg 129848b8605Smrgstatic inline float conv_i10_to_norm_float(const struct gl_context *ctx, int i10) 130848b8605Smrg{ 131848b8605Smrg struct attr_bits_10 val; 132848b8605Smrg val.x = i10; 133848b8605Smrg 134848b8605Smrg /* Traditionally, OpenGL has had two equations for converting from 135848b8605Smrg * normalized fixed-point data to floating-point data. In the OpenGL 3.2 136848b8605Smrg * specification, these are equations 2.2 and 2.3, respectively: 137848b8605Smrg * 138848b8605Smrg * f = (2c + 1)/(2^b - 1). (2.2) 139848b8605Smrg * 140848b8605Smrg * Comments below this equation state: "In general, this representation is 141848b8605Smrg * used for signed normalized fixed-point parameters in GL commands, such 142848b8605Smrg * as vertex attribute values." Which is what we're doing here. 143848b8605Smrg * 144848b8605Smrg * f = max{c/(2^(b-1) - 1), -1.0} (2.3) 145848b8605Smrg * 146848b8605Smrg * Comments below this equation state: "In general, this representation is 147848b8605Smrg * used for signed normalized fixed-point texture or floating point values." 148848b8605Smrg * 149848b8605Smrg * OpenGL 4.2+ and ES 3.0 remedy this and state that equation 2.3 (above) 150848b8605Smrg * is used in every case. They remove equation 2.2 completely. 151848b8605Smrg */ 152848b8605Smrg if (_mesa_is_gles3(ctx) || 153b8e80941Smrg (_mesa_is_desktop_gl(ctx) && ctx->Version >= 42)) { 154848b8605Smrg /* Equation 2.3 above. */ 155848b8605Smrg float f = ((float) val.x) / 511.0F; 156848b8605Smrg return MAX2(f, -1.0f); 157848b8605Smrg } else { 158848b8605Smrg /* Equation 2.2 above. */ 159848b8605Smrg return (2.0F * (float)val.x + 1.0F) * (1.0F / 1023.0F); 160848b8605Smrg } 161848b8605Smrg} 162848b8605Smrg 163848b8605Smrgstatic inline float conv_i2_to_norm_float(const struct gl_context *ctx, int i2) 164848b8605Smrg{ 165848b8605Smrg struct attr_bits_2 val; 166848b8605Smrg val.x = i2; 167848b8605Smrg 168848b8605Smrg if (_mesa_is_gles3(ctx) || 169b8e80941Smrg (_mesa_is_desktop_gl(ctx) && ctx->Version >= 42)) { 170848b8605Smrg /* Equation 2.3 above. */ 171848b8605Smrg float f = (float) val.x; 172848b8605Smrg return MAX2(f, -1.0f); 173848b8605Smrg } else { 174848b8605Smrg /* Equation 2.2 above. */ 175848b8605Smrg return (2.0F * (float)val.x + 1.0F) * (1.0F / 3.0F); 176848b8605Smrg } 177848b8605Smrg} 178848b8605Smrg 179b8e80941Smrg#define ATTRI10_1( A, I10 ) ATTRF( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 ) 180b8e80941Smrg#define ATTRI10_2( A, I10 ) ATTRF( A, 2, \ 181848b8605Smrg conv_i10_to_i((I10) & 0x3ff), \ 182848b8605Smrg conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 ) 183b8e80941Smrg#define ATTRI10_3( A, I10 ) ATTRF( A, 3, \ 184848b8605Smrg conv_i10_to_i((I10) & 0x3ff), \ 185848b8605Smrg conv_i10_to_i(((I10) >> 10) & 0x3ff), \ 186848b8605Smrg conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 ) 187b8e80941Smrg#define ATTRI10_4( A, I10 ) ATTRF( A, 4, \ 188848b8605Smrg conv_i10_to_i((I10) & 0x3ff), \ 189848b8605Smrg conv_i10_to_i(((I10) >> 10) & 0x3ff), \ 190848b8605Smrg conv_i10_to_i(((I10) >> 20) & 0x3ff), \ 191848b8605Smrg conv_i2_to_i(((I10) >> 30) & 0x3)) 192848b8605Smrg 193848b8605Smrg 194b8e80941Smrg#define ATTRI10N_1(ctx, A, I10) ATTRF(A, 1, conv_i10_to_norm_float(ctx, (I10) & 0x3ff), 0, 0, 1 ) 195b8e80941Smrg#define ATTRI10N_2(ctx, A, I10) ATTRF(A, 2, \ 196848b8605Smrg conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 197848b8605Smrg conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), 0, 1 ) 198b8e80941Smrg#define ATTRI10N_3(ctx, A, I10) ATTRF(A, 3, \ 199848b8605Smrg conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 200848b8605Smrg conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \ 201848b8605Smrg conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), 1 ) 202b8e80941Smrg#define ATTRI10N_4(ctx, A, I10) ATTRF(A, 4, \ 203848b8605Smrg conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 204848b8605Smrg conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \ 205848b8605Smrg conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), \ 206848b8605Smrg conv_i2_to_norm_float(ctx, ((I10) >> 30) & 0x3)) 207848b8605Smrg 208848b8605Smrg#define ATTR_UI(ctx, val, type, normalized, attr, arg) do { \ 209848b8605Smrg if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) { \ 210848b8605Smrg if (normalized) { \ 211848b8605Smrg ATTRUI10N_##val((attr), (arg)); \ 212848b8605Smrg } else { \ 213848b8605Smrg ATTRUI10_##val((attr), (arg)); \ 214848b8605Smrg } \ 215848b8605Smrg } else if ((type) == GL_INT_2_10_10_10_REV) { \ 216848b8605Smrg if (normalized) { \ 217848b8605Smrg ATTRI10N_##val(ctx, (attr), (arg)); \ 218848b8605Smrg } else { \ 219848b8605Smrg ATTRI10_##val((attr), (arg)); \ 220848b8605Smrg } \ 221848b8605Smrg } else if ((type) == GL_UNSIGNED_INT_10F_11F_11F_REV) { \ 222848b8605Smrg float res[4]; \ 223b8e80941Smrg res[3] = 1; \ 224848b8605Smrg r11g11b10f_to_float3((arg), res); \ 225848b8605Smrg ATTR##val##FV((attr), res); \ 226848b8605Smrg } else \ 227848b8605Smrg ERROR(GL_INVALID_VALUE); \ 228848b8605Smrg } while(0) 229848b8605Smrg 230848b8605Smrg#define ATTR_UI_INDEX(ctx, val, type, normalized, index, arg) do { \ 231b8e80941Smrg if ((index) == 0 && _mesa_attr_zero_aliases_vertex(ctx)) { \ 232848b8605Smrg ATTR_UI(ctx, val, (type), normalized, 0, (arg)); \ 233848b8605Smrg } else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) { \ 234848b8605Smrg ATTR_UI(ctx, val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \ 235848b8605Smrg } else \ 236848b8605Smrg ERROR(GL_INVALID_VALUE); \ 237848b8605Smrg } while(0) 238848b8605Smrg 239b8e80941Smrg 240b8e80941Smrg/* Doubles */ 241b8e80941Smrg#define ATTR1DV( A, V ) ATTRD( A, 1, (V)[0], 0, 0, 1 ) 242b8e80941Smrg#define ATTR2DV( A, V ) ATTRD( A, 2, (V)[0], (V)[1], 0, 1 ) 243b8e80941Smrg#define ATTR3DV( A, V ) ATTRD( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 244b8e80941Smrg#define ATTR4DV( A, V ) ATTRD( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 245b8e80941Smrg 246b8e80941Smrg#define ATTR1D( A, X ) ATTRD( A, 1, X, 0, 0, 1 ) 247b8e80941Smrg#define ATTR2D( A, X, Y ) ATTRD( A, 2, X, Y, 0, 1 ) 248b8e80941Smrg#define ATTR3D( A, X, Y, Z ) ATTRD( A, 3, X, Y, Z, 1 ) 249b8e80941Smrg#define ATTR4D( A, X, Y, Z, W ) ATTRD( A, 4, X, Y, Z, W ) 250b8e80941Smrg 251b8e80941Smrg#define ATTR1UIV64( A, V ) ATTRUI64( A, 1, (V)[0], 0, 0, 0 ) 252b8e80941Smrg#define ATTR1UI64( A, X ) ATTRUI64( A, 1, X, 0, 0, 0 ) 253b8e80941Smrg 254b8e80941Smrg 255848b8605Smrgstatic void GLAPIENTRY 256848b8605SmrgTAG(Vertex2f)(GLfloat x, GLfloat y) 257848b8605Smrg{ 258848b8605Smrg GET_CURRENT_CONTEXT(ctx); 259848b8605Smrg ATTR2F(VBO_ATTRIB_POS, x, y); 260848b8605Smrg} 261848b8605Smrg 262848b8605Smrgstatic void GLAPIENTRY 263848b8605SmrgTAG(Vertex2fv)(const GLfloat * v) 264848b8605Smrg{ 265848b8605Smrg GET_CURRENT_CONTEXT(ctx); 266848b8605Smrg ATTR2FV(VBO_ATTRIB_POS, v); 267848b8605Smrg} 268848b8605Smrg 269848b8605Smrgstatic void GLAPIENTRY 270848b8605SmrgTAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z) 271848b8605Smrg{ 272848b8605Smrg GET_CURRENT_CONTEXT(ctx); 273848b8605Smrg ATTR3F(VBO_ATTRIB_POS, x, y, z); 274848b8605Smrg} 275848b8605Smrg 276848b8605Smrgstatic void GLAPIENTRY 277848b8605SmrgTAG(Vertex3fv)(const GLfloat * v) 278848b8605Smrg{ 279848b8605Smrg GET_CURRENT_CONTEXT(ctx); 280848b8605Smrg ATTR3FV(VBO_ATTRIB_POS, v); 281848b8605Smrg} 282848b8605Smrg 283848b8605Smrgstatic void GLAPIENTRY 284848b8605SmrgTAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 285848b8605Smrg{ 286848b8605Smrg GET_CURRENT_CONTEXT(ctx); 287848b8605Smrg ATTR4F(VBO_ATTRIB_POS, x, y, z, w); 288848b8605Smrg} 289848b8605Smrg 290848b8605Smrgstatic void GLAPIENTRY 291848b8605SmrgTAG(Vertex4fv)(const GLfloat * v) 292848b8605Smrg{ 293848b8605Smrg GET_CURRENT_CONTEXT(ctx); 294848b8605Smrg ATTR4FV(VBO_ATTRIB_POS, v); 295848b8605Smrg} 296848b8605Smrg 297848b8605Smrg 298848b8605Smrg 299848b8605Smrgstatic void GLAPIENTRY 300848b8605SmrgTAG(TexCoord1f)(GLfloat x) 301848b8605Smrg{ 302848b8605Smrg GET_CURRENT_CONTEXT(ctx); 303848b8605Smrg ATTR1F(VBO_ATTRIB_TEX0, x); 304848b8605Smrg} 305848b8605Smrg 306848b8605Smrgstatic void GLAPIENTRY 307848b8605SmrgTAG(TexCoord1fv)(const GLfloat * v) 308848b8605Smrg{ 309848b8605Smrg GET_CURRENT_CONTEXT(ctx); 310848b8605Smrg ATTR1FV(VBO_ATTRIB_TEX0, v); 311848b8605Smrg} 312848b8605Smrg 313848b8605Smrgstatic void GLAPIENTRY 314848b8605SmrgTAG(TexCoord2f)(GLfloat x, GLfloat y) 315848b8605Smrg{ 316848b8605Smrg GET_CURRENT_CONTEXT(ctx); 317848b8605Smrg ATTR2F(VBO_ATTRIB_TEX0, x, y); 318848b8605Smrg} 319848b8605Smrg 320848b8605Smrgstatic void GLAPIENTRY 321848b8605SmrgTAG(TexCoord2fv)(const GLfloat * v) 322848b8605Smrg{ 323848b8605Smrg GET_CURRENT_CONTEXT(ctx); 324848b8605Smrg ATTR2FV(VBO_ATTRIB_TEX0, v); 325848b8605Smrg} 326848b8605Smrg 327848b8605Smrgstatic void GLAPIENTRY 328848b8605SmrgTAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z) 329848b8605Smrg{ 330848b8605Smrg GET_CURRENT_CONTEXT(ctx); 331848b8605Smrg ATTR3F(VBO_ATTRIB_TEX0, x, y, z); 332848b8605Smrg} 333848b8605Smrg 334848b8605Smrgstatic void GLAPIENTRY 335848b8605SmrgTAG(TexCoord3fv)(const GLfloat * v) 336848b8605Smrg{ 337848b8605Smrg GET_CURRENT_CONTEXT(ctx); 338848b8605Smrg ATTR3FV(VBO_ATTRIB_TEX0, v); 339848b8605Smrg} 340848b8605Smrg 341848b8605Smrgstatic void GLAPIENTRY 342848b8605SmrgTAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 343848b8605Smrg{ 344848b8605Smrg GET_CURRENT_CONTEXT(ctx); 345848b8605Smrg ATTR4F(VBO_ATTRIB_TEX0, x, y, z, w); 346848b8605Smrg} 347848b8605Smrg 348848b8605Smrgstatic void GLAPIENTRY 349848b8605SmrgTAG(TexCoord4fv)(const GLfloat * v) 350848b8605Smrg{ 351848b8605Smrg GET_CURRENT_CONTEXT(ctx); 352848b8605Smrg ATTR4FV(VBO_ATTRIB_TEX0, v); 353848b8605Smrg} 354848b8605Smrg 355848b8605Smrg 356848b8605Smrg 357848b8605Smrgstatic void GLAPIENTRY 358848b8605SmrgTAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z) 359848b8605Smrg{ 360848b8605Smrg GET_CURRENT_CONTEXT(ctx); 361848b8605Smrg ATTR3F(VBO_ATTRIB_NORMAL, x, y, z); 362848b8605Smrg} 363848b8605Smrg 364848b8605Smrgstatic void GLAPIENTRY 365848b8605SmrgTAG(Normal3fv)(const GLfloat * v) 366848b8605Smrg{ 367848b8605Smrg GET_CURRENT_CONTEXT(ctx); 368848b8605Smrg ATTR3FV(VBO_ATTRIB_NORMAL, v); 369848b8605Smrg} 370848b8605Smrg 371848b8605Smrg 372848b8605Smrg 373848b8605Smrgstatic void GLAPIENTRY 374848b8605SmrgTAG(FogCoordfEXT)(GLfloat x) 375848b8605Smrg{ 376848b8605Smrg GET_CURRENT_CONTEXT(ctx); 377848b8605Smrg ATTR1F(VBO_ATTRIB_FOG, x); 378848b8605Smrg} 379848b8605Smrg 380848b8605Smrg 381848b8605Smrg 382848b8605Smrgstatic void GLAPIENTRY 383848b8605SmrgTAG(FogCoordfvEXT)(const GLfloat * v) 384848b8605Smrg{ 385848b8605Smrg GET_CURRENT_CONTEXT(ctx); 386848b8605Smrg ATTR1FV(VBO_ATTRIB_FOG, v); 387848b8605Smrg} 388848b8605Smrg 389848b8605Smrgstatic void GLAPIENTRY 390848b8605SmrgTAG(Color3f)(GLfloat x, GLfloat y, GLfloat z) 391848b8605Smrg{ 392848b8605Smrg GET_CURRENT_CONTEXT(ctx); 393848b8605Smrg ATTR3F(VBO_ATTRIB_COLOR0, x, y, z); 394848b8605Smrg} 395848b8605Smrg 396848b8605Smrgstatic void GLAPIENTRY 397848b8605SmrgTAG(Color3fv)(const GLfloat * v) 398848b8605Smrg{ 399848b8605Smrg GET_CURRENT_CONTEXT(ctx); 400848b8605Smrg ATTR3FV(VBO_ATTRIB_COLOR0, v); 401848b8605Smrg} 402848b8605Smrg 403848b8605Smrgstatic void GLAPIENTRY 404848b8605SmrgTAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 405848b8605Smrg{ 406848b8605Smrg GET_CURRENT_CONTEXT(ctx); 407848b8605Smrg ATTR4F(VBO_ATTRIB_COLOR0, x, y, z, w); 408848b8605Smrg} 409848b8605Smrg 410848b8605Smrgstatic void GLAPIENTRY 411848b8605SmrgTAG(Color4fv)(const GLfloat * v) 412848b8605Smrg{ 413848b8605Smrg GET_CURRENT_CONTEXT(ctx); 414848b8605Smrg ATTR4FV(VBO_ATTRIB_COLOR0, v); 415848b8605Smrg} 416848b8605Smrg 417848b8605Smrg 418848b8605Smrg 419848b8605Smrgstatic void GLAPIENTRY 420848b8605SmrgTAG(SecondaryColor3fEXT)(GLfloat x, GLfloat y, GLfloat z) 421848b8605Smrg{ 422848b8605Smrg GET_CURRENT_CONTEXT(ctx); 423848b8605Smrg ATTR3F(VBO_ATTRIB_COLOR1, x, y, z); 424848b8605Smrg} 425848b8605Smrg 426848b8605Smrgstatic void GLAPIENTRY 427848b8605SmrgTAG(SecondaryColor3fvEXT)(const GLfloat * v) 428848b8605Smrg{ 429848b8605Smrg GET_CURRENT_CONTEXT(ctx); 430848b8605Smrg ATTR3FV(VBO_ATTRIB_COLOR1, v); 431848b8605Smrg} 432848b8605Smrg 433848b8605Smrg 434848b8605Smrg 435848b8605Smrgstatic void GLAPIENTRY 436848b8605SmrgTAG(EdgeFlag)(GLboolean b) 437848b8605Smrg{ 438848b8605Smrg GET_CURRENT_CONTEXT(ctx); 439848b8605Smrg ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b); 440848b8605Smrg} 441848b8605Smrg 442848b8605Smrg 443848b8605Smrg 444848b8605Smrgstatic void GLAPIENTRY 445848b8605SmrgTAG(Indexf)(GLfloat f) 446848b8605Smrg{ 447848b8605Smrg GET_CURRENT_CONTEXT(ctx); 448b8e80941Smrg ATTR1F(VBO_ATTRIB_COLOR_INDEX, f); 449848b8605Smrg} 450848b8605Smrg 451848b8605Smrgstatic void GLAPIENTRY 452848b8605SmrgTAG(Indexfv)(const GLfloat * f) 453848b8605Smrg{ 454848b8605Smrg GET_CURRENT_CONTEXT(ctx); 455b8e80941Smrg ATTR1FV(VBO_ATTRIB_COLOR_INDEX, f); 456848b8605Smrg} 457848b8605Smrg 458848b8605Smrg 459848b8605Smrg 460848b8605Smrgstatic void GLAPIENTRY 461848b8605SmrgTAG(MultiTexCoord1f)(GLenum target, GLfloat x) 462848b8605Smrg{ 463848b8605Smrg GET_CURRENT_CONTEXT(ctx); 464848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 465848b8605Smrg ATTR1F(attr, x); 466848b8605Smrg} 467848b8605Smrg 468848b8605Smrgstatic void GLAPIENTRY 469848b8605SmrgTAG(MultiTexCoord1fv)(GLenum target, const GLfloat * v) 470848b8605Smrg{ 471848b8605Smrg GET_CURRENT_CONTEXT(ctx); 472848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 473848b8605Smrg ATTR1FV(attr, v); 474848b8605Smrg} 475848b8605Smrg 476848b8605Smrgstatic void GLAPIENTRY 477848b8605SmrgTAG(MultiTexCoord2f)(GLenum target, GLfloat x, GLfloat y) 478848b8605Smrg{ 479848b8605Smrg GET_CURRENT_CONTEXT(ctx); 480848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 481848b8605Smrg ATTR2F(attr, x, y); 482848b8605Smrg} 483848b8605Smrg 484848b8605Smrgstatic void GLAPIENTRY 485848b8605SmrgTAG(MultiTexCoord2fv)(GLenum target, const GLfloat * v) 486848b8605Smrg{ 487848b8605Smrg GET_CURRENT_CONTEXT(ctx); 488848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 489848b8605Smrg ATTR2FV(attr, v); 490848b8605Smrg} 491848b8605Smrg 492848b8605Smrgstatic void GLAPIENTRY 493848b8605SmrgTAG(MultiTexCoord3f)(GLenum target, GLfloat x, GLfloat y, GLfloat z) 494848b8605Smrg{ 495848b8605Smrg GET_CURRENT_CONTEXT(ctx); 496848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 497848b8605Smrg ATTR3F(attr, x, y, z); 498848b8605Smrg} 499848b8605Smrg 500848b8605Smrgstatic void GLAPIENTRY 501848b8605SmrgTAG(MultiTexCoord3fv)(GLenum target, const GLfloat * v) 502848b8605Smrg{ 503848b8605Smrg GET_CURRENT_CONTEXT(ctx); 504848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 505848b8605Smrg ATTR3FV(attr, v); 506848b8605Smrg} 507848b8605Smrg 508848b8605Smrgstatic void GLAPIENTRY 509848b8605SmrgTAG(MultiTexCoord4f)(GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 510848b8605Smrg{ 511848b8605Smrg GET_CURRENT_CONTEXT(ctx); 512848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 513848b8605Smrg ATTR4F(attr, x, y, z, w); 514848b8605Smrg} 515848b8605Smrg 516848b8605Smrgstatic void GLAPIENTRY 517848b8605SmrgTAG(MultiTexCoord4fv)(GLenum target, const GLfloat * v) 518848b8605Smrg{ 519848b8605Smrg GET_CURRENT_CONTEXT(ctx); 520848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 521848b8605Smrg ATTR4FV(attr, v); 522848b8605Smrg} 523848b8605Smrg 524848b8605Smrg 525848b8605Smrgstatic void GLAPIENTRY 526848b8605SmrgTAG(VertexAttrib1fARB)(GLuint index, GLfloat x) 527848b8605Smrg{ 528848b8605Smrg GET_CURRENT_CONTEXT(ctx); 529b8e80941Smrg if (is_vertex_position(ctx, index)) 530848b8605Smrg ATTR1F(0, x); 531848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 532848b8605Smrg ATTR1F(VBO_ATTRIB_GENERIC0 + index, x); 533848b8605Smrg else 534848b8605Smrg ERROR(GL_INVALID_VALUE); 535848b8605Smrg} 536848b8605Smrg 537848b8605Smrgstatic void GLAPIENTRY 538848b8605SmrgTAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v) 539848b8605Smrg{ 540848b8605Smrg GET_CURRENT_CONTEXT(ctx); 541b8e80941Smrg if (is_vertex_position(ctx, index)) 542848b8605Smrg ATTR1FV(0, v); 543848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 544848b8605Smrg ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v); 545848b8605Smrg else 546848b8605Smrg ERROR(GL_INVALID_VALUE); 547848b8605Smrg} 548848b8605Smrg 549848b8605Smrgstatic void GLAPIENTRY 550848b8605SmrgTAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y) 551848b8605Smrg{ 552848b8605Smrg GET_CURRENT_CONTEXT(ctx); 553b8e80941Smrg if (is_vertex_position(ctx, index)) 554848b8605Smrg ATTR2F(0, x, y); 555848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 556848b8605Smrg ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y); 557848b8605Smrg else 558848b8605Smrg ERROR(GL_INVALID_VALUE); 559848b8605Smrg} 560848b8605Smrg 561848b8605Smrgstatic void GLAPIENTRY 562848b8605SmrgTAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v) 563848b8605Smrg{ 564848b8605Smrg GET_CURRENT_CONTEXT(ctx); 565b8e80941Smrg if (is_vertex_position(ctx, index)) 566848b8605Smrg ATTR2FV(0, v); 567848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 568848b8605Smrg ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v); 569848b8605Smrg else 570848b8605Smrg ERROR(GL_INVALID_VALUE); 571848b8605Smrg} 572848b8605Smrg 573848b8605Smrgstatic void GLAPIENTRY 574848b8605SmrgTAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z) 575848b8605Smrg{ 576848b8605Smrg GET_CURRENT_CONTEXT(ctx); 577b8e80941Smrg if (is_vertex_position(ctx, index)) 578848b8605Smrg ATTR3F(0, x, y, z); 579848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 580848b8605Smrg ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z); 581848b8605Smrg else 582848b8605Smrg ERROR(GL_INVALID_VALUE); 583848b8605Smrg} 584848b8605Smrg 585848b8605Smrgstatic void GLAPIENTRY 586848b8605SmrgTAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v) 587848b8605Smrg{ 588848b8605Smrg GET_CURRENT_CONTEXT(ctx); 589b8e80941Smrg if (is_vertex_position(ctx, index)) 590848b8605Smrg ATTR3FV(0, v); 591848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 592848b8605Smrg ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v); 593848b8605Smrg else 594848b8605Smrg ERROR(GL_INVALID_VALUE); 595848b8605Smrg} 596848b8605Smrg 597848b8605Smrgstatic void GLAPIENTRY 598848b8605SmrgTAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 599848b8605Smrg{ 600848b8605Smrg GET_CURRENT_CONTEXT(ctx); 601b8e80941Smrg if (is_vertex_position(ctx, index)) 602848b8605Smrg ATTR4F(0, x, y, z, w); 603848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 604848b8605Smrg ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 605848b8605Smrg else 606848b8605Smrg ERROR(GL_INVALID_VALUE); 607848b8605Smrg} 608848b8605Smrg 609848b8605Smrgstatic void GLAPIENTRY 610848b8605SmrgTAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v) 611848b8605Smrg{ 612848b8605Smrg GET_CURRENT_CONTEXT(ctx); 613b8e80941Smrg if (is_vertex_position(ctx, index)) 614848b8605Smrg ATTR4FV(0, v); 615848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 616848b8605Smrg ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v); 617848b8605Smrg else 618848b8605Smrg ERROR(GL_INVALID_VALUE); 619848b8605Smrg} 620848b8605Smrg 621848b8605Smrg 622848b8605Smrg 623848b8605Smrg/* Integer-valued generic attributes. 624848b8605Smrg * XXX: the integers just get converted to floats at this time 625848b8605Smrg */ 626848b8605Smrgstatic void GLAPIENTRY 627848b8605SmrgTAG(VertexAttribI1i)(GLuint index, GLint x) 628848b8605Smrg{ 629848b8605Smrg GET_CURRENT_CONTEXT(ctx); 630b8e80941Smrg if (is_vertex_position(ctx, index)) 631848b8605Smrg ATTR1I(0, x); 632848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 633848b8605Smrg ATTR1I(VBO_ATTRIB_GENERIC0 + index, x); 634848b8605Smrg else 635848b8605Smrg ERROR(GL_INVALID_VALUE); 636848b8605Smrg} 637848b8605Smrg 638848b8605Smrgstatic void GLAPIENTRY 639848b8605SmrgTAG(VertexAttribI2i)(GLuint index, GLint x, GLint y) 640848b8605Smrg{ 641848b8605Smrg GET_CURRENT_CONTEXT(ctx); 642b8e80941Smrg if (is_vertex_position(ctx, index)) 643848b8605Smrg ATTR2I(0, x, y); 644848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 645848b8605Smrg ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y); 646848b8605Smrg else 647848b8605Smrg ERROR(GL_INVALID_VALUE); 648848b8605Smrg} 649848b8605Smrg 650848b8605Smrgstatic void GLAPIENTRY 651848b8605SmrgTAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z) 652848b8605Smrg{ 653848b8605Smrg GET_CURRENT_CONTEXT(ctx); 654b8e80941Smrg if (is_vertex_position(ctx, index)) 655848b8605Smrg ATTR3I(0, x, y, z); 656848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 657848b8605Smrg ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z); 658848b8605Smrg else 659848b8605Smrg ERROR(GL_INVALID_VALUE); 660848b8605Smrg} 661848b8605Smrg 662848b8605Smrgstatic void GLAPIENTRY 663848b8605SmrgTAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w) 664848b8605Smrg{ 665848b8605Smrg GET_CURRENT_CONTEXT(ctx); 666b8e80941Smrg if (is_vertex_position(ctx, index)) 667848b8605Smrg ATTR4I(0, x, y, z, w); 668848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 669848b8605Smrg ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 670848b8605Smrg else 671848b8605Smrg ERROR(GL_INVALID_VALUE); 672848b8605Smrg} 673848b8605Smrg 674848b8605Smrgstatic void GLAPIENTRY 675848b8605SmrgTAG(VertexAttribI2iv)(GLuint index, const GLint *v) 676848b8605Smrg{ 677848b8605Smrg GET_CURRENT_CONTEXT(ctx); 678b8e80941Smrg if (is_vertex_position(ctx, index)) 679848b8605Smrg ATTR2IV(0, v); 680848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 681848b8605Smrg ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v); 682848b8605Smrg else 683848b8605Smrg ERROR(GL_INVALID_VALUE); 684848b8605Smrg} 685848b8605Smrg 686848b8605Smrgstatic void GLAPIENTRY 687848b8605SmrgTAG(VertexAttribI3iv)(GLuint index, const GLint *v) 688848b8605Smrg{ 689848b8605Smrg GET_CURRENT_CONTEXT(ctx); 690b8e80941Smrg if (is_vertex_position(ctx, index)) 691848b8605Smrg ATTR3IV(0, v); 692848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 693848b8605Smrg ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v); 694848b8605Smrg else 695848b8605Smrg ERROR(GL_INVALID_VALUE); 696848b8605Smrg} 697848b8605Smrg 698848b8605Smrgstatic void GLAPIENTRY 699848b8605SmrgTAG(VertexAttribI4iv)(GLuint index, const GLint *v) 700848b8605Smrg{ 701848b8605Smrg GET_CURRENT_CONTEXT(ctx); 702b8e80941Smrg if (is_vertex_position(ctx, index)) 703848b8605Smrg ATTR4IV(0, v); 704848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 705848b8605Smrg ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v); 706848b8605Smrg else 707848b8605Smrg ERROR(GL_INVALID_VALUE); 708848b8605Smrg} 709848b8605Smrg 710848b8605Smrg 711848b8605Smrg 712848b8605Smrg/* Unsigned integer-valued generic attributes. 713848b8605Smrg * XXX: the integers just get converted to floats at this time 714848b8605Smrg */ 715848b8605Smrgstatic void GLAPIENTRY 716848b8605SmrgTAG(VertexAttribI1ui)(GLuint index, GLuint x) 717848b8605Smrg{ 718848b8605Smrg GET_CURRENT_CONTEXT(ctx); 719b8e80941Smrg if (is_vertex_position(ctx, index)) 720848b8605Smrg ATTR1UI(0, x); 721848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 722848b8605Smrg ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x); 723848b8605Smrg else 724848b8605Smrg ERROR(GL_INVALID_VALUE); 725848b8605Smrg} 726848b8605Smrg 727848b8605Smrgstatic void GLAPIENTRY 728848b8605SmrgTAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y) 729848b8605Smrg{ 730848b8605Smrg GET_CURRENT_CONTEXT(ctx); 731b8e80941Smrg if (is_vertex_position(ctx, index)) 732848b8605Smrg ATTR2UI(0, x, y); 733848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 734848b8605Smrg ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y); 735848b8605Smrg else 736848b8605Smrg ERROR(GL_INVALID_VALUE); 737848b8605Smrg} 738848b8605Smrg 739848b8605Smrgstatic void GLAPIENTRY 740848b8605SmrgTAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z) 741848b8605Smrg{ 742848b8605Smrg GET_CURRENT_CONTEXT(ctx); 743b8e80941Smrg if (is_vertex_position(ctx, index)) 744848b8605Smrg ATTR3UI(0, x, y, z); 745848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 746848b8605Smrg ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z); 747848b8605Smrg else 748848b8605Smrg ERROR(GL_INVALID_VALUE); 749848b8605Smrg} 750848b8605Smrg 751848b8605Smrgstatic void GLAPIENTRY 752848b8605SmrgTAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) 753848b8605Smrg{ 754848b8605Smrg GET_CURRENT_CONTEXT(ctx); 755b8e80941Smrg if (is_vertex_position(ctx, index)) 756848b8605Smrg ATTR4UI(0, x, y, z, w); 757848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 758848b8605Smrg ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 759848b8605Smrg else 760848b8605Smrg ERROR(GL_INVALID_VALUE); 761848b8605Smrg} 762848b8605Smrg 763848b8605Smrgstatic void GLAPIENTRY 764848b8605SmrgTAG(VertexAttribI2uiv)(GLuint index, const GLuint *v) 765848b8605Smrg{ 766848b8605Smrg GET_CURRENT_CONTEXT(ctx); 767b8e80941Smrg if (is_vertex_position(ctx, index)) 768848b8605Smrg ATTR2UIV(0, v); 769848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 770848b8605Smrg ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v); 771848b8605Smrg else 772848b8605Smrg ERROR(GL_INVALID_VALUE); 773848b8605Smrg} 774848b8605Smrg 775848b8605Smrgstatic void GLAPIENTRY 776848b8605SmrgTAG(VertexAttribI3uiv)(GLuint index, const GLuint *v) 777848b8605Smrg{ 778848b8605Smrg GET_CURRENT_CONTEXT(ctx); 779b8e80941Smrg if (is_vertex_position(ctx, index)) 780848b8605Smrg ATTR3UIV(0, v); 781848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 782848b8605Smrg ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v); 783848b8605Smrg else 784848b8605Smrg ERROR(GL_INVALID_VALUE); 785848b8605Smrg} 786848b8605Smrg 787848b8605Smrgstatic void GLAPIENTRY 788848b8605SmrgTAG(VertexAttribI4uiv)(GLuint index, const GLuint *v) 789848b8605Smrg{ 790848b8605Smrg GET_CURRENT_CONTEXT(ctx); 791b8e80941Smrg if (is_vertex_position(ctx, index)) 792848b8605Smrg ATTR4UIV(0, v); 793848b8605Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 794848b8605Smrg ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v); 795848b8605Smrg else 796848b8605Smrg ERROR(GL_INVALID_VALUE); 797848b8605Smrg} 798848b8605Smrg 799848b8605Smrg 800848b8605Smrg 801b8e80941Smrg/* These entrypoints are no longer used for NV_vertex_program but they are 802b8e80941Smrg * used by the display list and other code specifically because of their 803b8e80941Smrg * property of aliasing with the legacy Vertex, TexCoord, Normal, etc 804b8e80941Smrg * attributes. (See vbo_save_loopback.c) 805848b8605Smrg */ 806848b8605Smrgstatic void GLAPIENTRY 807848b8605SmrgTAG(VertexAttrib1fNV)(GLuint index, GLfloat x) 808848b8605Smrg{ 809848b8605Smrg GET_CURRENT_CONTEXT(ctx); 810848b8605Smrg if (index < VBO_ATTRIB_MAX) 811848b8605Smrg ATTR1F(index, x); 812848b8605Smrg} 813848b8605Smrg 814848b8605Smrgstatic void GLAPIENTRY 815848b8605SmrgTAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v) 816848b8605Smrg{ 817848b8605Smrg GET_CURRENT_CONTEXT(ctx); 818848b8605Smrg if (index < VBO_ATTRIB_MAX) 819848b8605Smrg ATTR1FV(index, v); 820848b8605Smrg} 821848b8605Smrg 822848b8605Smrgstatic void GLAPIENTRY 823848b8605SmrgTAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y) 824848b8605Smrg{ 825848b8605Smrg GET_CURRENT_CONTEXT(ctx); 826848b8605Smrg if (index < VBO_ATTRIB_MAX) 827848b8605Smrg ATTR2F(index, x, y); 828848b8605Smrg} 829848b8605Smrg 830848b8605Smrgstatic void GLAPIENTRY 831848b8605SmrgTAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v) 832848b8605Smrg{ 833848b8605Smrg GET_CURRENT_CONTEXT(ctx); 834848b8605Smrg if (index < VBO_ATTRIB_MAX) 835848b8605Smrg ATTR2FV(index, v); 836848b8605Smrg} 837848b8605Smrg 838848b8605Smrgstatic void GLAPIENTRY 839848b8605SmrgTAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z) 840848b8605Smrg{ 841848b8605Smrg GET_CURRENT_CONTEXT(ctx); 842848b8605Smrg if (index < VBO_ATTRIB_MAX) 843848b8605Smrg ATTR3F(index, x, y, z); 844848b8605Smrg} 845848b8605Smrg 846848b8605Smrgstatic void GLAPIENTRY 847848b8605SmrgTAG(VertexAttrib3fvNV)(GLuint index, 848848b8605Smrg const GLfloat * v) 849848b8605Smrg{ 850848b8605Smrg GET_CURRENT_CONTEXT(ctx); 851848b8605Smrg if (index < VBO_ATTRIB_MAX) 852848b8605Smrg ATTR3FV(index, v); 853848b8605Smrg} 854848b8605Smrg 855848b8605Smrgstatic void GLAPIENTRY 856848b8605SmrgTAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 857848b8605Smrg{ 858848b8605Smrg GET_CURRENT_CONTEXT(ctx); 859848b8605Smrg if (index < VBO_ATTRIB_MAX) 860848b8605Smrg ATTR4F(index, x, y, z, w); 861848b8605Smrg} 862848b8605Smrg 863848b8605Smrgstatic void GLAPIENTRY 864848b8605SmrgTAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v) 865848b8605Smrg{ 866848b8605Smrg GET_CURRENT_CONTEXT(ctx); 867848b8605Smrg if (index < VBO_ATTRIB_MAX) 868848b8605Smrg ATTR4FV(index, v); 869848b8605Smrg} 870848b8605Smrg 871848b8605Smrg 872848b8605Smrg#define ERROR_IF_NOT_PACKED_TYPE(ctx, type, func) \ 873848b8605Smrg if (type != GL_INT_2_10_10_10_REV && type != GL_UNSIGNED_INT_2_10_10_10_REV) { \ 874848b8605Smrg _mesa_error(ctx, GL_INVALID_ENUM, "%s(type)", func); \ 875848b8605Smrg return; \ 876848b8605Smrg } 877848b8605Smrg 878848b8605Smrg/* Extended version of ERROR_IF_NOT_PACKED_TYPE which also 879848b8605Smrg * accepts GL_UNSIGNED_INT_10F_11F_11F_REV. 880848b8605Smrg * 881848b8605Smrg * Only used for VertexAttribP[123]ui[v]; VertexAttribP4* cannot use this type, 882848b8605Smrg * and neither can legacy vertex attribs. 883848b8605Smrg */ 884848b8605Smrg#define ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, func) \ 885848b8605Smrg if (type != GL_INT_2_10_10_10_REV && type != GL_UNSIGNED_INT_2_10_10_10_REV && \ 886848b8605Smrg type != GL_UNSIGNED_INT_10F_11F_11F_REV) { \ 887848b8605Smrg _mesa_error(ctx, GL_INVALID_ENUM, "%s(type)", func); \ 888848b8605Smrg return; \ 889848b8605Smrg } 890848b8605Smrg 891848b8605Smrgstatic void GLAPIENTRY 892848b8605SmrgTAG(VertexP2ui)(GLenum type, GLuint value) 893848b8605Smrg{ 894848b8605Smrg GET_CURRENT_CONTEXT(ctx); 895848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP2ui"); 896848b8605Smrg ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_POS, value); 897848b8605Smrg} 898848b8605Smrg 899848b8605Smrgstatic void GLAPIENTRY 900848b8605SmrgTAG(VertexP2uiv)(GLenum type, const GLuint *value) 901848b8605Smrg{ 902848b8605Smrg GET_CURRENT_CONTEXT(ctx); 903848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP2uiv"); 904848b8605Smrg ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_POS, value[0]); 905848b8605Smrg} 906848b8605Smrg 907848b8605Smrgstatic void GLAPIENTRY 908848b8605SmrgTAG(VertexP3ui)(GLenum type, GLuint value) 909848b8605Smrg{ 910848b8605Smrg GET_CURRENT_CONTEXT(ctx); 911848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP3ui"); 912848b8605Smrg ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_POS, value); 913848b8605Smrg} 914848b8605Smrg 915848b8605Smrgstatic void GLAPIENTRY 916848b8605SmrgTAG(VertexP3uiv)(GLenum type, const GLuint *value) 917848b8605Smrg{ 918848b8605Smrg GET_CURRENT_CONTEXT(ctx); 919848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP3uiv"); 920848b8605Smrg ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_POS, value[0]); 921848b8605Smrg} 922848b8605Smrg 923848b8605Smrgstatic void GLAPIENTRY 924848b8605SmrgTAG(VertexP4ui)(GLenum type, GLuint value) 925848b8605Smrg{ 926848b8605Smrg GET_CURRENT_CONTEXT(ctx); 927848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP4ui"); 928848b8605Smrg ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_POS, value); 929848b8605Smrg} 930848b8605Smrg 931848b8605Smrgstatic void GLAPIENTRY 932848b8605SmrgTAG(VertexP4uiv)(GLenum type, const GLuint *value) 933848b8605Smrg{ 934848b8605Smrg GET_CURRENT_CONTEXT(ctx); 935848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP4uiv"); 936848b8605Smrg ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_POS, value[0]); 937848b8605Smrg} 938848b8605Smrg 939848b8605Smrgstatic void GLAPIENTRY 940848b8605SmrgTAG(TexCoordP1ui)(GLenum type, GLuint coords) 941848b8605Smrg{ 942848b8605Smrg GET_CURRENT_CONTEXT(ctx); 943848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP1ui"); 944848b8605Smrg ATTR_UI(ctx, 1, type, 0, VBO_ATTRIB_TEX0, coords); 945848b8605Smrg} 946848b8605Smrg 947848b8605Smrgstatic void GLAPIENTRY 948848b8605SmrgTAG(TexCoordP1uiv)(GLenum type, const GLuint *coords) 949848b8605Smrg{ 950848b8605Smrg GET_CURRENT_CONTEXT(ctx); 951848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP1uiv"); 952848b8605Smrg ATTR_UI(ctx, 1, type, 0, VBO_ATTRIB_TEX0, coords[0]); 953848b8605Smrg} 954848b8605Smrg 955848b8605Smrgstatic void GLAPIENTRY 956848b8605SmrgTAG(TexCoordP2ui)(GLenum type, GLuint coords) 957848b8605Smrg{ 958848b8605Smrg GET_CURRENT_CONTEXT(ctx); 959848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP2ui"); 960848b8605Smrg ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_TEX0, coords); 961848b8605Smrg} 962848b8605Smrg 963848b8605Smrgstatic void GLAPIENTRY 964848b8605SmrgTAG(TexCoordP2uiv)(GLenum type, const GLuint *coords) 965848b8605Smrg{ 966848b8605Smrg GET_CURRENT_CONTEXT(ctx); 967848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP2uiv"); 968848b8605Smrg ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_TEX0, coords[0]); 969848b8605Smrg} 970848b8605Smrg 971848b8605Smrgstatic void GLAPIENTRY 972848b8605SmrgTAG(TexCoordP3ui)(GLenum type, GLuint coords) 973848b8605Smrg{ 974848b8605Smrg GET_CURRENT_CONTEXT(ctx); 975848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP3ui"); 976848b8605Smrg ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_TEX0, coords); 977848b8605Smrg} 978848b8605Smrg 979848b8605Smrgstatic void GLAPIENTRY 980848b8605SmrgTAG(TexCoordP3uiv)(GLenum type, const GLuint *coords) 981848b8605Smrg{ 982848b8605Smrg GET_CURRENT_CONTEXT(ctx); 983848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP3uiv"); 984848b8605Smrg ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_TEX0, coords[0]); 985848b8605Smrg} 986848b8605Smrg 987848b8605Smrgstatic void GLAPIENTRY 988848b8605SmrgTAG(TexCoordP4ui)(GLenum type, GLuint coords) 989848b8605Smrg{ 990848b8605Smrg GET_CURRENT_CONTEXT(ctx); 991848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP4ui"); 992848b8605Smrg ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_TEX0, coords); 993848b8605Smrg} 994848b8605Smrg 995848b8605Smrgstatic void GLAPIENTRY 996848b8605SmrgTAG(TexCoordP4uiv)(GLenum type, const GLuint *coords) 997848b8605Smrg{ 998848b8605Smrg GET_CURRENT_CONTEXT(ctx); 999848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP4uiv"); 1000848b8605Smrg ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_TEX0, coords[0]); 1001848b8605Smrg} 1002848b8605Smrg 1003848b8605Smrgstatic void GLAPIENTRY 1004848b8605SmrgTAG(MultiTexCoordP1ui)(GLenum target, GLenum type, GLuint coords) 1005848b8605Smrg{ 1006848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1007848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1008848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP1ui"); 1009848b8605Smrg ATTR_UI(ctx, 1, type, 0, attr, coords); 1010848b8605Smrg} 1011848b8605Smrg 1012848b8605Smrgstatic void GLAPIENTRY 1013848b8605SmrgTAG(MultiTexCoordP1uiv)(GLenum target, GLenum type, const GLuint *coords) 1014848b8605Smrg{ 1015848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1016848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1017848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP1uiv"); 1018848b8605Smrg ATTR_UI(ctx, 1, type, 0, attr, coords[0]); 1019848b8605Smrg} 1020848b8605Smrg 1021848b8605Smrgstatic void GLAPIENTRY 1022848b8605SmrgTAG(MultiTexCoordP2ui)(GLenum target, GLenum type, GLuint coords) 1023848b8605Smrg{ 1024848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1025848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1026848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP2ui"); 1027848b8605Smrg ATTR_UI(ctx, 2, type, 0, attr, coords); 1028848b8605Smrg} 1029848b8605Smrg 1030848b8605Smrgstatic void GLAPIENTRY 1031848b8605SmrgTAG(MultiTexCoordP2uiv)(GLenum target, GLenum type, const GLuint *coords) 1032848b8605Smrg{ 1033848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1034848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1035848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP2uiv"); 1036848b8605Smrg ATTR_UI(ctx, 2, type, 0, attr, coords[0]); 1037848b8605Smrg} 1038848b8605Smrg 1039848b8605Smrgstatic void GLAPIENTRY 1040848b8605SmrgTAG(MultiTexCoordP3ui)(GLenum target, GLenum type, GLuint coords) 1041848b8605Smrg{ 1042848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1043848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1044848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP3ui"); 1045848b8605Smrg ATTR_UI(ctx, 3, type, 0, attr, coords); 1046848b8605Smrg} 1047848b8605Smrg 1048848b8605Smrgstatic void GLAPIENTRY 1049848b8605SmrgTAG(MultiTexCoordP3uiv)(GLenum target, GLenum type, const GLuint *coords) 1050848b8605Smrg{ 1051848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1052848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1053848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP3uiv"); 1054848b8605Smrg ATTR_UI(ctx, 3, type, 0, attr, coords[0]); 1055848b8605Smrg} 1056848b8605Smrg 1057848b8605Smrgstatic void GLAPIENTRY 1058848b8605SmrgTAG(MultiTexCoordP4ui)(GLenum target, GLenum type, GLuint coords) 1059848b8605Smrg{ 1060848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1061848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1062848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP4ui"); 1063848b8605Smrg ATTR_UI(ctx, 4, type, 0, attr, coords); 1064848b8605Smrg} 1065848b8605Smrg 1066848b8605Smrgstatic void GLAPIENTRY 1067848b8605SmrgTAG(MultiTexCoordP4uiv)(GLenum target, GLenum type, const GLuint *coords) 1068848b8605Smrg{ 1069848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1070848b8605Smrg GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1071848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP4uiv"); 1072848b8605Smrg ATTR_UI(ctx, 4, type, 0, attr, coords[0]); 1073848b8605Smrg} 1074848b8605Smrg 1075848b8605Smrgstatic void GLAPIENTRY 1076848b8605SmrgTAG(NormalP3ui)(GLenum type, GLuint coords) 1077848b8605Smrg{ 1078848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1079848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glNormalP3ui"); 1080848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_NORMAL, coords); 1081848b8605Smrg} 1082848b8605Smrg 1083848b8605Smrgstatic void GLAPIENTRY 1084848b8605SmrgTAG(NormalP3uiv)(GLenum type, const GLuint *coords) 1085848b8605Smrg{ 1086848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1087848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glNormalP3uiv"); 1088848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_NORMAL, coords[0]); 1089848b8605Smrg} 1090848b8605Smrg 1091848b8605Smrgstatic void GLAPIENTRY 1092848b8605SmrgTAG(ColorP3ui)(GLenum type, GLuint color) 1093848b8605Smrg{ 1094848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1095848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP3ui"); 1096848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR0, color); 1097848b8605Smrg} 1098848b8605Smrg 1099848b8605Smrgstatic void GLAPIENTRY 1100848b8605SmrgTAG(ColorP3uiv)(GLenum type, const GLuint *color) 1101848b8605Smrg{ 1102848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1103848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP3uiv"); 1104848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR0, color[0]); 1105848b8605Smrg} 1106848b8605Smrg 1107848b8605Smrgstatic void GLAPIENTRY 1108848b8605SmrgTAG(ColorP4ui)(GLenum type, GLuint color) 1109848b8605Smrg{ 1110848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1111848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP4ui"); 1112848b8605Smrg ATTR_UI(ctx, 4, type, 1, VBO_ATTRIB_COLOR0, color); 1113848b8605Smrg} 1114848b8605Smrg 1115848b8605Smrgstatic void GLAPIENTRY 1116848b8605SmrgTAG(ColorP4uiv)(GLenum type, const GLuint *color) 1117848b8605Smrg{ 1118848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1119848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP4uiv"); 1120848b8605Smrg ATTR_UI(ctx, 4, type, 1, VBO_ATTRIB_COLOR0, color[0]); 1121848b8605Smrg} 1122848b8605Smrg 1123848b8605Smrgstatic void GLAPIENTRY 1124848b8605SmrgTAG(SecondaryColorP3ui)(GLenum type, GLuint color) 1125848b8605Smrg{ 1126848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1127848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glSecondaryColorP3ui"); 1128848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR1, color); 1129848b8605Smrg} 1130848b8605Smrg 1131848b8605Smrgstatic void GLAPIENTRY 1132848b8605SmrgTAG(SecondaryColorP3uiv)(GLenum type, const GLuint *color) 1133848b8605Smrg{ 1134848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1135848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glSecondaryColorP3uiv"); 1136848b8605Smrg ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR1, color[0]); 1137848b8605Smrg} 1138848b8605Smrg 1139848b8605Smrgstatic void GLAPIENTRY 1140848b8605SmrgTAG(VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, 1141848b8605Smrg GLuint value) 1142848b8605Smrg{ 1143848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1144848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP1ui"); 1145848b8605Smrg ATTR_UI_INDEX(ctx, 1, type, normalized, index, value); 1146848b8605Smrg} 1147848b8605Smrg 1148848b8605Smrgstatic void GLAPIENTRY 1149848b8605SmrgTAG(VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, 1150848b8605Smrg GLuint value) 1151848b8605Smrg{ 1152848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1153848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP2ui"); 1154848b8605Smrg ATTR_UI_INDEX(ctx, 2, type, normalized, index, value); 1155848b8605Smrg} 1156848b8605Smrg 1157848b8605Smrgstatic void GLAPIENTRY 1158848b8605SmrgTAG(VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, 1159848b8605Smrg GLuint value) 1160848b8605Smrg{ 1161848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1162848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP3ui"); 1163848b8605Smrg ATTR_UI_INDEX(ctx, 3, type, normalized, index, value); 1164848b8605Smrg} 1165848b8605Smrg 1166848b8605Smrgstatic void GLAPIENTRY 1167848b8605SmrgTAG(VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, 1168848b8605Smrg GLuint value) 1169848b8605Smrg{ 1170848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1171848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexAttribP4ui"); 1172848b8605Smrg ATTR_UI_INDEX(ctx, 4, type, normalized, index, value); 1173848b8605Smrg} 1174848b8605Smrg 1175848b8605Smrgstatic void GLAPIENTRY 1176848b8605SmrgTAG(VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, 1177848b8605Smrg const GLuint *value) 1178848b8605Smrg{ 1179848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1180848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP1uiv"); 1181848b8605Smrg ATTR_UI_INDEX(ctx, 1, type, normalized, index, *value); 1182848b8605Smrg} 1183848b8605Smrg 1184848b8605Smrgstatic void GLAPIENTRY 1185848b8605SmrgTAG(VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, 1186848b8605Smrg const GLuint *value) 1187848b8605Smrg{ 1188848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1189848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP2uiv"); 1190848b8605Smrg ATTR_UI_INDEX(ctx, 2, type, normalized, index, *value); 1191848b8605Smrg} 1192848b8605Smrg 1193848b8605Smrgstatic void GLAPIENTRY 1194848b8605SmrgTAG(VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, 1195848b8605Smrg const GLuint *value) 1196848b8605Smrg{ 1197848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1198848b8605Smrg ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP3uiv"); 1199848b8605Smrg ATTR_UI_INDEX(ctx, 3, type, normalized, index, *value); 1200848b8605Smrg} 1201848b8605Smrg 1202848b8605Smrgstatic void GLAPIENTRY 1203848b8605SmrgTAG(VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, 1204848b8605Smrg const GLuint *value) 1205848b8605Smrg{ 1206848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1207848b8605Smrg ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexAttribP4uiv"); 1208848b8605Smrg ATTR_UI_INDEX(ctx, 4, type, normalized, index, *value); 1209848b8605Smrg} 1210848b8605Smrg 1211848b8605Smrg 1212b8e80941Smrg 1213b8e80941Smrgstatic void GLAPIENTRY 1214b8e80941SmrgTAG(VertexAttribL1d)(GLuint index, GLdouble x) 1215b8e80941Smrg{ 1216b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1217b8e80941Smrg if (is_vertex_position(ctx, index)) 1218b8e80941Smrg ATTR1D(0, x); 1219b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1220b8e80941Smrg ATTR1D(VBO_ATTRIB_GENERIC0 + index, x); 1221b8e80941Smrg else 1222b8e80941Smrg ERROR(GL_INVALID_VALUE); 1223b8e80941Smrg} 1224b8e80941Smrg 1225b8e80941Smrgstatic void GLAPIENTRY 1226b8e80941SmrgTAG(VertexAttribL1dv)(GLuint index, const GLdouble * v) 1227b8e80941Smrg{ 1228b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1229b8e80941Smrg if (is_vertex_position(ctx, index)) 1230b8e80941Smrg ATTR1DV(0, v); 1231b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1232b8e80941Smrg ATTR1DV(VBO_ATTRIB_GENERIC0 + index, v); 1233b8e80941Smrg else 1234b8e80941Smrg ERROR(GL_INVALID_VALUE); 1235b8e80941Smrg} 1236b8e80941Smrg 1237b8e80941Smrgstatic void GLAPIENTRY 1238b8e80941SmrgTAG(VertexAttribL2d)(GLuint index, GLdouble x, GLdouble y) 1239b8e80941Smrg{ 1240b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1241b8e80941Smrg if (is_vertex_position(ctx, index)) 1242b8e80941Smrg ATTR2D(0, x, y); 1243b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1244b8e80941Smrg ATTR2D(VBO_ATTRIB_GENERIC0 + index, x, y); 1245b8e80941Smrg else 1246b8e80941Smrg ERROR(GL_INVALID_VALUE); 1247b8e80941Smrg} 1248b8e80941Smrg 1249b8e80941Smrgstatic void GLAPIENTRY 1250b8e80941SmrgTAG(VertexAttribL2dv)(GLuint index, const GLdouble * v) 1251b8e80941Smrg{ 1252b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1253b8e80941Smrg if (is_vertex_position(ctx, index)) 1254b8e80941Smrg ATTR2DV(0, v); 1255b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1256b8e80941Smrg ATTR2DV(VBO_ATTRIB_GENERIC0 + index, v); 1257b8e80941Smrg else 1258b8e80941Smrg ERROR(GL_INVALID_VALUE); 1259b8e80941Smrg} 1260b8e80941Smrg 1261b8e80941Smrgstatic void GLAPIENTRY 1262b8e80941SmrgTAG(VertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z) 1263b8e80941Smrg{ 1264b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1265b8e80941Smrg if (is_vertex_position(ctx, index)) 1266b8e80941Smrg ATTR3D(0, x, y, z); 1267b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1268b8e80941Smrg ATTR3D(VBO_ATTRIB_GENERIC0 + index, x, y, z); 1269b8e80941Smrg else 1270b8e80941Smrg ERROR(GL_INVALID_VALUE); 1271b8e80941Smrg} 1272b8e80941Smrg 1273b8e80941Smrgstatic void GLAPIENTRY 1274b8e80941SmrgTAG(VertexAttribL3dv)(GLuint index, const GLdouble * v) 1275b8e80941Smrg{ 1276b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1277b8e80941Smrg if (is_vertex_position(ctx, index)) 1278b8e80941Smrg ATTR3DV(0, v); 1279b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1280b8e80941Smrg ATTR3DV(VBO_ATTRIB_GENERIC0 + index, v); 1281b8e80941Smrg else 1282b8e80941Smrg ERROR(GL_INVALID_VALUE); 1283b8e80941Smrg} 1284b8e80941Smrg 1285b8e80941Smrgstatic void GLAPIENTRY 1286b8e80941SmrgTAG(VertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1287b8e80941Smrg{ 1288b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1289b8e80941Smrg if (is_vertex_position(ctx, index)) 1290b8e80941Smrg ATTR4D(0, x, y, z, w); 1291b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1292b8e80941Smrg ATTR4D(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 1293b8e80941Smrg else 1294b8e80941Smrg ERROR(GL_INVALID_VALUE); 1295b8e80941Smrg} 1296b8e80941Smrg 1297b8e80941Smrgstatic void GLAPIENTRY 1298b8e80941SmrgTAG(VertexAttribL4dv)(GLuint index, const GLdouble * v) 1299b8e80941Smrg{ 1300b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1301b8e80941Smrg if (is_vertex_position(ctx, index)) 1302b8e80941Smrg ATTR4DV(0, v); 1303b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1304b8e80941Smrg ATTR4DV(VBO_ATTRIB_GENERIC0 + index, v); 1305b8e80941Smrg else 1306b8e80941Smrg ERROR(GL_INVALID_VALUE); 1307b8e80941Smrg} 1308b8e80941Smrg 1309b8e80941Smrgstatic void GLAPIENTRY 1310b8e80941SmrgTAG(VertexAttribL1ui64ARB)(GLuint index, GLuint64EXT x) 1311b8e80941Smrg{ 1312b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1313b8e80941Smrg if (is_vertex_position(ctx, index)) 1314b8e80941Smrg ATTR1UI64(0, x); 1315b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1316b8e80941Smrg ATTR1UI64(VBO_ATTRIB_GENERIC0 + index, x); 1317b8e80941Smrg else 1318b8e80941Smrg ERROR(GL_INVALID_VALUE); 1319b8e80941Smrg} 1320b8e80941Smrg 1321b8e80941Smrgstatic void GLAPIENTRY 1322b8e80941SmrgTAG(VertexAttribL1ui64vARB)(GLuint index, const GLuint64EXT *v) 1323b8e80941Smrg{ 1324b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1325b8e80941Smrg if (is_vertex_position(ctx, index)) 1326b8e80941Smrg ATTR1UIV64(0, v); 1327b8e80941Smrg else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1328b8e80941Smrg ATTR1UIV64(VBO_ATTRIB_GENERIC0 + index, v); 1329b8e80941Smrg else 1330b8e80941Smrg ERROR(GL_INVALID_VALUE); 1331b8e80941Smrg} 1332b8e80941Smrg 1333848b8605Smrg#undef ATTR1FV 1334848b8605Smrg#undef ATTR2FV 1335848b8605Smrg#undef ATTR3FV 1336848b8605Smrg#undef ATTR4FV 1337848b8605Smrg 1338848b8605Smrg#undef ATTR1F 1339848b8605Smrg#undef ATTR2F 1340848b8605Smrg#undef ATTR3F 1341848b8605Smrg#undef ATTR4F 1342848b8605Smrg 1343848b8605Smrg#undef ATTR_UI 1344848b8605Smrg 1345848b8605Smrg#undef MAT 1346