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