es1_conversion.c revision d0ace4e949d0e2f11e6f0fb0fd97ccde58457937
1255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdbool.h>
2255e72915d4cbddceb435e13d81601755714e9fSE Android#include "main/mfeatures.h"
3255e72915d4cbddceb435e13d81601755714e9fSE Android
4255e72915d4cbddceb435e13d81601755714e9fSE Android#if FEATURE_ES1
5255e72915d4cbddceb435e13d81601755714e9fSE Android
6255e72915d4cbddceb435e13d81601755714e9fSE Android#include "api_loopback.h"
7255e72915d4cbddceb435e13d81601755714e9fSE Android#include "api_exec.h"
8255e72915d4cbddceb435e13d81601755714e9fSE Android#include "blend.h"
9255e72915d4cbddceb435e13d81601755714e9fSE Android#include "clear.h"
10255e72915d4cbddceb435e13d81601755714e9fSE Android#include "clip.h"
11255e72915d4cbddceb435e13d81601755714e9fSE Android#include "context.h"
12255e72915d4cbddceb435e13d81601755714e9fSE Android#include "depth.h"
13255e72915d4cbddceb435e13d81601755714e9fSE Android#include "fog.h"
14255e72915d4cbddceb435e13d81601755714e9fSE Android#include "imports.h"
15255e72915d4cbddceb435e13d81601755714e9fSE Android#include "light.h"
16255e72915d4cbddceb435e13d81601755714e9fSE Android#include "lines.h"
17255e72915d4cbddceb435e13d81601755714e9fSE Android#include "matrix.h"
18255e72915d4cbddceb435e13d81601755714e9fSE Android#include "multisample.h"
19255e72915d4cbddceb435e13d81601755714e9fSE Android#include "pixelstore.h"
20255e72915d4cbddceb435e13d81601755714e9fSE Android#include "points.h"
21255e72915d4cbddceb435e13d81601755714e9fSE Android#include "polygon.h"
22255e72915d4cbddceb435e13d81601755714e9fSE Android#include "readpix.h"
23255e72915d4cbddceb435e13d81601755714e9fSE Android#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   switch(texture) {
805   case GL_TEXTURE0:
806   case GL_TEXTURE1:
807   case GL_TEXTURE2:
808   case GL_TEXTURE3:
809   case GL_TEXTURE4:
810   case GL_TEXTURE5:
811   case GL_TEXTURE6:
812   case GL_TEXTURE7:
813   case GL_TEXTURE8:
814   case GL_TEXTURE9:
815   case GL_TEXTURE10:
816   case GL_TEXTURE11:
817   case GL_TEXTURE12:
818   case GL_TEXTURE13:
819   case GL_TEXTURE14:
820   case GL_TEXTURE15:
821   case GL_TEXTURE16:
822   case GL_TEXTURE17:
823   case GL_TEXTURE18:
824   case GL_TEXTURE19:
825   case GL_TEXTURE20:
826   case GL_TEXTURE21:
827   case GL_TEXTURE22:
828   case GL_TEXTURE23:
829   case GL_TEXTURE24:
830   case GL_TEXTURE25:
831   case GL_TEXTURE26:
832   case GL_TEXTURE27:
833   case GL_TEXTURE28:
834   case GL_TEXTURE29:
835   case GL_TEXTURE30:
836   case GL_TEXTURE31:
837      break;
838   default:
839      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
840                  "glMultiTexCoord4x(texture=0x%x)", texture);
841      return;
842   }
843
844
845   _es_MultiTexCoord4f(texture,
846                       (GLfloat) (s / 65536.0f),
847                       (GLfloat) (t / 65536.0f),
848                       (GLfloat) (r / 65536.0f),
849                       (GLfloat) (q / 65536.0f));
850}
851
852void GL_APIENTRY
853_es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
854{
855   _es_Normal3f((GLfloat) (nx / 65536.0f),
856                (GLfloat) (ny / 65536.0f),
857                (GLfloat) (nz / 65536.0f));
858}
859
860void GL_APIENTRY
861_es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
862           GLfloat zNear, GLfloat zFar)
863{
864   _mesa_Ortho((GLdouble) (left),
865               (GLdouble) (right),
866               (GLdouble) (bottom),
867               (GLdouble) (top),
868               (GLdouble) (zNear),
869               (GLdouble) (zFar));
870}
871
872void GL_APIENTRY
873_es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
874           GLfixed zNear, GLfixed zFar)
875{
876   _mesa_Ortho((GLdouble) (left / 65536.0),
877               (GLdouble) (right / 65536.0),
878               (GLdouble) (bottom / 65536.0),
879               (GLdouble) (top / 65536.0),
880               (GLdouble) (zNear / 65536.0),
881               (GLdouble) (zFar / 65536.0));
882}
883
884void GL_APIENTRY
885_es_PointParameterx(GLenum pname, GLfixed param)
886{
887   switch(pname) {
888   case GL_POINT_SIZE_MIN:
889   case GL_POINT_SIZE_MAX:
890   case GL_POINT_FADE_THRESHOLD_SIZE:
891      break;
892   default:
893      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
894                  "glPointParameterx(pname=0x%x)", pname);
895      return;
896   }
897
898   _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
899}
900
901void GL_APIENTRY
902_es_PointParameterxv(GLenum pname, const GLfixed *params)
903{
904   unsigned int i;
905   unsigned int n_params = 3;
906   GLfloat converted_params[3];
907
908   switch(pname) {
909   case GL_POINT_SIZE_MIN:
910   case GL_POINT_SIZE_MAX:
911   case GL_POINT_FADE_THRESHOLD_SIZE:
912      n_params = 1;
913      break;
914   case GL_POINT_DISTANCE_ATTENUATION:
915      n_params = 3;
916      break;
917   default:
918      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
919                  "glPointParameterxv(pname=0x%x)", pname);
920      return;
921   }
922
923   for (i = 0; i < n_params; i++) {
924      converted_params[i] = (GLfloat) (params[i] / 65536.0f);
925   }
926
927   _mesa_PointParameterfv(pname, converted_params);
928}
929
930void GL_APIENTRY
931_es_PointSizex(GLfixed size)
932{
933   _mesa_PointSize((GLfloat) (size / 65536.0f));
934}
935
936void GL_APIENTRY
937_es_PolygonOffsetx(GLfixed factor, GLfixed units)
938{
939   _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
940                       (GLfloat) (units / 65536.0f));
941}
942
943void GL_APIENTRY
944_es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
945{
946   _mesa_Rotatef((GLfloat) (angle / 65536.0f),
947                 (GLfloat) (x / 65536.0f),
948                 (GLfloat) (y / 65536.0f),
949                 (GLfloat) (z / 65536.0f));
950}
951
952void GL_APIENTRY
953_es_SampleCoveragex(GLclampx value, GLboolean invert)
954{
955   _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
956                           invert);
957}
958
959void GL_APIENTRY
960_es_Scalex(GLfixed x, GLfixed y, GLfixed z)
961{
962   _mesa_Scalef((GLfloat) (x / 65536.0f),
963                (GLfloat) (y / 65536.0f),
964                (GLfloat) (z / 65536.0f));
965}
966
967void GL_APIENTRY
968_es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
969{
970   GLfloat converted_param;
971   bool convert_param_value = true;
972
973   switch(target) {
974   case GL_POINT_SPRITE:
975      if (pname != GL_COORD_REPLACE) {
976         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
977                     "glTexEnvx(target=0x%x)", target);
978         return;
979      }
980      break;
981   case GL_TEXTURE_FILTER_CONTROL_EXT:
982      if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
983         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
984                     "glTexEnvx(target=0x%x)", target);
985         return;
986      }
987      break;
988   case GL_TEXTURE_ENV:
989      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) {
990         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
991                     "glTexEnvx(target=0x%x)", target);
992         return;
993      }
994      break;
995   default:
996      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
997                  "glTexEnvx(target=0x%x)", target);
998      return;
999   }
1000   switch(pname) {
1001   case GL_COORD_REPLACE:
1002      if (param != GL_TRUE && param != GL_FALSE) {
1003         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1004                     "glTexEnvx(pname=0x%x)", pname);
1005         return;
1006      }
1007      convert_param_value = false;
1008      break;
1009   case GL_TEXTURE_LOD_BIAS_EXT:
1010      break;
1011   case GL_TEXTURE_ENV_MODE:
1012      if (param != GL_REPLACE && param != GL_MODULATE && param != GL_DECAL && param != GL_BLEND && param != GL_ADD && param != GL_COMBINE) {
1013         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1014                     "glTexEnvx(pname=0x%x)", pname);
1015         return;
1016      }
1017      convert_param_value = false;
1018      break;
1019   case GL_COMBINE_RGB:
1020      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) {
1021         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1022                     "glTexEnvx(pname=0x%x)", pname);
1023         return;
1024      }
1025      convert_param_value = false;
1026      break;
1027   case GL_COMBINE_ALPHA:
1028      if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT) {
1029         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1030                     "glTexEnvx(pname=0x%x)", pname);
1031         return;
1032      }
1033      convert_param_value = false;
1034      break;
1035   case GL_RGB_SCALE:
1036   case GL_ALPHA_SCALE:
1037      break;
1038   case GL_SRC0_RGB:
1039   case GL_SRC1_RGB:
1040   case GL_SRC2_RGB:
1041   case GL_SRC0_ALPHA:
1042   case GL_SRC1_ALPHA:
1043   case GL_SRC2_ALPHA:
1044      if (param != GL_TEXTURE && param != GL_CONSTANT && param != GL_PRIMARY_COLOR && param != GL_PREVIOUS && param != GL_TEXTURE0 && param != GL_TEXTURE1 && param != GL_TEXTURE2 && param != GL_TEXTURE3 && param != GL_TEXTURE4 && param != GL_TEXTURE5 && param != GL_TEXTURE6 && param != GL_TEXTURE7 && param != GL_TEXTURE8 && param != GL_TEXTURE9 && param != GL_TEXTURE10 && param != GL_TEXTURE11 && param != GL_TEXTURE12 && param != GL_TEXTURE13 && param != GL_TEXTURE14 && param != GL_TEXTURE15 && param != GL_TEXTURE16 && param != GL_TEXTURE17 && param != GL_TEXTURE18 && param != GL_TEXTURE19 && param != GL_TEXTURE20 && param != GL_TEXTURE21 && param != GL_TEXTURE22 && param != GL_TEXTURE23 && param != GL_TEXTURE24 && param != GL_TEXTURE25 && param != GL_TEXTURE26 && param != GL_TEXTURE27 && param != GL_TEXTURE28 && param != GL_TEXTURE29 && param != GL_TEXTURE30 && param != GL_TEXTURE31) {
1045         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1046                     "glTexEnvx(pname=0x%x)", pname);
1047         return;
1048      }
1049      convert_param_value = false;
1050      break;
1051   case GL_OPERAND0_RGB:
1052   case GL_OPERAND1_RGB:
1053   case GL_OPERAND2_RGB:
1054      if (param != GL_SRC_COLOR && param != GL_ONE_MINUS_SRC_COLOR && param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
1055         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1056                     "glTexEnvx(pname=0x%x)", pname);
1057         return;
1058      }
1059      convert_param_value = false;
1060      break;
1061   case GL_OPERAND0_ALPHA:
1062   case GL_OPERAND1_ALPHA:
1063   case GL_OPERAND2_ALPHA:
1064      if (param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
1065         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1066                     "glTexEnvx(pname=0x%x)", pname);
1067         return;
1068      }
1069      convert_param_value = false;
1070      break;
1071   default:
1072      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1073                  "glTexEnvx(pname=0x%x)", pname);
1074      return;
1075   }
1076
1077   if (convert_param_value) {
1078      converted_param = (GLfloat) (param / 65536.0f);
1079   } else {
1080      converted_param = (GLfloat) param;
1081   }
1082
1083   _mesa_TexEnvf(target, pname, converted_param);
1084}
1085
1086void GL_APIENTRY
1087_es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
1088{
1089   unsigned int i;
1090   unsigned int n_params = 4;
1091   GLfloat converted_params[4];
1092   bool convert_params_value = true;
1093
1094   switch(target) {
1095   case GL_POINT_SPRITE:
1096      if (pname != GL_COORD_REPLACE) {
1097         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1098                     "glTexEnvxv(target=0x%x)", target);
1099         return;
1100      }
1101      break;
1102   case GL_TEXTURE_FILTER_CONTROL_EXT:
1103      if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
1104         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1105                     "glTexEnvxv(target=0x%x)", target);
1106         return;
1107      }
1108      break;
1109   case GL_TEXTURE_ENV:
1110      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) {
1111         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1112                     "glTexEnvxv(target=0x%x)", target);
1113         return;
1114      }
1115      break;
1116   default:
1117      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1118                  "glTexEnvxv(target=0x%x)", target);
1119      return;
1120   }
1121   switch(pname) {
1122   case GL_COORD_REPLACE:
1123      if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
1124         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1125                     "glTexEnvxv(pname=0x%x)", pname);
1126         return;
1127      }
1128      convert_params_value = false;
1129      n_params = 1;
1130      break;
1131   case GL_TEXTURE_LOD_BIAS_EXT:
1132      n_params = 1;
1133      break;
1134   case GL_TEXTURE_ENV_MODE:
1135      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) {
1136         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1137                     "glTexEnvxv(pname=0x%x)", pname);
1138         return;
1139      }
1140      convert_params_value = false;
1141      n_params = 1;
1142      break;
1143   case GL_COMBINE_RGB:
1144      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) {
1145         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1146                     "glTexEnvxv(pname=0x%x)", pname);
1147         return;
1148      }
1149      convert_params_value = false;
1150      n_params = 1;
1151      break;
1152   case GL_COMBINE_ALPHA:
1153      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) {
1154         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1155                     "glTexEnvxv(pname=0x%x)", pname);
1156         return;
1157      }
1158      convert_params_value = false;
1159      n_params = 1;
1160      break;
1161   case GL_RGB_SCALE:
1162   case GL_ALPHA_SCALE:
1163      break;
1164   case GL_SRC0_RGB:
1165   case GL_SRC1_RGB:
1166   case GL_SRC2_RGB:
1167   case GL_SRC0_ALPHA:
1168   case GL_SRC1_ALPHA:
1169   case GL_SRC2_ALPHA:
1170      if (params[0] != GL_TEXTURE && params[0] != GL_CONSTANT && params[0] != GL_PRIMARY_COLOR && params[0] != GL_PREVIOUS && params[0] != GL_TEXTURE0 && params[0] != GL_TEXTURE1 && params[0] != GL_TEXTURE2 && params[0] != GL_TEXTURE3 && params[0] != GL_TEXTURE4 && params[0] != GL_TEXTURE5 && params[0] != GL_TEXTURE6 && params[0] != GL_TEXTURE7 && params[0] != GL_TEXTURE8 && params[0] != GL_TEXTURE9 && params[0] != GL_TEXTURE10 && params[0] != GL_TEXTURE11 && params[0] != GL_TEXTURE12 && params[0] != GL_TEXTURE13 && params[0] != GL_TEXTURE14 && params[0] != GL_TEXTURE15 && params[0] != GL_TEXTURE16 && params[0] != GL_TEXTURE17 && params[0] != GL_TEXTURE18 && params[0] != GL_TEXTURE19 && params[0] != GL_TEXTURE20 && params[0] != GL_TEXTURE21 && params[0] != GL_TEXTURE22 && params[0] != GL_TEXTURE23 && params[0] != GL_TEXTURE24 && params[0] != GL_TEXTURE25 && params[0] != GL_TEXTURE26 && params[0] != GL_TEXTURE27 && params[0] != GL_TEXTURE28 && params[0] != GL_TEXTURE29 && params[0] != GL_TEXTURE30 && params[0] != GL_TEXTURE31) {
1171         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1172                     "glTexEnvxv(pname=0x%x)", pname);
1173         return;
1174      }
1175      convert_params_value = false;
1176      n_params = 1;
1177      break;
1178   case GL_OPERAND0_RGB:
1179   case GL_OPERAND1_RGB:
1180   case GL_OPERAND2_RGB:
1181      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) {
1182         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1183                     "glTexEnvxv(pname=0x%x)", pname);
1184         return;
1185      }
1186      convert_params_value = false;
1187      n_params = 1;
1188      break;
1189   case GL_OPERAND0_ALPHA:
1190   case GL_OPERAND1_ALPHA:
1191   case GL_OPERAND2_ALPHA:
1192      if (params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) {
1193         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1194                     "glTexEnvxv(pname=0x%x)", pname);
1195         return;
1196      }
1197      convert_params_value = false;
1198      n_params = 1;
1199      break;
1200   case GL_TEXTURE_ENV_COLOR:
1201      n_params = 4;
1202      break;
1203   default:
1204      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1205                  "glTexEnvxv(pname=0x%x)", pname);
1206      return;
1207   }
1208
1209   if (convert_params_value) {
1210      for (i = 0; i < n_params; i++) {
1211         converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1212      }
1213   } else {
1214      for (i = 0; i < n_params; i++) {
1215         converted_params[i] = (GLfloat) params[i];
1216      }
1217   }
1218
1219   _mesa_TexEnvfv(target, pname, converted_params);
1220}
1221
1222void GL_APIENTRY
1223_check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
1224{
1225   switch(coord) {
1226   case GL_TEXTURE_GEN_STR_OES:
1227      break;
1228   default:
1229      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1230                  "glTexGeniOES(coord=0x%x)", coord);
1231      return;
1232   }
1233   switch(pname) {
1234   case GL_TEXTURE_GEN_MODE:
1235      if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1236         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1237                     "glTexGeniOES(pname=0x%x)", pname);
1238         return;
1239      }
1240      break;
1241   default:
1242      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1243                  "glTexGeniOES(pname=0x%x)", pname);
1244      return;
1245   }
1246
1247   _es_TexGenf(coord, pname, (GLfloat) param);
1248}
1249
1250void GL_APIENTRY
1251_check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
1252{
1253   unsigned int i;
1254   unsigned int n_params = 1;
1255   GLfloat converted_params[1];
1256
1257   switch(coord) {
1258   case GL_TEXTURE_GEN_STR_OES:
1259      break;
1260   default:
1261      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1262                  "glTexGenivOES(coord=0x%x)", coord);
1263      return;
1264   }
1265   switch(pname) {
1266   case GL_TEXTURE_GEN_MODE:
1267      if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1268         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1269                     "glTexGenivOES(pname=0x%x)", pname);
1270         return;
1271      }
1272      n_params = 1;
1273      break;
1274   default:
1275      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1276                  "glTexGenivOES(pname=0x%x)", pname);
1277      return;
1278   }
1279
1280   for (i = 0; i < n_params; i++) {
1281      converted_params[i] = (GLfloat) params[i];
1282   }
1283
1284   _es_TexGenfv(coord, pname, converted_params);
1285}
1286
1287void GL_APIENTRY
1288_check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
1289{
1290   switch(coord) {
1291   case GL_TEXTURE_GEN_STR_OES:
1292      break;
1293   default:
1294      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1295                  "glTexGenxOES(coord=0x%x)", coord);
1296      return;
1297   }
1298   switch(pname) {
1299   case GL_TEXTURE_GEN_MODE:
1300      if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1301         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1302                     "glTexGenxOES(pname=0x%x)", pname);
1303         return;
1304      }
1305      break;
1306   default:
1307      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1308                  "glTexGenxOES(pname=0x%x)", pname);
1309      return;
1310   }
1311
1312   _es_TexGenf(coord, pname, (GLfloat) param);
1313}
1314
1315void GL_APIENTRY
1316_check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
1317{
1318    unsigned int i;
1319    unsigned int n_params = 1;
1320    GLfloat converted_params[1];
1321
1322    switch(coord) {
1323    case GL_TEXTURE_GEN_STR_OES:
1324       break;
1325    default:
1326       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1327                   "glTexGenxvOES(coord=0x%x)", coord);
1328       return;
1329    }
1330    switch(pname) {
1331    case GL_TEXTURE_GEN_MODE:
1332       if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1333          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1334                      "glTexGenxvOES(pname=0x%x)", pname);
1335          return;
1336       }
1337       n_params = 1;
1338       break;
1339    default:
1340       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1341                   "glTexGenxvOES(pname=0x%x)", pname);
1342       return;
1343    }
1344
1345    for (i = 0; i < n_params; i++) {
1346       converted_params[i] = (GLfloat) params[i];
1347    }
1348
1349    _es_TexGenfv(coord, pname, converted_params);
1350}
1351
1352void GL_APIENTRY
1353_es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
1354{
1355   GLfloat converted_param;
1356   bool convert_param_value = true;
1357
1358   switch(target) {
1359   case GL_TEXTURE_2D:
1360   case GL_TEXTURE_CUBE_MAP:
1361   case GL_TEXTURE_EXTERNAL_OES:
1362      break;
1363   default:
1364      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1365                  "glTexParameterx(target=0x%x)", target);
1366      return;
1367   }
1368   switch(pname) {
1369   case GL_TEXTURE_WRAP_S:
1370   case GL_TEXTURE_WRAP_T:
1371      if (param != GL_CLAMP_TO_EDGE && param != GL_REPEAT && param != GL_MIRRORED_REPEAT) {
1372         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1373                     "glTexParameterx(pname=0x%x)", pname);
1374         return;
1375      }
1376      convert_param_value = false;
1377      break;
1378   case GL_TEXTURE_MIN_FILTER:
1379      if (param != GL_NEAREST && param != GL_LINEAR && param != GL_NEAREST_MIPMAP_NEAREST && param != GL_NEAREST_MIPMAP_LINEAR && param != GL_LINEAR_MIPMAP_NEAREST && param != GL_LINEAR_MIPMAP_LINEAR) {
1380         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1381                     "glTexParameterx(pname=0x%x)", pname);
1382         return;
1383      }
1384      convert_param_value = false;
1385      break;
1386   case GL_TEXTURE_MAG_FILTER:
1387      if (param != GL_NEAREST && param != GL_LINEAR) {
1388         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1389                     "glTexParameterx(pname=0x%x)", pname);
1390         return;
1391      }
1392      convert_param_value = false;
1393      break;
1394   case GL_GENERATE_MIPMAP:
1395      if (param != GL_TRUE && param != GL_FALSE) {
1396         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1397                     "glTexParameterx(pname=0x%x)", pname);
1398         return;
1399      }
1400      convert_param_value = false;
1401      break;
1402   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1403      break;
1404   default:
1405      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1406                  "glTexParameterx(pname=0x%x)", pname);
1407      return;
1408   }
1409
1410   if (convert_param_value) {
1411      converted_param = (GLfloat) (param / 65536.0f);
1412   } else {
1413      converted_param = (GLfloat) param;
1414   }
1415
1416   _mesa_TexParameterf(target, pname, converted_param);
1417}
1418
1419void GL_APIENTRY
1420_es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
1421{
1422   unsigned int i;
1423   unsigned int n_params = 4;
1424   GLfloat converted_params[4];
1425   bool convert_params_value = true;
1426
1427   switch(target) {
1428   case GL_TEXTURE_2D:
1429   case GL_TEXTURE_CUBE_MAP:
1430   case GL_TEXTURE_EXTERNAL_OES:
1431      break;
1432   default:
1433      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1434                  "glTexParameterxv(target=0x%x)", target);
1435      return;
1436   }
1437   switch(pname) {
1438   case GL_TEXTURE_WRAP_S:
1439   case GL_TEXTURE_WRAP_T:
1440      if (params[0] != GL_CLAMP_TO_EDGE && params[0] != GL_REPEAT && params[0] != GL_MIRRORED_REPEAT) {
1441         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1442                     "glTexParameterxv(pname=0x%x)", pname);
1443         return;
1444      }
1445      convert_params_value = false;
1446      n_params = 1;
1447      break;
1448   case GL_TEXTURE_MIN_FILTER:
1449      if (params[0] != GL_NEAREST && params[0] != GL_LINEAR && params[0] != GL_NEAREST_MIPMAP_NEAREST && params[0] != GL_NEAREST_MIPMAP_LINEAR && params[0] != GL_LINEAR_MIPMAP_NEAREST && params[0] != GL_LINEAR_MIPMAP_LINEAR) {
1450         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1451                     "glTexParameterxv(pname=0x%x)", pname);
1452         return;
1453      }
1454      convert_params_value = false;
1455      n_params = 1;
1456      break;
1457   case GL_TEXTURE_MAG_FILTER:
1458      if (params[0] != GL_NEAREST && params[0] != GL_LINEAR) {
1459         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1460                     "glTexParameterxv(pname=0x%x)", pname);
1461         return;
1462      }
1463      convert_params_value = false;
1464      n_params = 1;
1465      break;
1466   case GL_GENERATE_MIPMAP:
1467      if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
1468         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1469                     "glTexParameterxv(pname=0x%x)", pname);
1470         return;
1471      }
1472      convert_params_value = false;
1473      n_params = 1;
1474      break;
1475   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1476      n_params = 1;
1477      break;
1478   case GL_TEXTURE_CROP_RECT_OES:
1479      n_params = 4;
1480      break;
1481   default:
1482      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1483                  "glTexParameterxv(pname=0x%x)", pname);
1484      return;
1485   }
1486
1487   if (convert_params_value) {
1488      for (i = 0; i < n_params; i++) {
1489         converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1490      }
1491   } else {
1492      for (i = 0; i < n_params; i++) {
1493         converted_params[i] = (GLfloat) params[i];
1494      }
1495   }
1496
1497   _mesa_TexParameterfv(target, pname, converted_params);
1498}
1499
1500void GL_APIENTRY
1501_es_Translatex(GLfixed x, GLfixed y, GLfixed z)
1502{
1503    _mesa_Translatef((GLfloat) (x / 65536.0f),
1504                     (GLfloat) (y / 65536.0f),
1505                     (GLfloat) (z / 65536.0f));
1506}
1507
1508#endif /* FEATURE_ES1 */
1509