60
60
#define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
62
static inline float conv_ui10_to_norm_float(unsigned ui10)
64
return (float)(ui10) / 1023.0;
67
static inline float conv_ui2_to_norm_float(unsigned ui2)
69
return (float)(ui2) / 3.0;
72
#define ATTRUI10_1( A, UI ) ATTR( A, 1, (UI) & 0x3ff, 0, 0, 1 )
73
#define ATTRUI10_2( A, UI ) ATTR( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
74
#define ATTRUI10_3( A, UI ) ATTR( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
75
#define ATTRUI10_4( A, UI ) ATTR( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
77
#define ATTRUI10N_1( A, UI ) ATTR( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
78
#define ATTRUI10N_2( A, UI ) ATTR( A, 2, \
79
conv_ui10_to_norm_float((UI) & 0x3ff), \
80
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 )
81
#define ATTRUI10N_3( A, UI ) ATTR( A, 3, \
82
conv_ui10_to_norm_float((UI) & 0x3ff), \
83
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
84
conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 )
85
#define ATTRUI10N_4( A, UI ) ATTR( A, 4, \
86
conv_ui10_to_norm_float((UI) & 0x3ff), \
87
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
88
conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \
89
conv_ui2_to_norm_float(((UI) >> 30) & 0x3) )
91
struct attr_bits_10 {signed int x:10;};
92
struct attr_bits_2 {signed int x:2;};
94
static inline float conv_i10_to_i(int i10)
96
struct attr_bits_10 val;
101
static inline float conv_i2_to_i(int i2)
103
struct attr_bits_2 val;
108
static inline float conv_i10_to_norm_float(int i10)
110
struct attr_bits_10 val;
112
return (2.0F * (float)val.x + 1.0F) * (1.0F / 511.0F);
115
static inline float conv_i2_to_norm_float(int i2)
117
struct attr_bits_2 val;
122
#define ATTRI10_1( A, I10 ) ATTR( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
123
#define ATTRI10_2( A, I10 ) ATTR( A, 2, \
124
conv_i10_to_i((I10) & 0x3ff), \
125
conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 )
126
#define ATTRI10_3( A, I10 ) ATTR( A, 3, \
127
conv_i10_to_i((I10) & 0x3ff), \
128
conv_i10_to_i(((I10) >> 10) & 0x3ff), \
129
conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 )
130
#define ATTRI10_4( A, I10 ) ATTR( A, 4, \
131
conv_i10_to_i((I10) & 0x3ff), \
132
conv_i10_to_i(((I10) >> 10) & 0x3ff), \
133
conv_i10_to_i(((I10) >> 20) & 0x3ff), \
134
conv_i2_to_i(((I10) >> 30) & 0x3))
137
#define ATTRI10N_1( A, I10 ) ATTR( A, 1, conv_i10_to_norm_float((I10) & 0x3ff), 0, 0, 1 )
138
#define ATTRI10N_2( A, I10 ) ATTR( A, 2, \
139
conv_i10_to_norm_float((I10) & 0x3ff), \
140
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), 0, 1 )
141
#define ATTRI10N_3( A, I10 ) ATTR( A, 3, \
142
conv_i10_to_norm_float((I10) & 0x3ff), \
143
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
144
conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), 1 )
145
#define ATTRI10N_4( A, I10 ) ATTR( A, 4, \
146
conv_i10_to_norm_float((I10) & 0x3ff), \
147
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
148
conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), \
149
conv_i2_to_norm_float(((I10) >> 30) & 0x3))
151
#define ATTR_UI(val, type, normalized, attr, arg) do { \
152
if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) { \
154
ATTRUI10N_##val((attr), (arg)); \
156
ATTRUI10_##val((attr), (arg)); \
158
} else if ((type) == GL_INT_2_10_10_10_REV) { \
160
ATTRI10N_##val((attr), (arg)); \
162
ATTRI10_##val((attr), (arg)); \
165
ERROR(GL_INVALID_VALUE); \
168
#define ATTR_UI_INDEX(val, type, normalized, index, arg) do { \
169
if ((index) == 0) { \
170
ATTR_UI(val, (type), normalized, 0, (arg)); \
171
} else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) { \
172
ATTR_UI(val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \
174
ERROR(GL_INVALID_VALUE); \
64
177
static void GLAPIENTRY
65
178
TAG(Vertex2f)(GLfloat x, GLfloat y)
852
static void GLAPIENTRY
853
TAG(VertexP2ui)(GLenum type, GLuint value)
855
GET_CURRENT_CONTEXT(ctx);
856
ATTR_UI(2, type, 0, VBO_ATTRIB_POS, value);
859
static void GLAPIENTRY
860
TAG(VertexP2uiv)(GLenum type, const GLuint *value)
862
GET_CURRENT_CONTEXT(ctx);
863
ATTR_UI(2, type, 0, VBO_ATTRIB_POS, value[0]);
866
static void GLAPIENTRY
867
TAG(VertexP3ui)(GLenum type, GLuint value)
869
GET_CURRENT_CONTEXT(ctx);
870
ATTR_UI(3, type, 0, VBO_ATTRIB_POS, value);
873
static void GLAPIENTRY
874
TAG(VertexP3uiv)(GLenum type, const GLuint *value)
876
GET_CURRENT_CONTEXT(ctx);
877
ATTR_UI(3, type, 0, VBO_ATTRIB_POS, value[0]);
880
static void GLAPIENTRY
881
TAG(VertexP4ui)(GLenum type, GLuint value)
883
GET_CURRENT_CONTEXT(ctx);
884
ATTR_UI(4, type, 0, VBO_ATTRIB_POS, value);
887
static void GLAPIENTRY
888
TAG(VertexP4uiv)(GLenum type, const GLuint *value)
890
GET_CURRENT_CONTEXT(ctx);
891
ATTR_UI(4, type, 0, VBO_ATTRIB_POS, value[0]);
894
static void GLAPIENTRY
895
TAG(TexCoordP1ui)(GLenum type, GLuint coords)
897
GET_CURRENT_CONTEXT(ctx);
898
ATTR_UI(1, type, 0, VBO_ATTRIB_TEX0, coords);
901
static void GLAPIENTRY
902
TAG(TexCoordP1uiv)(GLenum type, const GLuint *coords)
904
GET_CURRENT_CONTEXT(ctx);
905
ATTR_UI(1, type, 0, VBO_ATTRIB_TEX0, coords[0]);
908
static void GLAPIENTRY
909
TAG(TexCoordP2ui)(GLenum type, GLuint coords)
911
GET_CURRENT_CONTEXT(ctx);
912
ATTR_UI(2, type, 0, VBO_ATTRIB_TEX0, coords);
915
static void GLAPIENTRY
916
TAG(TexCoordP2uiv)(GLenum type, const GLuint *coords)
918
GET_CURRENT_CONTEXT(ctx);
919
ATTR_UI(2, type, 0, VBO_ATTRIB_TEX0, coords[0]);
922
static void GLAPIENTRY
923
TAG(TexCoordP3ui)(GLenum type, GLuint coords)
925
GET_CURRENT_CONTEXT(ctx);
926
ATTR_UI(3, type, 0, VBO_ATTRIB_TEX0, coords);
929
static void GLAPIENTRY
930
TAG(TexCoordP3uiv)(GLenum type, const GLuint *coords)
932
GET_CURRENT_CONTEXT(ctx);
933
ATTR_UI(3, type, 0, VBO_ATTRIB_TEX0, coords[0]);
936
static void GLAPIENTRY
937
TAG(TexCoordP4ui)(GLenum type, GLuint coords)
939
GET_CURRENT_CONTEXT(ctx);
940
ATTR_UI(4, type, 0, VBO_ATTRIB_TEX0, coords);
943
static void GLAPIENTRY
944
TAG(TexCoordP4uiv)(GLenum type, const GLuint *coords)
946
GET_CURRENT_CONTEXT(ctx);
947
ATTR_UI(4, type, 0, VBO_ATTRIB_TEX0, coords[0]);
950
static void GLAPIENTRY
951
TAG(MultiTexCoordP1ui)(GLenum target, GLenum type, GLuint coords)
953
GET_CURRENT_CONTEXT(ctx);
954
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
955
ATTR_UI(1, type, 0, attr, coords);
958
static void GLAPIENTRY
959
TAG(MultiTexCoordP1uiv)(GLenum target, GLenum type, const GLuint *coords)
961
GET_CURRENT_CONTEXT(ctx);
962
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
963
ATTR_UI(1, type, 0, attr, coords[0]);
966
static void GLAPIENTRY
967
TAG(MultiTexCoordP2ui)(GLenum target, GLenum type, GLuint coords)
969
GET_CURRENT_CONTEXT(ctx);
970
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
971
ATTR_UI(2, type, 0, attr, coords);
974
static void GLAPIENTRY
975
TAG(MultiTexCoordP2uiv)(GLenum target, GLenum type, const GLuint *coords)
977
GET_CURRENT_CONTEXT(ctx);
978
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
979
ATTR_UI(2, type, 0, attr, coords[0]);
982
static void GLAPIENTRY
983
TAG(MultiTexCoordP3ui)(GLenum target, GLenum type, GLuint coords)
985
GET_CURRENT_CONTEXT(ctx);
986
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
987
ATTR_UI(3, type, 0, attr, coords);
990
static void GLAPIENTRY
991
TAG(MultiTexCoordP3uiv)(GLenum target, GLenum type, const GLuint *coords)
993
GET_CURRENT_CONTEXT(ctx);
994
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
995
ATTR_UI(3, type, 0, attr, coords[0]);
998
static void GLAPIENTRY
999
TAG(MultiTexCoordP4ui)(GLenum target, GLenum type, GLuint coords)
1001
GET_CURRENT_CONTEXT(ctx);
1002
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
1003
ATTR_UI(4, type, 0, attr, coords);
1006
static void GLAPIENTRY
1007
TAG(MultiTexCoordP4uiv)(GLenum target, GLenum type, const GLuint *coords)
1009
GET_CURRENT_CONTEXT(ctx);
1010
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
1011
ATTR_UI(4, type, 0, attr, coords[0]);
1014
static void GLAPIENTRY
1015
TAG(NormalP3ui)(GLenum type, GLuint coords)
1017
GET_CURRENT_CONTEXT(ctx);
1018
ATTR_UI(3, type, 1, VBO_ATTRIB_NORMAL, coords);
1021
static void GLAPIENTRY
1022
TAG(NormalP3uiv)(GLenum type, const GLuint *coords)
1024
GET_CURRENT_CONTEXT(ctx);
1025
ATTR_UI(3, type, 1, VBO_ATTRIB_NORMAL, coords[0]);
1028
static void GLAPIENTRY
1029
TAG(ColorP3ui)(GLenum type, GLuint color)
1031
GET_CURRENT_CONTEXT(ctx);
1032
ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR0, color);
1035
static void GLAPIENTRY
1036
TAG(ColorP3uiv)(GLenum type, const GLuint *color)
1038
GET_CURRENT_CONTEXT(ctx);
1039
ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR0, color[0]);
1042
static void GLAPIENTRY
1043
TAG(ColorP4ui)(GLenum type, GLuint color)
1045
GET_CURRENT_CONTEXT(ctx);
1046
ATTR_UI(4, type, 1, VBO_ATTRIB_COLOR0, color);
1049
static void GLAPIENTRY
1050
TAG(ColorP4uiv)(GLenum type, const GLuint *color)
1052
GET_CURRENT_CONTEXT(ctx);
1053
ATTR_UI(4, type, 1, VBO_ATTRIB_COLOR0, color[0]);
1056
static void GLAPIENTRY
1057
TAG(SecondaryColorP3ui)(GLenum type, GLuint color)
1059
GET_CURRENT_CONTEXT(ctx);
1060
ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR1, color);
1063
static void GLAPIENTRY
1064
TAG(SecondaryColorP3uiv)(GLenum type, const GLuint *color)
1066
GET_CURRENT_CONTEXT(ctx);
1067
ATTR_UI(3, type, 1, VBO_ATTRIB_COLOR1, color[0]);
1070
static void GLAPIENTRY
1071
TAG(VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized,
1074
GET_CURRENT_CONTEXT(ctx);
1075
ATTR_UI_INDEX(1, type, normalized, index, value);
1078
static void GLAPIENTRY
1079
TAG(VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized,
1082
GET_CURRENT_CONTEXT(ctx);
1083
ATTR_UI_INDEX(2, type, normalized, index, value);
1086
static void GLAPIENTRY
1087
TAG(VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized,
1090
GET_CURRENT_CONTEXT(ctx);
1091
ATTR_UI_INDEX(3, type, normalized, index, value);
1094
static void GLAPIENTRY
1095
TAG(VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized,
1098
GET_CURRENT_CONTEXT(ctx);
1099
ATTR_UI_INDEX(4, type, normalized, index, value);
1102
static void GLAPIENTRY
1103
TAG(VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized,
1104
const GLuint *value)
1106
GET_CURRENT_CONTEXT(ctx);
1107
ATTR_UI_INDEX(1, type, normalized, index, *value);
1110
static void GLAPIENTRY
1111
TAG(VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized,
1112
const GLuint *value)
1114
GET_CURRENT_CONTEXT(ctx);
1115
ATTR_UI_INDEX(2, type, normalized, index, *value);
1118
static void GLAPIENTRY
1119
TAG(VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized,
1120
const GLuint *value)
1122
GET_CURRENT_CONTEXT(ctx);
1123
ATTR_UI_INDEX(3, type, normalized, index, *value);
1126
static void GLAPIENTRY
1127
TAG(VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized,
1128
const GLuint *value)
1130
GET_CURRENT_CONTEXT(ctx);
1131
ATTR_UI_INDEX(4, type, normalized, index, *value);