1 
2 #include <stdbool.h>
3 
4 #include "api_exec.h"
5 #include "blend.h"
6 #include "clear.h"
7 #include "clip.h"
8 #include "context.h"
9 #include "depth.h"
10 #include "fog.h"
11 
12 #include "light.h"
13 #include "lines.h"
14 #include "matrix.h"
15 #include "multisample.h"
16 #include "pixelstore.h"
17 #include "points.h"
18 #include "polygon.h"
19 #include "readpix.h"
20 #include "texenv.h"
21 #include "texgen.h"
22 #include "texobj.h"
23 #include "texparam.h"
24 #include "mtypes.h"
25 #include "viewport.h"
26 #include "main/drawtex.h"
27 #include "vbo/vbo.h"
28 
29 #include "main/es1_conversion.h"
30 
31 void GL_APIENTRY
_mesa_AlphaFuncx(GLenum func,GLclampx ref)32 _mesa_AlphaFuncx(GLenum func, GLclampx ref)
33 {
34    _mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f));
35 }
36 
37 void GL_APIENTRY
_mesa_ClearColorx(GLclampx red,GLclampx green,GLclampx blue,GLclampx alpha)38 _mesa_ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
39 {
40    _mesa_ClearColor((GLclampf) (red / 65536.0f),
41                     (GLclampf) (green / 65536.0f),
42                     (GLclampf) (blue / 65536.0f),
43                     (GLclampf) (alpha / 65536.0f));
44 }
45 
46 void GL_APIENTRY
_mesa_ClearDepthx(GLclampx depth)47 _mesa_ClearDepthx(GLclampx depth)
48 {
49    _mesa_ClearDepthf((GLclampf) (depth / 65536.0f));
50 }
51 
52 void GL_APIENTRY
_mesa_ClipPlanef(GLenum plane,const GLfloat * equation)53 _mesa_ClipPlanef(GLenum plane, const GLfloat *equation)
54 {
55    unsigned int i;
56    GLdouble converted_equation[4];
57 
58    for (i = 0; i < ARRAY_SIZE(converted_equation); i++) {
59       converted_equation[i] = (GLdouble) (equation[i]);
60    }
61 
62    _mesa_ClipPlane(plane, converted_equation);
63 }
64 
65 void GL_APIENTRY
_mesa_ClipPlanex(GLenum plane,const GLfixed * equation)66 _mesa_ClipPlanex(GLenum plane, const GLfixed *equation)
67 {
68    unsigned int i;
69    GLdouble converted_equation[4];
70 
71    for (i = 0; i < ARRAY_SIZE(converted_equation); i++) {
72       converted_equation[i] = (GLdouble) (equation[i] / 65536.0);
73    }
74 
75    _mesa_ClipPlane(plane, converted_equation);
76 }
77 
78 void GL_APIENTRY
_es_Color4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)79 _es_Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
80 {
81     _es_Color4f((GLfloat) (red / 255.0f),
82                 (GLfloat) (green / 255.0f),
83                 (GLfloat) (blue / 255.0f),
84                 (GLfloat) (alpha / 255.0f));
85 }
86 
87 void GL_APIENTRY
_mesa_Color4x(GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)88 _mesa_Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
89 {
90     _es_Color4f((GLfloat) (red / 65536.0f),
91                 (GLfloat) (green / 65536.0f),
92                 (GLfloat) (blue / 65536.0f),
93                 (GLfloat) (alpha / 65536.0f));
94 }
95 
96 void GL_APIENTRY
_mesa_DepthRangex(GLclampx zNear,GLclampx zFar)97 _mesa_DepthRangex(GLclampx zNear, GLclampx zFar)
98 {
99     _mesa_DepthRangef((GLclampf) (zNear / 65536.0f),
100                       (GLclampf) (zFar / 65536.0f));
101 }
102 
103 void GL_APIENTRY
_mesa_DrawTexxOES(GLfixed x,GLfixed y,GLfixed z,GLfixed w,GLfixed h)104 _mesa_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h)
105 {
106 
107     _mesa_DrawTexfOES((GLfloat) (x / 65536.0f),
108                    (GLfloat) (y / 65536.0f),
109                    (GLfloat) (z / 65536.0f),
110                    (GLfloat) (w / 65536.0f),
111                    (GLfloat) (h / 65536.0f));
112 }
113 
114 void GL_APIENTRY
_mesa_DrawTexxvOES(const GLfixed * coords)115 _mesa_DrawTexxvOES(const GLfixed *coords)
116 {
117     unsigned int i;
118     GLfloat converted_coords[5];
119 
120     for (i = 0; i < ARRAY_SIZE(converted_coords); i++) {
121         converted_coords[i] = (GLfloat) (coords[i] / 65536.0f);
122     }
123 
124     _mesa_DrawTexfvOES(converted_coords);
125 }
126 
127 void GL_APIENTRY
_mesa_Fogx(GLenum pname,GLfixed param)128 _mesa_Fogx(GLenum pname, GLfixed param)
129 {
130    if (pname != GL_FOG_MODE) {
131       _mesa_Fogf(pname, (GLfloat) (param / 65536.0f));
132    } else {
133       _mesa_Fogf(pname, (GLfloat) param);
134    }
135 
136 }
137 
138 void GL_APIENTRY
_mesa_Fogxv(GLenum pname,const GLfixed * params)139 _mesa_Fogxv(GLenum pname, const GLfixed *params)
140 {
141    unsigned int i;
142    unsigned int n_params = 4;
143    GLfloat converted_params[4];
144    bool convert_params_value = true;
145 
146    switch(pname) {
147    case GL_FOG_MODE:
148       convert_params_value = false;
149       n_params = 1;
150       break;
151    case GL_FOG_COLOR:
152       n_params = 4;
153       break;
154    case GL_FOG_DENSITY:
155    case GL_FOG_START:
156    case GL_FOG_END:
157       n_params = 1;
158       break;
159    default:
160       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
161                   "glFogxv(pname=0x%x)", pname);
162       return;
163    }
164 
165    if (convert_params_value) {
166       for (i = 0; i < n_params; i++) {
167          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
168       }
169    } else {
170       for (i = 0; i < n_params; i++) {
171          converted_params[i] = (GLfloat) params[i];
172       }
173    }
174 
175    _mesa_Fogfv(pname, converted_params);
176 }
177 
178 void GL_APIENTRY
_mesa_Frustumf(GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)179 _mesa_Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
180              GLfloat zNear, GLfloat zFar)
181 {
182    _mesa_Frustum((GLdouble) (left),
183                  (GLdouble) (right),
184                  (GLdouble) (bottom),
185                  (GLdouble) (top),
186                  (GLdouble) (zNear),
187                  (GLdouble) (zFar));
188 }
189 
190 void GL_APIENTRY
_mesa_Frustumx(GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)191 _mesa_Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
192              GLfixed zNear, GLfixed zFar)
193 {
194    _mesa_Frustum((GLdouble) (left / 65536.0),
195                  (GLdouble) (right / 65536.0),
196                  (GLdouble) (bottom / 65536.0),
197                  (GLdouble) (top / 65536.0),
198                  (GLdouble) (zNear / 65536.0),
199                  (GLdouble) (zFar / 65536.0));
200 }
201 
202 void GL_APIENTRY
_mesa_GetClipPlanef(GLenum plane,GLfloat * equation)203 _mesa_GetClipPlanef(GLenum plane, GLfloat *equation)
204 {
205    unsigned int i;
206    GLdouble converted_equation[4];
207 
208    _mesa_GetClipPlane(plane, converted_equation);
209    for (i = 0; i < ARRAY_SIZE(converted_equation); i++) {
210       equation[i] = (GLfloat) (converted_equation[i]);
211    }
212 }
213 
214 void GL_APIENTRY
_mesa_GetClipPlanex(GLenum plane,GLfixed * equation)215 _mesa_GetClipPlanex(GLenum plane, GLfixed *equation)
216 {
217    unsigned int i;
218    GLdouble converted_equation[4];
219 
220    _mesa_GetClipPlane(plane, converted_equation);
221    for (i = 0; i < ARRAY_SIZE(converted_equation); i++) {
222       equation[i] = (GLfixed) (converted_equation[i] * 65536);
223    }
224 }
225 
226 void GL_APIENTRY
_mesa_GetLightxv(GLenum light,GLenum pname,GLfixed * params)227 _mesa_GetLightxv(GLenum light, GLenum pname, GLfixed *params)
228 {
229    unsigned int i;
230    unsigned int n_params = 4;
231    GLfloat converted_params[4];
232 
233    if (light < GL_LIGHT0 || light > GL_LIGHT7) {
234       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
235                   "glGetLightxv(light=0x%x)", light);
236       return;
237    }
238    switch(pname) {
239    case GL_AMBIENT:
240    case GL_DIFFUSE:
241    case GL_SPECULAR:
242    case GL_POSITION:
243       n_params = 4;
244       break;
245    case GL_SPOT_DIRECTION:
246       n_params = 3;
247       break;
248    case GL_SPOT_EXPONENT:
249    case GL_SPOT_CUTOFF:
250    case GL_CONSTANT_ATTENUATION:
251    case GL_LINEAR_ATTENUATION:
252    case GL_QUADRATIC_ATTENUATION:
253       n_params = 1;
254       break;
255    default:
256       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
257                   "glGetLightxv(pname=0x%x)", pname);
258       return;
259    }
260 
261    _mesa_GetLightfv(light, pname, converted_params);
262    for (i = 0; i < n_params; i++) {
263       params[i] = (GLint) (converted_params[i] * 65536);
264    }
265 }
266 
267 void GL_APIENTRY
_mesa_GetMaterialxv(GLenum face,GLenum pname,GLfixed * params)268 _mesa_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
269 {
270    unsigned int i;
271    unsigned int n_params = 4;
272    GLfloat converted_params[4];
273 
274    switch(face) {
275    case GL_FRONT:
276    case GL_BACK:
277       break;
278    default:
279       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
280                   "glGetMaterialxv(face=0x%x)", face);
281       return;
282    }
283    switch(pname) {
284    case GL_SHININESS:
285       n_params = 1;
286       break;
287    case GL_AMBIENT:
288    case GL_DIFFUSE:
289    case GL_SPECULAR:
290    case GL_EMISSION:
291       n_params = 4;
292       break;
293    default:
294       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
295                   "glGetMaterialxv(pname=0x%x)", pname);
296       return;
297    }
298 
299    _mesa_GetMaterialfv(face, pname, converted_params);
300    for (i = 0; i < n_params; i++) {
301       params[i] = (GLint) (converted_params[i] * 65536);
302    }
303 }
304 
305 void GL_APIENTRY
_mesa_GetTexEnvxv(GLenum target,GLenum pname,GLfixed * params)306 _mesa_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
307 {
308    unsigned int i;
309    unsigned int n_params = 4;
310    GLfloat converted_params[4];
311    bool convert_params_value = true;
312 
313    switch(target) {
314    case GL_POINT_SPRITE:
315       if (pname != GL_COORD_REPLACE) {
316          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
317                      "glGetTexEnvxv(target=0x%x)", target);
318          return;
319       }
320       break;
321    case GL_TEXTURE_FILTER_CONTROL_EXT:
322       if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
323          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
324                      "glGetTexEnvxv(target=0x%x)", target);
325          return;
326       }
327       break;
328    case GL_TEXTURE_ENV:
329       if (pname != GL_TEXTURE_ENV_COLOR &&
330           pname != GL_RGB_SCALE &&
331           pname != GL_ALPHA_SCALE &&
332           pname != GL_TEXTURE_ENV_MODE &&
333           pname != GL_COMBINE_RGB &&
334           pname != GL_COMBINE_ALPHA &&
335           pname != GL_SRC0_RGB &&
336           pname != GL_SRC1_RGB &&
337           pname != GL_SRC2_RGB &&
338           pname != GL_SRC0_ALPHA &&
339           pname != GL_SRC1_ALPHA &&
340           pname != GL_SRC2_ALPHA &&
341           pname != GL_OPERAND0_RGB &&
342           pname != GL_OPERAND1_RGB &&
343           pname != GL_OPERAND2_RGB &&
344           pname != GL_OPERAND0_ALPHA &&
345           pname != GL_OPERAND1_ALPHA &&
346           pname != GL_OPERAND2_ALPHA) {
347          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
348                      "glGetTexEnvxv(target=0x%x)", target);
349          return;
350       }
351       break;
352    default:
353       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
354                   "glGetTexEnvxv(target=0x%x)", target);
355       return;
356    }
357    switch(pname) {
358    case GL_COORD_REPLACE:
359       convert_params_value = false;
360       n_params = 1;
361       break;
362    case GL_TEXTURE_LOD_BIAS_EXT:
363       n_params = 1;
364       break;
365    case GL_TEXTURE_ENV_COLOR:
366       n_params = 4;
367       break;
368    case GL_RGB_SCALE:
369    case GL_ALPHA_SCALE:
370       n_params = 1;
371       break;
372    case GL_TEXTURE_ENV_MODE:
373    case GL_COMBINE_RGB:
374    case GL_COMBINE_ALPHA:
375    case GL_SRC0_RGB:
376    case GL_SRC1_RGB:
377    case GL_SRC2_RGB:
378    case GL_SRC0_ALPHA:
379    case GL_SRC1_ALPHA:
380    case GL_SRC2_ALPHA:
381    case GL_OPERAND0_RGB:
382    case GL_OPERAND1_RGB:
383    case GL_OPERAND2_RGB:
384    case GL_OPERAND0_ALPHA:
385    case GL_OPERAND1_ALPHA:
386    case GL_OPERAND2_ALPHA:
387       convert_params_value = false;
388       n_params = 1;
389       break;
390    default:
391       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
392                   "glGetTexEnvxv(pname=0x%x)", pname);
393       return;
394    }
395 
396    _mesa_GetTexEnvfv(target, pname, converted_params);
397    if (convert_params_value) {
398       for (i = 0; i < n_params; i++) {
399          params[i] = (GLint) (converted_params[i] * 65536);
400       }
401    } else {
402       for (i = 0; i < n_params; i++) {
403          params[i] = (GLfixed) converted_params[i];
404       }
405    }
406 }
407 
408 void GL_APIENTRY
_check_GetTexGenivOES(GLenum coord,GLenum pname,GLint * params)409 _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
410 {
411    _mesa_GetTexGeniv(coord, pname, params);
412 }
413 
414 void GL_APIENTRY
_mesa_GetTexGenxvOES(GLenum coord,GLenum pname,GLfixed * params)415 _mesa_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
416 {
417    _mesa_GetTexGeniv(coord, pname, (GLint *) params);
418 }
419 
420 void GL_APIENTRY
_mesa_GetTexParameterxv(GLenum target,GLenum pname,GLfixed * params)421 _mesa_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
422 {
423    unsigned int i;
424    unsigned int n_params = 4;
425    GLfloat converted_params[4];
426    bool convert_params_value = true;
427 
428    switch(target) {
429    case GL_TEXTURE_2D:
430    case GL_TEXTURE_CUBE_MAP:
431    case GL_TEXTURE_EXTERNAL_OES:
432       break;
433    default:
434       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
435                   "glGetTexParameterxv(target=0x%x)", target);
436       return;
437    }
438    switch(pname) {
439    case GL_TEXTURE_WRAP_S:
440    case GL_TEXTURE_WRAP_T:
441    case GL_TEXTURE_MIN_FILTER:
442    case GL_TEXTURE_MAG_FILTER:
443    case GL_GENERATE_MIPMAP:
444       convert_params_value = false;
445       n_params = 1;
446       break;
447    case GL_TEXTURE_CROP_RECT_OES:
448       n_params = 4;
449       break;
450    default:
451       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
452                   "glGetTexParameterxv(pname=0x%x)", pname);
453       return;
454    }
455 
456    _mesa_GetTexParameterfv(target, pname, converted_params);
457    if (convert_params_value) {
458       for (i = 0; i < n_params; i++) {
459          params[i] = (GLint) (converted_params[i] * 65536);
460       }
461    } else {
462       for (i = 0; i < n_params; i++) {
463          params[i] = (GLfixed) converted_params[i];
464       }
465    }
466 }
467 
468 void GL_APIENTRY
_mesa_LightModelx(GLenum pname,GLfixed param)469 _mesa_LightModelx(GLenum pname, GLfixed param)
470 {
471    _mesa_LightModelf(pname, (GLfloat) param);
472 }
473 
474 void GL_APIENTRY
_mesa_LightModelxv(GLenum pname,const GLfixed * params)475 _mesa_LightModelxv(GLenum pname, const GLfixed *params)
476 {
477    unsigned int i;
478    unsigned int n_params = 4;
479    GLfloat converted_params[4];
480    bool convert_params_value = true;
481 
482    switch(pname) {
483    case GL_LIGHT_MODEL_AMBIENT:
484       n_params = 4;
485       break;
486    case GL_LIGHT_MODEL_TWO_SIDE:
487       convert_params_value = false;
488       n_params = 1;
489       break;
490    default:
491       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
492                   "glLightModelxv(pname=0x%x)", pname);
493       return;
494    }
495 
496    if (convert_params_value) {
497       for (i = 0; i < n_params; i++) {
498          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
499       }
500    } else {
501       for (i = 0; i < n_params; i++) {
502          converted_params[i] = (GLfloat) params[i];
503       }
504    }
505 
506    _mesa_LightModelfv(pname, converted_params);
507 }
508 
509 void GL_APIENTRY
_mesa_Lightx(GLenum light,GLenum pname,GLfixed param)510 _mesa_Lightx(GLenum light, GLenum pname, GLfixed param)
511 {
512    _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
513 }
514 
515 void GL_APIENTRY
_mesa_Lightxv(GLenum light,GLenum pname,const GLfixed * params)516 _mesa_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
517 {
518    unsigned int i;
519    unsigned int n_params = 4;
520    GLfloat converted_params[4];
521 
522    if (light < GL_LIGHT0 || light > GL_LIGHT7) {
523       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
524                   "glLightxv(light=0x%x)", light);
525       return;
526    }
527    switch(pname) {
528    case GL_AMBIENT:
529    case GL_DIFFUSE:
530    case GL_SPECULAR:
531    case GL_POSITION:
532       n_params = 4;
533       break;
534    case GL_SPOT_DIRECTION:
535       n_params = 3;
536       break;
537    case GL_SPOT_EXPONENT:
538    case GL_SPOT_CUTOFF:
539    case GL_CONSTANT_ATTENUATION:
540    case GL_LINEAR_ATTENUATION:
541    case GL_QUADRATIC_ATTENUATION:
542       n_params = 1;
543       break;
544    default:
545       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
546                   "glLightxv(pname=0x%x)", pname);
547       return;
548    }
549 
550    for (i = 0; i < n_params; i++) {
551       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
552    }
553 
554    _mesa_Lightfv(light, pname, converted_params);
555 }
556 
557 void GL_APIENTRY
_mesa_LineWidthx(GLfixed width)558 _mesa_LineWidthx(GLfixed width)
559 {
560    _mesa_LineWidth((GLfloat) (width / 65536.0f));
561 }
562 
563 void GL_APIENTRY
_mesa_LoadMatrixx(const GLfixed * m)564 _mesa_LoadMatrixx(const GLfixed *m)
565 {
566    unsigned int i;
567    GLfloat converted_m[16];
568 
569    for (i = 0; i < ARRAY_SIZE(converted_m); i++) {
570       converted_m[i] = (GLfloat) (m[i] / 65536.0f);
571    }
572 
573    _mesa_LoadMatrixf(converted_m);
574 }
575 
576 void GL_APIENTRY
_mesa_Materialx(GLenum face,GLenum pname,GLfixed param)577 _mesa_Materialx(GLenum face, GLenum pname, GLfixed param)
578 {
579    if (face != GL_FRONT_AND_BACK) {
580       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
581                   "glMaterialx(face=0x%x)", face);
582       return;
583    }
584 
585    if (pname != GL_SHININESS) {
586       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
587                   "glMaterialx(pname=0x%x)", pname);
588       return;
589    }
590 
591    _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
592 }
593 
594 void GL_APIENTRY
_mesa_Materialxv(GLenum face,GLenum pname,const GLfixed * params)595 _mesa_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
596 {
597    unsigned int i;
598    unsigned int n_params = 4;
599    GLfloat converted_params[4];
600 
601    if (face != GL_FRONT_AND_BACK) {
602       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
603                   "glMaterialxv(face=0x%x)", face);
604       return;
605    }
606 
607    switch(pname) {
608    case GL_AMBIENT:
609    case GL_DIFFUSE:
610    case GL_AMBIENT_AND_DIFFUSE:
611    case GL_SPECULAR:
612    case GL_EMISSION:
613       n_params = 4;
614       break;
615    case GL_SHININESS:
616       n_params = 1;
617       break;
618    default:
619       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
620                   "glMaterialxv(pname=0x%x)", pname);
621       return;
622    }
623 
624    for (i = 0; i < n_params; i++) {
625       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
626    }
627 
628    _es_Materialfv(face, pname, converted_params);
629 }
630 
631 void GL_APIENTRY
_mesa_MultMatrixx(const GLfixed * m)632 _mesa_MultMatrixx(const GLfixed *m)
633 {
634    unsigned int i;
635    GLfloat converted_m[16];
636 
637    for (i = 0; i < ARRAY_SIZE(converted_m); i++) {
638       converted_m[i] = (GLfloat) (m[i] / 65536.0f);
639    }
640 
641    _mesa_MultMatrixf(converted_m);
642 }
643 
644 void GL_APIENTRY
_mesa_MultiTexCoord4x(GLenum texture,GLfixed s,GLfixed t,GLfixed r,GLfixed q)645 _mesa_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
646 {
647    _es_MultiTexCoord4f(texture,
648                        (GLfloat) (s / 65536.0f),
649                        (GLfloat) (t / 65536.0f),
650                        (GLfloat) (r / 65536.0f),
651                        (GLfloat) (q / 65536.0f));
652 }
653 
654 void GL_APIENTRY
_mesa_Normal3x(GLfixed nx,GLfixed ny,GLfixed nz)655 _mesa_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
656 {
657    _es_Normal3f((GLfloat) (nx / 65536.0f),
658                 (GLfloat) (ny / 65536.0f),
659                 (GLfloat) (nz / 65536.0f));
660 }
661 
662 void GL_APIENTRY
_mesa_Orthof(GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)663 _mesa_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
664            GLfloat zNear, GLfloat zFar)
665 {
666    _mesa_Ortho((GLdouble) (left),
667                (GLdouble) (right),
668                (GLdouble) (bottom),
669                (GLdouble) (top),
670                (GLdouble) (zNear),
671                (GLdouble) (zFar));
672 }
673 
674 void GL_APIENTRY
_mesa_Orthox(GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)675 _mesa_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
676            GLfixed zNear, GLfixed zFar)
677 {
678    _mesa_Ortho((GLdouble) (left / 65536.0),
679                (GLdouble) (right / 65536.0),
680                (GLdouble) (bottom / 65536.0),
681                (GLdouble) (top / 65536.0),
682                (GLdouble) (zNear / 65536.0),
683                (GLdouble) (zFar / 65536.0));
684 }
685 
686 void GL_APIENTRY
_mesa_PointParameterx(GLenum pname,GLfixed param)687 _mesa_PointParameterx(GLenum pname, GLfixed param)
688 {
689    _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
690 }
691 
692 void GL_APIENTRY
_mesa_PointParameterxv(GLenum pname,const GLfixed * params)693 _mesa_PointParameterxv(GLenum pname, const GLfixed *params)
694 {
695    unsigned int i;
696    unsigned int n_params = 3;
697    GLfloat converted_params[3];
698 
699    switch(pname) {
700    case GL_POINT_SIZE_MIN:
701    case GL_POINT_SIZE_MAX:
702    case GL_POINT_FADE_THRESHOLD_SIZE:
703       n_params = 1;
704       break;
705    case GL_POINT_DISTANCE_ATTENUATION:
706       n_params = 3;
707       break;
708    default:
709       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
710                   "glPointParameterxv(pname=0x%x)", pname);
711       return;
712    }
713 
714    for (i = 0; i < n_params; i++) {
715       converted_params[i] = (GLfloat) (params[i] / 65536.0f);
716    }
717 
718    _mesa_PointParameterfv(pname, converted_params);
719 }
720 
721 void GL_APIENTRY
_mesa_PointSizex(GLfixed size)722 _mesa_PointSizex(GLfixed size)
723 {
724    _mesa_PointSize((GLfloat) (size / 65536.0f));
725 }
726 
727 void GL_APIENTRY
_mesa_PolygonOffsetx(GLfixed factor,GLfixed units)728 _mesa_PolygonOffsetx(GLfixed factor, GLfixed units)
729 {
730    _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
731                        (GLfloat) (units / 65536.0f));
732 }
733 
734 void GL_APIENTRY
_mesa_Rotatex(GLfixed angle,GLfixed x,GLfixed y,GLfixed z)735 _mesa_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
736 {
737    _mesa_Rotatef((GLfloat) (angle / 65536.0f),
738                  (GLfloat) (x / 65536.0f),
739                  (GLfloat) (y / 65536.0f),
740                  (GLfloat) (z / 65536.0f));
741 }
742 
743 void GL_APIENTRY
_mesa_SampleCoveragex(GLclampx value,GLboolean invert)744 _mesa_SampleCoveragex(GLclampx value, GLboolean invert)
745 {
746    _mesa_SampleCoverage((GLclampf) (value / 65536.0f),
747                            invert);
748 }
749 
750 void GL_APIENTRY
_mesa_Scalex(GLfixed x,GLfixed y,GLfixed z)751 _mesa_Scalex(GLfixed x, GLfixed y, GLfixed z)
752 {
753    _mesa_Scalef((GLfloat) (x / 65536.0f),
754                 (GLfloat) (y / 65536.0f),
755                 (GLfloat) (z / 65536.0f));
756 }
757 
758 void GL_APIENTRY
_mesa_TexEnvx(GLenum target,GLenum pname,GLfixed param)759 _mesa_TexEnvx(GLenum target, GLenum pname, GLfixed param)
760 {
761    switch(target) {
762    case GL_POINT_SPRITE:
763    case GL_TEXTURE_FILTER_CONTROL_EXT:
764    case GL_TEXTURE_ENV:
765       break;
766    default:
767       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
768                   "glTexEnvx(target=0x%x)", target);
769       return;
770    }
771 
772    switch(pname) {
773    case GL_COORD_REPLACE:
774    case GL_TEXTURE_ENV_MODE:
775    case GL_COMBINE_RGB:
776    case GL_COMBINE_ALPHA:
777    case GL_SRC0_RGB:
778    case GL_SRC1_RGB:
779    case GL_SRC2_RGB:
780    case GL_SRC0_ALPHA:
781    case GL_SRC1_ALPHA:
782    case GL_SRC2_ALPHA:
783    case GL_OPERAND0_RGB:
784    case GL_OPERAND1_RGB:
785    case GL_OPERAND2_RGB:
786    case GL_OPERAND0_ALPHA:
787    case GL_OPERAND1_ALPHA:
788    case GL_OPERAND2_ALPHA:
789       _mesa_TexEnvf(target, pname, (GLfloat) param);
790       break;
791    case GL_TEXTURE_LOD_BIAS_EXT:
792    case GL_RGB_SCALE:
793    case GL_ALPHA_SCALE:
794       _mesa_TexEnvf(target, pname, (GLfloat) (param / 65536.0f));
795       break;
796    default:
797       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
798                   "glTexEnvx(pname=0x%x)", pname);
799       return;
800    }
801 }
802 
803 void GL_APIENTRY
_mesa_TexEnvxv(GLenum target,GLenum pname,const GLfixed * params)804 _mesa_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
805 {
806    switch(target) {
807    case GL_POINT_SPRITE:
808    case GL_TEXTURE_FILTER_CONTROL_EXT:
809    case GL_TEXTURE_ENV:
810       break;
811    default:
812       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
813                   "glTexEnvxv(target=0x%x)", target);
814       return;
815    }
816 
817    switch(pname) {
818    case GL_COORD_REPLACE:
819    case GL_TEXTURE_ENV_MODE:
820    case GL_COMBINE_RGB:
821    case GL_COMBINE_ALPHA:
822    case GL_SRC0_RGB:
823    case GL_SRC1_RGB:
824    case GL_SRC2_RGB:
825    case GL_SRC0_ALPHA:
826    case GL_SRC1_ALPHA:
827    case GL_SRC2_ALPHA:
828    case GL_OPERAND0_RGB:
829    case GL_OPERAND1_RGB:
830    case GL_OPERAND2_RGB:
831    case GL_OPERAND0_ALPHA:
832    case GL_OPERAND1_ALPHA:
833    case GL_OPERAND2_ALPHA:
834       _mesa_TexEnvf(target, pname, (GLfloat) params[0]);
835       break;
836    case GL_TEXTURE_LOD_BIAS_EXT:
837    case GL_RGB_SCALE:
838    case GL_ALPHA_SCALE:
839       _mesa_TexEnvf(target, pname, (GLfloat) (params[0] / 65536.0f));
840       break;
841    case GL_TEXTURE_ENV_COLOR: {
842       unsigned int i;
843       GLfloat converted_params[4];
844 
845       for (i = 0; i < ARRAY_SIZE(converted_params); i++) {
846          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
847       }
848 
849       _mesa_TexEnvfv(target, pname, converted_params);
850       break;
851    }
852    default:
853       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
854                   "glTexEnvxv(pname=0x%x)", pname);
855       return;
856    }
857 }
858 
859 void GL_APIENTRY
_check_TexGeniOES(GLenum coord,GLenum pname,GLint param)860 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
861 {
862    _es_TexGenf(coord, pname, (GLfloat) param);
863 }
864 
865 void GL_APIENTRY
_check_TexGenivOES(GLenum coord,GLenum pname,const GLint * params)866 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
867 {
868    _es_TexGenf(coord, pname, (GLfloat) params[0]);
869 }
870 
871 void GL_APIENTRY
_mesa_TexGenxOES(GLenum coord,GLenum pname,GLfixed param)872 _mesa_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
873 {
874    _es_TexGenf(coord, pname, (GLfloat) param);
875 }
876 
877 void GL_APIENTRY
_mesa_TexGenxvOES(GLenum coord,GLenum pname,const GLfixed * params)878 _mesa_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
879 {
880    _es_TexGenf(coord, pname, (GLfloat) params[0]);
881 }
882 
883 void GL_APIENTRY
_mesa_TexParameterx(GLenum target,GLenum pname,GLfixed param)884 _mesa_TexParameterx(GLenum target, GLenum pname, GLfixed param)
885 {
886    if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
887       _mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
888    } else {
889       _mesa_TexParameterf(target, pname, (GLfloat) param);
890    }
891 }
892 
893 void GL_APIENTRY
_mesa_TexParameterxv(GLenum target,GLenum pname,const GLfixed * params)894 _mesa_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
895 {
896    unsigned int i;
897    unsigned int n_params = 4;
898    GLfloat converted_params[4];
899    bool convert_params_value = true;
900 
901    switch(target) {
902    case GL_TEXTURE_2D:
903    case GL_TEXTURE_CUBE_MAP:
904    case GL_TEXTURE_EXTERNAL_OES:
905       break;
906    default:
907       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
908                   "glTexParameterxv(target=0x%x)", target);
909       return;
910    }
911    switch(pname) {
912    case GL_TEXTURE_WRAP_S:
913    case GL_TEXTURE_WRAP_T:
914       convert_params_value = false;
915       n_params = 1;
916       break;
917    case GL_TEXTURE_MIN_FILTER:
918    case GL_TEXTURE_MAG_FILTER:
919    case GL_GENERATE_MIPMAP:
920       convert_params_value = false;
921       n_params = 1;
922       break;
923    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
924       n_params = 1;
925       break;
926    case GL_TEXTURE_CROP_RECT_OES:
927       n_params = 4;
928       break;
929    default:
930       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
931                   "glTexParameterxv(pname=0x%x)", pname);
932       return;
933    }
934 
935    if (convert_params_value) {
936       for (i = 0; i < n_params; i++) {
937          converted_params[i] = (GLfloat) (params[i] / 65536.0f);
938       }
939    } else {
940       for (i = 0; i < n_params; i++) {
941          converted_params[i] = (GLfloat) params[i];
942       }
943    }
944 
945    _mesa_TexParameterfv(target, pname, converted_params);
946 }
947 
948 void GL_APIENTRY
_mesa_Translatex(GLfixed x,GLfixed y,GLfixed z)949 _mesa_Translatex(GLfixed x, GLfixed y, GLfixed z)
950 {
951     _mesa_Translatef((GLfloat) (x / 65536.0f),
952                      (GLfloat) (y / 65536.0f),
953                      (GLfloat) (z / 65536.0f));
954 }
955