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