mesa/es: Remove redundant light pname and light validation
[profile/ivi/mesa.git] / src / mesa / main / es1_conversion.c
1 #include <stdbool.h>
2 #include "main/mfeatures.h"
3
4 #if FEATURE_ES1
5
6 #include "api_loopback.h"
7 #include "api_exec.h"
8 #include "blend.h"
9 #include "clear.h"
10 #include "clip.h"
11 #include "context.h"
12 #include "depth.h"
13 #include "fog.h"
14 #include "imports.h"
15 #include "light.h"
16 #include "lines.h"
17 #include "matrix.h"
18 #include "multisample.h"
19 #include "pixelstore.h"
20 #include "points.h"
21 #include "polygon.h"
22 #include "readpix.h"
23 #include "texenv.h"
24 #include "texgen.h"
25 #include "texobj.h"
26 #include "texparam.h"
27 #include "mtypes.h"
28 #include "viewport.h"
29 #include "main/drawtex.h"
30 #include "vbo/vbo.h"
31
32 #ifndef GL_APIENTRY
33 #define GL_APIENTRY GLAPIENTRY
34 #endif
35
36 #include "main/es1_conversion.h"
37
38 void GL_APIENTRY
39 _es_AlphaFuncx(GLenum func, GLclampx ref)
40 {
41    _mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f));
42 }
43
44 void GL_APIENTRY
45 _es_ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
46 {
47    _mesa_ClearColor((GLclampf) (red / 65536.0f),
48                     (GLclampf) (green / 65536.0f),
49                     (GLclampf) (blue / 65536.0f),
50                     (GLclampf) (alpha / 65536.0f));
51 }
52
53 void GL_APIENTRY
54 _es_ClearDepthx(GLclampx depth)
55 {
56    _mesa_ClearDepthf((GLclampf) (depth / 65536.0f));
57 }
58
59 void GL_APIENTRY
60 _es_ClipPlanef(GLenum plane, const GLfloat *equation)
61 {
62    unsigned int i;
63    GLdouble converted_equation[4];
64
65    for (i = 0; i < Elements(converted_equation); i++) {
66       converted_equation[i] = (GLdouble) (equation[i]);
67    }
68
69    _mesa_ClipPlane(plane, converted_equation);
70 }
71
72 void GL_APIENTRY
73 _es_ClipPlanex(GLenum plane, const GLfixed *equation)
74 {
75    unsigned int i;
76    GLdouble converted_equation[4];
77
78    for (i = 0; i < Elements(converted_equation); i++) {
79       converted_equation[i] = (GLdouble) (equation[i] / 65536.0);
80    }
81
82    _mesa_ClipPlane(plane, converted_equation);
83 }
84
85 void GL_APIENTRY
86 _es_Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
87 {
88     _es_Color4f((GLfloat) (red / 255.0f),
89                 (GLfloat) (green / 255.0f),
90                 (GLfloat) (blue / 255.0f),
91                 (GLfloat) (alpha / 255.0f));
92 }
93
94 void GL_APIENTRY
95 _es_Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
96 {
97     _es_Color4f((GLfloat) (red / 65536.0f),
98                 (GLfloat) (green / 65536.0f),
99                 (GLfloat) (blue / 65536.0f),
100                 (GLfloat) (alpha / 65536.0f));
101 }
102
103 void GL_APIENTRY
104 _es_DepthRangex(GLclampx zNear, GLclampx zFar)
105 {
106     _mesa_DepthRangef((GLclampf) (zNear / 65536.0f),
107                       (GLclampf) (zFar / 65536.0f));
108 }
109
110 void GL_APIENTRY
111 _es_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h)
112 {
113
114     _mesa_DrawTexf((GLfloat) (x / 65536.0f),
115                    (GLfloat) (y / 65536.0f),
116                    (GLfloat) (z / 65536.0f),
117                    (GLfloat) (w / 65536.0f),
118                    (GLfloat) (h / 65536.0f));
119 }
120
121 void GL_APIENTRY
122 _es_DrawTexxvOES(const GLfixed *coords)
123 {
124     unsigned int i;
125     GLfloat converted_coords[5];
126
127     for (i = 0; i < Elements(converted_coords); i++) {
128         converted_coords[i] = (GLfloat) (coords[i] / 65536.0f);
129     }
130
131     _mesa_DrawTexfv(converted_coords);
132 }
133
134 void GL_APIENTRY
135 _es_Fogx(GLenum pname, GLfixed param)
136 {
137    bool convert_param_value = true;
138
139    switch(pname) {
140    case GL_FOG_MODE:
141       if (param != GL_EXP && param != GL_EXP2 && param != GL_LINEAR) {
142          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
143                      "glFogx(pname=0x%x)", pname);
144          return;
145       }
146       convert_param_value = false;
147       break;
148    case GL_FOG_DENSITY:
149    case GL_FOG_START:
150    case GL_FOG_END:
151       break;
152    default:
153       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
154                   "glFogx(pname=0x%x)", pname);
155       return;
156    }
157
158    if (convert_param_value) {
159       _mesa_Fogf(pname, (GLfloat) (param / 65536.0f));
160    } else {
161       _mesa_Fogf(pname, (GLfloat) param);
162    }
163
164 }
165
166 void GL_APIENTRY
167 _es_Fogxv(GLenum pname, const GLfixed *params)
168 {
169    unsigned int i;
170    unsigned int n_params = 4;
171    GLfloat converted_params[4];
172    bool convert_params_value = true;
173
174    switch(pname) {
175    case GL_FOG_MODE:
176       if (params[0] != GL_EXP && params[0] != GL_EXP2 && params[0] != GL_LINEAR) {
177          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
178                      "glFogxv(pname=0x%x)", pname);
179          return;
180       }
181       convert_params_value = false;
182       n_params = 1;
183       break;
184    case GL_FOG_COLOR:
185       n_params = 4;
186       break;
187    case GL_FOG_DENSITY:
188    case GL_FOG_START:
189    case GL_FOG_END:
190       n_params = 1;
191       break;
192    default:
193       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
194                   "glFogxv(pname=0x%x)", pname);
195       return;
196    }
197
198    if (convert_params_value) {
199       for (i = 0; i < n_params; i++) {
200          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
201       }
202    } else {
203       for (i = 0; i < n_params; i++) {
204          converted_params[i] = (GLfloat) params[i];
205       }
206    }
207
208    _mesa_Fogfv(pname, converted_params);
209 }
210
211 void GL_APIENTRY
212 _es_Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
213              GLfloat zNear, GLfloat zFar)
214 {
215    _mesa_Frustum((GLdouble) (left),
216                  (GLdouble) (right),
217                  (GLdouble) (bottom),
218                  (GLdouble) (top),
219                  (GLdouble) (zNear),
220                  (GLdouble) (zFar));
221 }
222
223 void GL_APIENTRY
224 _es_Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
225              GLfixed zNear, GLfixed zFar)
226 {
227    _mesa_Frustum((GLdouble) (left / 65536.0),
228                  (GLdouble) (right / 65536.0),
229                  (GLdouble) (bottom / 65536.0),
230                  (GLdouble) (top / 65536.0),
231                  (GLdouble) (zNear / 65536.0),
232                  (GLdouble) (zFar / 65536.0));
233 }
234
235 void GL_APIENTRY
236 _es_GetClipPlanef(GLenum plane, GLfloat *equation)
237 {
238    unsigned int i;
239    GLdouble converted_equation[4];
240
241    _mesa_GetClipPlane(plane, converted_equation);
242    for (i = 0; i < Elements(converted_equation); i++) {
243       equation[i] = (GLfloat) (converted_equation[i]);
244    }
245 }
246
247 void GL_APIENTRY
248 _es_GetClipPlanex(GLenum plane, GLfixed *equation)
249 {
250    unsigned int i;
251    GLdouble converted_equation[4];
252
253    _mesa_GetClipPlane(plane, converted_equation);
254    for (i = 0; i < Elements(converted_equation); i++) {
255       equation[i] = (GLfixed) (converted_equation[i] * 65536);
256    }
257 }
258
259 void GL_APIENTRY
260 _es_GetLightxv(GLenum light, GLenum pname, GLfixed *params)
261 {
262    unsigned int i;
263    unsigned int n_params = 4;
264    GLfloat converted_params[4];
265
266    if (light < GL_LIGHT0 || light > GL_LIGHT7) {
267       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
268                   "glGetLightxv(light=0x%x)", light);
269       return;
270    }
271    switch(pname) {
272    case GL_AMBIENT:
273    case GL_DIFFUSE:
274    case GL_SPECULAR:
275    case GL_POSITION:
276       n_params = 4;
277       break;
278    case GL_SPOT_DIRECTION:
279       n_params = 3;
280       break;
281    case GL_SPOT_EXPONENT:
282    case GL_SPOT_CUTOFF:
283    case GL_CONSTANT_ATTENUATION:
284    case GL_LINEAR_ATTENUATION:
285    case GL_QUADRATIC_ATTENUATION:
286       n_params = 1;
287       break;
288    default:
289       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
290                   "glGetLightxv(pname=0x%x)", pname);
291       return;
292    }
293
294    _mesa_GetLightfv(light, pname, converted_params);
295    for (i = 0; i < n_params; i++) {
296       params[i] = (GLint) (converted_params[i] * 65536);
297    }
298 }
299
300 void GL_APIENTRY
301 _es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
302 {
303    unsigned int i;
304    unsigned int n_params = 4;
305    GLfloat converted_params[4];
306
307    switch(face) {
308    case GL_FRONT:
309    case GL_BACK:
310       break;
311    default:
312       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
313                   "glGetMaterialxv(face=0x%x)", face);
314       return;
315    }
316    switch(pname) {
317    case GL_SHININESS:
318       n_params = 1;
319       break;
320    case GL_AMBIENT:
321    case GL_DIFFUSE:
322    case GL_AMBIENT_AND_DIFFUSE:
323    case GL_SPECULAR:
324    case GL_EMISSION:
325       n_params = 4;
326       break;
327    default:
328       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
329                   "glGetMaterialxv(pname=0x%x)", pname);
330       return;
331    }
332
333    _mesa_GetMaterialfv(face, pname, converted_params);
334    for (i = 0; i < n_params; i++) {
335       params[i] = (GLint) (converted_params[i] * 65536);
336    }
337 }
338
339 void GL_APIENTRY
340 _es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
341 {
342    unsigned int i;
343    unsigned int n_params = 4;
344    GLfloat converted_params[4];
345    bool convert_params_value = true;
346
347    switch(target) {
348    case GL_POINT_SPRITE:
349       if (pname != GL_COORD_REPLACE) {
350          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
351                      "glGetTexEnvxv(target=0x%x)", target);
352          return;
353       }
354       break;
355    case GL_TEXTURE_FILTER_CONTROL_EXT:
356       if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
357          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
358                      "glGetTexEnvxv(target=0x%x)", target);
359          return;
360       }
361       break;
362    case GL_TEXTURE_ENV:
363       if (pname != GL_TEXTURE_ENV_COLOR && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA) {
364          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
365                      "glGetTexEnvxv(target=0x%x)", target);
366          return;
367       }
368       break;
369    default:
370       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
371                   "glGetTexEnvxv(target=0x%x)", target);
372       return;
373    }
374    switch(pname) {
375    case GL_COORD_REPLACE:
376       convert_params_value = false;
377       n_params = 1;
378       break;
379    case GL_TEXTURE_LOD_BIAS_EXT:
380       n_params = 1;
381       break;
382    case GL_TEXTURE_ENV_COLOR:
383       n_params = 4;
384       break;
385    case GL_RGB_SCALE:
386    case GL_ALPHA_SCALE:
387       n_params = 1;
388       break;
389    case GL_TEXTURE_ENV_MODE:
390    case GL_COMBINE_RGB:
391    case GL_COMBINE_ALPHA:
392    case GL_SRC0_RGB:
393    case GL_SRC1_RGB:
394    case GL_SRC2_RGB:
395    case GL_SRC0_ALPHA:
396    case GL_SRC1_ALPHA:
397    case GL_SRC2_ALPHA:
398    case GL_OPERAND0_RGB:
399    case GL_OPERAND1_RGB:
400    case GL_OPERAND2_RGB:
401    case GL_OPERAND0_ALPHA:
402    case GL_OPERAND1_ALPHA:
403    case GL_OPERAND2_ALPHA:
404       convert_params_value = false;
405       n_params = 1;
406       break;
407    default:
408       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
409                   "glGetTexEnvxv(pname=0x%x)", pname);
410       return;
411    }
412
413    _mesa_GetTexEnvfv(target, pname, converted_params);
414    if (convert_params_value) {
415       for (i = 0; i < n_params; i++) {
416          params[i] = (GLint) (converted_params[i] * 65536);
417       }
418    } else {
419       for (i = 0; i < n_params; i++) {
420          params[i] = (GLfixed) converted_params[i];
421       }
422    }
423 }
424
425 void GL_APIENTRY
426 _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
427 {
428    unsigned int i;
429    unsigned int n_params = 1;
430    GLfloat converted_params[1];
431
432    switch(coord) {
433    case GL_TEXTURE_GEN_STR_OES:
434       break;
435    default:
436       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
437                   "glGetTexGenivOES(coord=0x%x)", coord);
438       return;
439    }
440    switch(pname) {
441    case GL_TEXTURE_GEN_MODE:
442       n_params = 1;
443       break;
444    default:
445       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
446                   "glGetTexGenivOES(pname=0x%x)", pname);
447       return;
448    }
449
450    _es_GetTexGenfv(coord, pname, converted_params);
451    for (i = 0; i < n_params; i++) {
452       params[i] = (GLfloat) converted_params[i];
453    }
454 }
455
456 void GL_APIENTRY
457 _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
458 {
459    unsigned int i;
460    unsigned int n_params = 1;
461    GLfloat converted_params[1];
462
463    switch(coord) {
464    case GL_TEXTURE_GEN_STR_OES:
465       break;
466    default:
467       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
468                   "glGetTexGenxvOES(coord=0x%x)", coord);
469       return;
470    }
471    switch(pname) {
472    case GL_TEXTURE_GEN_MODE:
473       n_params = 1;
474       break;
475    default:
476       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
477                   "glGetTexGenxvOES(pname=0x%x)", pname);
478       return;
479    }
480
481    _es_GetTexGenfv(coord, pname, converted_params);
482    for (i = 0; i < n_params; i++) {
483       params[i] = (GLfloat) converted_params[i];
484    }
485 }
486
487 void GL_APIENTRY
488 _es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
489 {
490    unsigned int i;
491    unsigned int n_params = 4;
492    GLfloat converted_params[4];
493    bool convert_params_value = true;
494
495    switch(target) {
496    case GL_TEXTURE_2D:
497    case GL_TEXTURE_CUBE_MAP:
498    case GL_TEXTURE_EXTERNAL_OES:
499       break;
500    default:
501       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
502                   "glGetTexParameterxv(target=0x%x)", target);
503       return;
504    }
505    switch(pname) {
506    case GL_TEXTURE_WRAP_S:
507    case GL_TEXTURE_WRAP_T:
508    case GL_TEXTURE_MIN_FILTER:
509    case GL_TEXTURE_MAG_FILTER:
510    case GL_GENERATE_MIPMAP:
511       convert_params_value = false;
512       n_params = 1;
513       break;
514    case GL_TEXTURE_CROP_RECT_OES:
515       n_params = 4;
516       break;
517    default:
518       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
519                   "glGetTexParameterxv(pname=0x%x)", pname);
520       return;
521    }
522
523    _mesa_GetTexParameterfv(target, pname, converted_params);
524    if (convert_params_value) {
525       for (i = 0; i < n_params; i++) {
526          params[i] = (GLint) (converted_params[i] * 65536);
527       }
528    } else {
529       for (i = 0; i < n_params; i++) {
530          params[i] = (GLfixed) converted_params[i];
531       }
532    }
533 }
534
535 void GL_APIENTRY
536 _es_LightModelx(GLenum pname, GLfixed param)
537 {
538    switch(pname) {
539    case GL_LIGHT_MODEL_TWO_SIDE:
540       if (param != GL_TRUE && param != GL_FALSE) {
541          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
542                      "glLightModelx(pname=0x%x)", pname);
543          return;
544       }
545       break;
546    default:
547       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
548                   "glLightModelx(pname=0x%x)", pname);
549       return;
550    }
551
552    _mesa_LightModelf(pname, (GLfloat) param);
553 }
554
555 void GL_APIENTRY
556 _es_LightModelxv(GLenum pname, const GLfixed *params)
557 {
558    unsigned int i;
559    unsigned int n_params = 4;
560    GLfloat converted_params[4];
561    bool convert_params_value = true;
562
563    switch(pname) {
564    case GL_LIGHT_MODEL_AMBIENT:
565       n_params = 4;
566       break;
567    case GL_LIGHT_MODEL_TWO_SIDE:
568       if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
569          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
570                      "glLightModelxv(pname=0x%x)", pname);
571          return;
572       }
573       convert_params_value = false;
574       n_params = 1;
575       break;
576    default:
577       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
578                   "glLightModelxv(pname=0x%x)", pname);
579       return;
580    }
581
582    if (convert_params_value) {
583       for (i = 0; i < n_params; i++) {
584          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
585       }
586    } else {
587       for (i = 0; i < n_params; i++) {
588          converted_params[i] = (GLfloat) params[i];
589       }
590    }
591
592    _mesa_LightModelfv(pname, converted_params);
593 }
594
595 void GL_APIENTRY
596 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
597 {
598    _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
599 }
600
601 void GL_APIENTRY
602 _es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
603 {
604    unsigned int i;
605    unsigned int n_params = 4;
606    GLfloat converted_params[4];
607
608    if (light < GL_LIGHT0 || light > GL_LIGHT7) {
609       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
610                   "glLightxv(light=0x%x)", light);
611       return;
612    }
613    switch(pname) {
614    case GL_AMBIENT:
615    case GL_DIFFUSE:
616    case GL_SPECULAR:
617    case GL_POSITION:
618       n_params = 4;
619       break;
620    case GL_SPOT_DIRECTION:
621       n_params = 3;
622       break;
623    case GL_SPOT_EXPONENT:
624    case GL_SPOT_CUTOFF:
625    case GL_CONSTANT_ATTENUATION:
626    case GL_LINEAR_ATTENUATION:
627    case GL_QUADRATIC_ATTENUATION:
628       n_params = 1;
629       break;
630    default:
631       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
632                   "glLightxv(pname=0x%x)", pname);
633       return;
634    }
635
636    for (i = 0; i < n_params; i++) {
637       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
638    }
639
640    _mesa_Lightfv(light, pname, converted_params);
641 }
642
643 void GL_APIENTRY
644 _es_LineWidthx(GLfixed width)
645 {
646    _mesa_LineWidth((GLfloat) (width / 65536.0f));
647 }
648
649 void GL_APIENTRY
650 _es_LoadMatrixx(const GLfixed *m)
651 {
652    unsigned int i;
653    GLfloat converted_m[16];
654
655    for (i = 0; i < Elements(converted_m); i++) {
656       converted_m[i] = (GLfloat) (m[i] / 65536.0f);
657    }
658
659    _mesa_LoadMatrixf(converted_m);
660 }
661
662 void GL_APIENTRY
663 _es_Materialx(GLenum face, GLenum pname, GLfixed param)
664 {
665    switch(face) {
666    case GL_FRONT_AND_BACK:
667       break;
668    default:
669       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
670                   "glMaterialx(face=0x%x)", face);
671       return;
672    }
673    switch(pname) {
674    case GL_SHININESS:
675       break;
676    default:
677       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
678                   "glMaterialx(pname=0x%x)", pname);
679       return;
680    }
681
682    _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
683 }
684
685 void GL_APIENTRY
686 _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
687 {
688    unsigned int i;
689    unsigned int n_params = 4;
690    GLfloat converted_params[4];
691
692    switch(face) {
693    case GL_FRONT_AND_BACK:
694       break;
695    default:
696       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
697                   "glMaterialxv(face=0x%x)", face);
698       return;
699    }
700    switch(pname) {
701    case GL_AMBIENT:
702    case GL_DIFFUSE:
703    case GL_AMBIENT_AND_DIFFUSE:
704    case GL_SPECULAR:
705    case GL_EMISSION:
706       n_params = 4;
707       break;
708    case GL_SHININESS:
709       n_params = 1;
710       break;
711    default:
712       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
713                   "glMaterialxv(pname=0x%x)", pname);
714       return;
715    }
716
717    for (i = 0; i < n_params; i++) {
718       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
719    }
720
721    _es_Materialfv(face, pname, converted_params);
722 }
723
724 void GL_APIENTRY
725 _es_MultMatrixx(const GLfixed *m)
726 {
727    unsigned int i;
728    GLfloat converted_m[16];
729
730    for (i = 0; i < Elements(converted_m); i++) {
731       converted_m[i] = (GLfloat) (m[i] / 65536.0f);
732    }
733
734    _mesa_MultMatrixf(converted_m);
735 }
736
737 void GL_APIENTRY
738 _es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
739 {
740    _es_MultiTexCoord4f(texture,
741                        (GLfloat) (s / 65536.0f),
742                        (GLfloat) (t / 65536.0f),
743                        (GLfloat) (r / 65536.0f),
744                        (GLfloat) (q / 65536.0f));
745 }
746
747 void GL_APIENTRY
748 _es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
749 {
750    _es_Normal3f((GLfloat) (nx / 65536.0f),
751                 (GLfloat) (ny / 65536.0f),
752                 (GLfloat) (nz / 65536.0f));
753 }
754
755 void GL_APIENTRY
756 _es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
757            GLfloat zNear, GLfloat zFar)
758 {
759    _mesa_Ortho((GLdouble) (left),
760                (GLdouble) (right),
761                (GLdouble) (bottom),
762                (GLdouble) (top),
763                (GLdouble) (zNear),
764                (GLdouble) (zFar));
765 }
766
767 void GL_APIENTRY
768 _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
769            GLfixed zNear, GLfixed zFar)
770 {
771    _mesa_Ortho((GLdouble) (left / 65536.0),
772                (GLdouble) (right / 65536.0),
773                (GLdouble) (bottom / 65536.0),
774                (GLdouble) (top / 65536.0),
775                (GLdouble) (zNear / 65536.0),
776                (GLdouble) (zFar / 65536.0));
777 }
778
779 void GL_APIENTRY
780 _es_PointParameterx(GLenum pname, GLfixed param)
781 {
782    switch(pname) {
783    case GL_POINT_SIZE_MIN:
784    case GL_POINT_SIZE_MAX:
785    case GL_POINT_FADE_THRESHOLD_SIZE:
786       break;
787    default:
788       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
789                   "glPointParameterx(pname=0x%x)", pname);
790       return;
791    }
792
793    _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
794 }
795
796 void GL_APIENTRY
797 _es_PointParameterxv(GLenum pname, const GLfixed *params)
798 {
799    unsigned int i;
800    unsigned int n_params = 3;
801    GLfloat converted_params[3];
802
803    switch(pname) {
804    case GL_POINT_SIZE_MIN:
805    case GL_POINT_SIZE_MAX:
806    case GL_POINT_FADE_THRESHOLD_SIZE:
807       n_params = 1;
808       break;
809    case GL_POINT_DISTANCE_ATTENUATION:
810       n_params = 3;
811       break;
812    default:
813       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
814                   "glPointParameterxv(pname=0x%x)", pname);
815       return;
816    }
817
818    for (i = 0; i < n_params; i++) {
819       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
820    }
821
822    _mesa_PointParameterfv(pname, converted_params);
823 }
824
825 void GL_APIENTRY
826 _es_PointSizex(GLfixed size)
827 {
828    _mesa_PointSize((GLfloat) (size / 65536.0f));
829 }
830
831 void GL_APIENTRY
832 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
833 {
834    _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
835                        (GLfloat) (units / 65536.0f));
836 }
837
838 void GL_APIENTRY
839 _es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
840 {
841    _mesa_Rotatef((GLfloat) (angle / 65536.0f),
842                  (GLfloat) (x / 65536.0f),
843                  (GLfloat) (y / 65536.0f),
844                  (GLfloat) (z / 65536.0f));
845 }
846
847 void GL_APIENTRY
848 _es_SampleCoveragex(GLclampx value, GLboolean invert)
849 {
850    _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
851                            invert);
852 }
853
854 void GL_APIENTRY
855 _es_Scalex(GLfixed x, GLfixed y, GLfixed z)
856 {
857    _mesa_Scalef((GLfloat) (x / 65536.0f),
858                 (GLfloat) (y / 65536.0f),
859                 (GLfloat) (z / 65536.0f));
860 }
861
862 void GL_APIENTRY
863 _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
864 {
865    GLfloat converted_param;
866    bool convert_param_value = true;
867
868    switch(target) {
869    case GL_POINT_SPRITE:
870       if (pname != GL_COORD_REPLACE) {
871          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
872                      "glTexEnvx(target=0x%x)", target);
873          return;
874       }
875       break;
876    case GL_TEXTURE_FILTER_CONTROL_EXT:
877       if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
878          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
879                      "glTexEnvx(target=0x%x)", target);
880          return;
881       }
882       break;
883    case GL_TEXTURE_ENV:
884       if (pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA && pname != GL_TEXTURE_ENV_COLOR) {
885          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
886                      "glTexEnvx(target=0x%x)", target);
887          return;
888       }
889       break;
890    default:
891       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
892                   "glTexEnvx(target=0x%x)", target);
893       return;
894    }
895    switch(pname) {
896    case GL_COORD_REPLACE:
897       if (param != GL_TRUE && param != GL_FALSE) {
898          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
899                      "glTexEnvx(pname=0x%x)", pname);
900          return;
901       }
902       convert_param_value = false;
903       break;
904    case GL_TEXTURE_LOD_BIAS_EXT:
905       break;
906    case GL_TEXTURE_ENV_MODE:
907       if (param != GL_REPLACE && param != GL_MODULATE && param != GL_DECAL && param != GL_BLEND && param != GL_ADD && param != GL_COMBINE) {
908          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
909                      "glTexEnvx(pname=0x%x)", pname);
910          return;
911       }
912       convert_param_value = false;
913       break;
914    case GL_COMBINE_RGB:
915       if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT && param != GL_DOT3_RGB && param != GL_DOT3_RGBA) {
916          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
917                      "glTexEnvx(pname=0x%x)", pname);
918          return;
919       }
920       convert_param_value = false;
921       break;
922    case GL_COMBINE_ALPHA:
923       if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT) {
924          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
925                      "glTexEnvx(pname=0x%x)", pname);
926          return;
927       }
928       convert_param_value = false;
929       break;
930    case GL_RGB_SCALE:
931    case GL_ALPHA_SCALE:
932       break;
933    case GL_SRC0_RGB:
934    case GL_SRC1_RGB:
935    case GL_SRC2_RGB:
936    case GL_SRC0_ALPHA:
937    case GL_SRC1_ALPHA:
938    case GL_SRC2_ALPHA:
939       convert_param_value = false;
940       break;
941    case GL_OPERAND0_RGB:
942    case GL_OPERAND1_RGB:
943    case GL_OPERAND2_RGB:
944       if (param != GL_SRC_COLOR && param != GL_ONE_MINUS_SRC_COLOR && param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
945          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
946                      "glTexEnvx(pname=0x%x)", pname);
947          return;
948       }
949       convert_param_value = false;
950       break;
951    case GL_OPERAND0_ALPHA:
952    case GL_OPERAND1_ALPHA:
953    case GL_OPERAND2_ALPHA:
954       if (param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
955          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
956                      "glTexEnvx(pname=0x%x)", pname);
957          return;
958       }
959       convert_param_value = false;
960       break;
961    default:
962       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
963                   "glTexEnvx(pname=0x%x)", pname);
964       return;
965    }
966
967    if (convert_param_value) {
968       converted_param = (GLfloat) (param / 65536.0f);
969    } else {
970       converted_param = (GLfloat) param;
971    }
972
973    _mesa_TexEnvf(target, pname, converted_param);
974 }
975
976 void GL_APIENTRY
977 _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
978 {
979    unsigned int i;
980    unsigned int n_params = 4;
981    GLfloat converted_params[4];
982    bool convert_params_value = true;
983
984    switch(target) {
985    case GL_POINT_SPRITE:
986       if (pname != GL_COORD_REPLACE) {
987          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
988                      "glTexEnvxv(target=0x%x)", target);
989          return;
990       }
991       break;
992    case GL_TEXTURE_FILTER_CONTROL_EXT:
993       if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
994          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
995                      "glTexEnvxv(target=0x%x)", target);
996          return;
997       }
998       break;
999    case GL_TEXTURE_ENV:
1000       if (pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA && pname != GL_TEXTURE_ENV_COLOR) {
1001          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1002                      "glTexEnvxv(target=0x%x)", target);
1003          return;
1004       }
1005       break;
1006    default:
1007       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1008                   "glTexEnvxv(target=0x%x)", target);
1009       return;
1010    }
1011    switch(pname) {
1012    case GL_COORD_REPLACE:
1013       if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
1014          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1015                      "glTexEnvxv(pname=0x%x)", pname);
1016          return;
1017       }
1018       convert_params_value = false;
1019       n_params = 1;
1020       break;
1021    case GL_TEXTURE_LOD_BIAS_EXT:
1022       n_params = 1;
1023       break;
1024    case GL_TEXTURE_ENV_MODE:
1025       if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_DECAL && params[0] != GL_BLEND && params[0] != GL_ADD && params[0] != GL_COMBINE) {
1026          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1027                      "glTexEnvxv(pname=0x%x)", pname);
1028          return;
1029       }
1030       convert_params_value = false;
1031       n_params = 1;
1032       break;
1033    case GL_COMBINE_RGB:
1034       if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_ADD && params[0] != GL_ADD_SIGNED && params[0] != GL_INTERPOLATE && params[0] != GL_SUBTRACT && params[0] != GL_DOT3_RGB && params[0] != GL_DOT3_RGBA) {
1035          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1036                      "glTexEnvxv(pname=0x%x)", pname);
1037          return;
1038       }
1039       convert_params_value = false;
1040       n_params = 1;
1041       break;
1042    case GL_COMBINE_ALPHA:
1043       if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_ADD && params[0] != GL_ADD_SIGNED && params[0] != GL_INTERPOLATE && params[0] != GL_SUBTRACT) {
1044          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1045                      "glTexEnvxv(pname=0x%x)", pname);
1046          return;
1047       }
1048       convert_params_value = false;
1049       n_params = 1;
1050       break;
1051    case GL_RGB_SCALE:
1052    case GL_ALPHA_SCALE:
1053       break;
1054    case GL_SRC0_RGB:
1055    case GL_SRC1_RGB:
1056    case GL_SRC2_RGB:
1057    case GL_SRC0_ALPHA:
1058    case GL_SRC1_ALPHA:
1059    case GL_SRC2_ALPHA:
1060       convert_params_value = false;
1061       n_params = 1;
1062       break;
1063    case GL_OPERAND0_RGB:
1064    case GL_OPERAND1_RGB:
1065    case GL_OPERAND2_RGB:
1066       if (params[0] != GL_SRC_COLOR && params[0] != GL_ONE_MINUS_SRC_COLOR && params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) {
1067          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1068                      "glTexEnvxv(pname=0x%x)", pname);
1069          return;
1070       }
1071       convert_params_value = false;
1072       n_params = 1;
1073       break;
1074    case GL_OPERAND0_ALPHA:
1075    case GL_OPERAND1_ALPHA:
1076    case GL_OPERAND2_ALPHA:
1077       if (params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) {
1078          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1079                      "glTexEnvxv(pname=0x%x)", pname);
1080          return;
1081       }
1082       convert_params_value = false;
1083       n_params = 1;
1084       break;
1085    case GL_TEXTURE_ENV_COLOR:
1086       n_params = 4;
1087       break;
1088    default:
1089       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1090                   "glTexEnvxv(pname=0x%x)", pname);
1091       return;
1092    }
1093
1094    if (convert_params_value) {
1095       for (i = 0; i < n_params; i++) {
1096          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1097       }
1098    } else {
1099       for (i = 0; i < n_params; i++) {
1100          converted_params[i] = (GLfloat) params[i];
1101       }
1102    }
1103
1104    _mesa_TexEnvfv(target, pname, converted_params);
1105 }
1106
1107 void GL_APIENTRY
1108 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
1109 {
1110    switch(coord) {
1111    case GL_TEXTURE_GEN_STR_OES:
1112       break;
1113    default:
1114       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1115                   "glTexGeniOES(coord=0x%x)", coord);
1116       return;
1117    }
1118    switch(pname) {
1119    case GL_TEXTURE_GEN_MODE:
1120       if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1121          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1122                      "glTexGeniOES(pname=0x%x)", pname);
1123          return;
1124       }
1125       break;
1126    default:
1127       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1128                   "glTexGeniOES(pname=0x%x)", pname);
1129       return;
1130    }
1131
1132    _es_TexGenf(coord, pname, (GLfloat) param);
1133 }
1134
1135 void GL_APIENTRY
1136 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
1137 {
1138    unsigned int i;
1139    unsigned int n_params = 1;
1140    GLfloat converted_params[1];
1141
1142    switch(coord) {
1143    case GL_TEXTURE_GEN_STR_OES:
1144       break;
1145    default:
1146       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1147                   "glTexGenivOES(coord=0x%x)", coord);
1148       return;
1149    }
1150    switch(pname) {
1151    case GL_TEXTURE_GEN_MODE:
1152       if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1153          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1154                      "glTexGenivOES(pname=0x%x)", pname);
1155          return;
1156       }
1157       n_params = 1;
1158       break;
1159    default:
1160       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1161                   "glTexGenivOES(pname=0x%x)", pname);
1162       return;
1163    }
1164
1165    for (i = 0; i < n_params; i++) {
1166       converted_params[i] = (GLfloat) params[i];
1167    }
1168
1169    _es_TexGenfv(coord, pname, converted_params);
1170 }
1171
1172 void GL_APIENTRY
1173 _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
1174 {
1175    switch(coord) {
1176    case GL_TEXTURE_GEN_STR_OES:
1177       break;
1178    default:
1179       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1180                   "glTexGenxOES(coord=0x%x)", coord);
1181       return;
1182    }
1183    switch(pname) {
1184    case GL_TEXTURE_GEN_MODE:
1185       if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1186          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1187                      "glTexGenxOES(pname=0x%x)", pname);
1188          return;
1189       }
1190       break;
1191    default:
1192       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1193                   "glTexGenxOES(pname=0x%x)", pname);
1194       return;
1195    }
1196
1197    _es_TexGenf(coord, pname, (GLfloat) param);
1198 }
1199
1200 void GL_APIENTRY
1201 _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
1202 {
1203     unsigned int i;
1204     unsigned int n_params = 1;
1205     GLfloat converted_params[1];
1206
1207     switch(coord) {
1208     case GL_TEXTURE_GEN_STR_OES:
1209        break;
1210     default:
1211        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1212                    "glTexGenxvOES(coord=0x%x)", coord);
1213        return;
1214     }
1215     switch(pname) {
1216     case GL_TEXTURE_GEN_MODE:
1217        if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1218           _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1219                       "glTexGenxvOES(pname=0x%x)", pname);
1220           return;
1221        }
1222        n_params = 1;
1223        break;
1224     default:
1225        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1226                    "glTexGenxvOES(pname=0x%x)", pname);
1227        return;
1228     }
1229
1230     for (i = 0; i < n_params; i++) {
1231        converted_params[i] = (GLfloat) params[i];
1232     }
1233
1234     _es_TexGenfv(coord, pname, converted_params);
1235 }
1236
1237 void GL_APIENTRY
1238 _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
1239 {
1240    GLfloat converted_param;
1241    bool convert_param_value = true;
1242
1243    switch(target) {
1244    case GL_TEXTURE_2D:
1245    case GL_TEXTURE_CUBE_MAP:
1246    case GL_TEXTURE_EXTERNAL_OES:
1247       break;
1248    default:
1249       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1250                   "glTexParameterx(target=0x%x)", target);
1251       return;
1252    }
1253    switch(pname) {
1254    case GL_TEXTURE_WRAP_S:
1255    case GL_TEXTURE_WRAP_T:
1256       if (param != GL_CLAMP_TO_EDGE && param != GL_REPEAT && param != GL_MIRRORED_REPEAT) {
1257          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1258                      "glTexParameterx(pname=0x%x)", pname);
1259          return;
1260       }
1261       convert_param_value = false;
1262       break;
1263    case GL_TEXTURE_MIN_FILTER:
1264    case GL_TEXTURE_MAG_FILTER:
1265       convert_param_value = false;
1266       break;
1267    case GL_GENERATE_MIPMAP:
1268       if (param != GL_TRUE && param != GL_FALSE) {
1269          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1270                      "glTexParameterx(pname=0x%x)", pname);
1271          return;
1272       }
1273       convert_param_value = false;
1274       break;
1275    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1276       break;
1277    default:
1278       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1279                   "glTexParameterx(pname=0x%x)", pname);
1280       return;
1281    }
1282
1283    if (convert_param_value) {
1284       converted_param = (GLfloat) (param / 65536.0f);
1285    } else {
1286       converted_param = (GLfloat) param;
1287    }
1288
1289    _mesa_TexParameterf(target, pname, converted_param);
1290 }
1291
1292 void GL_APIENTRY
1293 _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
1294 {
1295    unsigned int i;
1296    unsigned int n_params = 4;
1297    GLfloat converted_params[4];
1298    bool convert_params_value = true;
1299
1300    switch(target) {
1301    case GL_TEXTURE_2D:
1302    case GL_TEXTURE_CUBE_MAP:
1303    case GL_TEXTURE_EXTERNAL_OES:
1304       break;
1305    default:
1306       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1307                   "glTexParameterxv(target=0x%x)", target);
1308       return;
1309    }
1310    switch(pname) {
1311    case GL_TEXTURE_WRAP_S:
1312    case GL_TEXTURE_WRAP_T:
1313       if (params[0] != GL_CLAMP_TO_EDGE && params[0] != GL_REPEAT && params[0] != GL_MIRRORED_REPEAT) {
1314          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1315                      "glTexParameterxv(pname=0x%x)", pname);
1316          return;
1317       }
1318       convert_params_value = false;
1319       n_params = 1;
1320       break;
1321    case GL_TEXTURE_MIN_FILTER:
1322    case GL_TEXTURE_MAG_FILTER:
1323       convert_params_value = false;
1324       n_params = 1;
1325       break;
1326    case GL_GENERATE_MIPMAP:
1327       if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
1328          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1329                      "glTexParameterxv(pname=0x%x)", pname);
1330          return;
1331       }
1332       convert_params_value = false;
1333       n_params = 1;
1334       break;
1335    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1336       n_params = 1;
1337       break;
1338    case GL_TEXTURE_CROP_RECT_OES:
1339       n_params = 4;
1340       break;
1341    default:
1342       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1343                   "glTexParameterxv(pname=0x%x)", pname);
1344       return;
1345    }
1346
1347    if (convert_params_value) {
1348       for (i = 0; i < n_params; i++) {
1349          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1350       }
1351    } else {
1352       for (i = 0; i < n_params; i++) {
1353          converted_params[i] = (GLfloat) params[i];
1354       }
1355    }
1356
1357    _mesa_TexParameterfv(target, pname, converted_params);
1358 }
1359
1360 void GL_APIENTRY
1361 _es_Translatex(GLfixed x, GLfixed y, GLfixed z)
1362 {
1363     _mesa_Translatef((GLfloat) (x / 65536.0f),
1364                      (GLfloat) (y / 65536.0f),
1365                      (GLfloat) (z / 65536.0f));
1366 }
1367
1368 #endif /* FEATURE_ES1 */