mesa/es: Validate glTexEnv parameters in Mesa code rather than the ES wrapper
[mesa.git] / src / mesa / main / es1_conversion.c
1 #include <stdbool.h>
2 #include "main/mfeatures.h"
3
4 #if FEATURE_ES1
5
6 #include "api_loopback.h"
7 #include "api_exec.h"
8 #include "blend.h"
9 #include "clear.h"
10 #include "clip.h"
11 #include "context.h"
12 #include "depth.h"
13 #include "fog.h"
14 #include "imports.h"
15 #include "light.h"
16 #include "lines.h"
17 #include "matrix.h"
18 #include "multisample.h"
19 #include "pixelstore.h"
20 #include "points.h"
21 #include "polygon.h"
22 #include "readpix.h"
23 #include "texenv.h"
24 #include "texgen.h"
25 #include "texobj.h"
26 #include "texparam.h"
27 #include "mtypes.h"
28 #include "viewport.h"
29 #include "main/drawtex.h"
30 #include "vbo/vbo.h"
31
32 #ifndef GL_APIENTRY
33 #define GL_APIENTRY GLAPIENTRY
34 #endif
35
36 #include "main/es1_conversion.h"
37
38 void GL_APIENTRY
39 _es_AlphaFuncx(GLenum func, GLclampx ref)
40 {
41 _mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f));
42 }
43
44 void GL_APIENTRY
45 _es_ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
46 {
47 _mesa_ClearColor((GLclampf) (red / 65536.0f),
48 (GLclampf) (green / 65536.0f),
49 (GLclampf) (blue / 65536.0f),
50 (GLclampf) (alpha / 65536.0f));
51 }
52
53 void GL_APIENTRY
54 _es_ClearDepthx(GLclampx depth)
55 {
56 _mesa_ClearDepthf((GLclampf) (depth / 65536.0f));
57 }
58
59 void GL_APIENTRY
60 _es_ClipPlanef(GLenum plane, const GLfloat *equation)
61 {
62 unsigned int i;
63 GLdouble converted_equation[4];
64
65 for (i = 0; i < Elements(converted_equation); i++) {
66 converted_equation[i] = (GLdouble) (equation[i]);
67 }
68
69 _mesa_ClipPlane(plane, converted_equation);
70 }
71
72 void GL_APIENTRY
73 _es_ClipPlanex(GLenum plane, const GLfixed *equation)
74 {
75 unsigned int i;
76 GLdouble converted_equation[4];
77
78 for (i = 0; i < Elements(converted_equation); i++) {
79 converted_equation[i] = (GLdouble) (equation[i] / 65536.0);
80 }
81
82 _mesa_ClipPlane(plane, converted_equation);
83 }
84
85 void GL_APIENTRY
86 _es_Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
87 {
88 _es_Color4f((GLfloat) (red / 255.0f),
89 (GLfloat) (green / 255.0f),
90 (GLfloat) (blue / 255.0f),
91 (GLfloat) (alpha / 255.0f));
92 }
93
94 void GL_APIENTRY
95 _es_Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
96 {
97 _es_Color4f((GLfloat) (red / 65536.0f),
98 (GLfloat) (green / 65536.0f),
99 (GLfloat) (blue / 65536.0f),
100 (GLfloat) (alpha / 65536.0f));
101 }
102
103 void GL_APIENTRY
104 _es_DepthRangex(GLclampx zNear, GLclampx zFar)
105 {
106 _mesa_DepthRangef((GLclampf) (zNear / 65536.0f),
107 (GLclampf) (zFar / 65536.0f));
108 }
109
110 void GL_APIENTRY
111 _es_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h)
112 {
113
114 _mesa_DrawTexf((GLfloat) (x / 65536.0f),
115 (GLfloat) (y / 65536.0f),
116 (GLfloat) (z / 65536.0f),
117 (GLfloat) (w / 65536.0f),
118 (GLfloat) (h / 65536.0f));
119 }
120
121 void GL_APIENTRY
122 _es_DrawTexxvOES(const GLfixed *coords)
123 {
124 unsigned int i;
125 GLfloat converted_coords[5];
126
127 for (i = 0; i < Elements(converted_coords); i++) {
128 converted_coords[i] = (GLfloat) (coords[i] / 65536.0f);
129 }
130
131 _mesa_DrawTexfv(converted_coords);
132 }
133
134 void GL_APIENTRY
135 _es_Fogx(GLenum pname, GLfixed param)
136 {
137 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
145 void 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
185 void 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
197 void 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
209 void 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
221 void 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
233 void 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
274 void 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_SPECULAR:
297 case GL_EMISSION:
298 n_params = 4;
299 break;
300 default:
301 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
302 "glGetMaterialxv(pname=0x%x)", pname);
303 return;
304 }
305
306 _mesa_GetMaterialfv(face, pname, converted_params);
307 for (i = 0; i < n_params; i++) {
308 params[i] = (GLint) (converted_params[i] * 65536);
309 }
310 }
311
312 void GL_APIENTRY
313 _es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
314 {
315 unsigned int i;
316 unsigned int n_params = 4;
317 GLfloat converted_params[4];
318 bool convert_params_value = true;
319
320 switch(target) {
321 case GL_POINT_SPRITE:
322 if (pname != GL_COORD_REPLACE) {
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_FILTER_CONTROL_EXT:
329 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
330 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
331 "glGetTexEnvxv(target=0x%x)", target);
332 return;
333 }
334 break;
335 case GL_TEXTURE_ENV:
336 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) {
337 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
338 "glGetTexEnvxv(target=0x%x)", target);
339 return;
340 }
341 break;
342 default:
343 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
344 "glGetTexEnvxv(target=0x%x)", target);
345 return;
346 }
347 switch(pname) {
348 case GL_COORD_REPLACE:
349 convert_params_value = false;
350 n_params = 1;
351 break;
352 case GL_TEXTURE_LOD_BIAS_EXT:
353 n_params = 1;
354 break;
355 case GL_TEXTURE_ENV_COLOR:
356 n_params = 4;
357 break;
358 case GL_RGB_SCALE:
359 case GL_ALPHA_SCALE:
360 n_params = 1;
361 break;
362 case GL_TEXTURE_ENV_MODE:
363 case GL_COMBINE_RGB:
364 case GL_COMBINE_ALPHA:
365 case GL_SRC0_RGB:
366 case GL_SRC1_RGB:
367 case GL_SRC2_RGB:
368 case GL_SRC0_ALPHA:
369 case GL_SRC1_ALPHA:
370 case GL_SRC2_ALPHA:
371 case GL_OPERAND0_RGB:
372 case GL_OPERAND1_RGB:
373 case GL_OPERAND2_RGB:
374 case GL_OPERAND0_ALPHA:
375 case GL_OPERAND1_ALPHA:
376 case GL_OPERAND2_ALPHA:
377 convert_params_value = false;
378 n_params = 1;
379 break;
380 default:
381 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
382 "glGetTexEnvxv(pname=0x%x)", pname);
383 return;
384 }
385
386 _mesa_GetTexEnvfv(target, pname, converted_params);
387 if (convert_params_value) {
388 for (i = 0; i < n_params; i++) {
389 params[i] = (GLint) (converted_params[i] * 65536);
390 }
391 } else {
392 for (i = 0; i < n_params; i++) {
393 params[i] = (GLfixed) converted_params[i];
394 }
395 }
396 }
397
398 void GL_APIENTRY
399 _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
400 {
401 _mesa_GetTexGeniv(coord, pname, params);
402 }
403
404 void GL_APIENTRY
405 _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
406 {
407 _mesa_GetTexGeniv(coord, pname, (GLint *) params);
408 }
409
410 void GL_APIENTRY
411 _es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
412 {
413 unsigned int i;
414 unsigned int n_params = 4;
415 GLfloat converted_params[4];
416 bool convert_params_value = true;
417
418 switch(target) {
419 case GL_TEXTURE_2D:
420 case GL_TEXTURE_CUBE_MAP:
421 case GL_TEXTURE_EXTERNAL_OES:
422 break;
423 default:
424 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
425 "glGetTexParameterxv(target=0x%x)", target);
426 return;
427 }
428 switch(pname) {
429 case GL_TEXTURE_WRAP_S:
430 case GL_TEXTURE_WRAP_T:
431 case GL_TEXTURE_MIN_FILTER:
432 case GL_TEXTURE_MAG_FILTER:
433 case GL_GENERATE_MIPMAP:
434 convert_params_value = false;
435 n_params = 1;
436 break;
437 case GL_TEXTURE_CROP_RECT_OES:
438 n_params = 4;
439 break;
440 default:
441 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
442 "glGetTexParameterxv(pname=0x%x)", pname);
443 return;
444 }
445
446 _mesa_GetTexParameterfv(target, pname, converted_params);
447 if (convert_params_value) {
448 for (i = 0; i < n_params; i++) {
449 params[i] = (GLint) (converted_params[i] * 65536);
450 }
451 } else {
452 for (i = 0; i < n_params; i++) {
453 params[i] = (GLfixed) converted_params[i];
454 }
455 }
456 }
457
458 void GL_APIENTRY
459 _es_LightModelx(GLenum pname, GLfixed param)
460 {
461 _mesa_LightModelf(pname, (GLfloat) param);
462 }
463
464 void GL_APIENTRY
465 _es_LightModelxv(GLenum pname, const GLfixed *params)
466 {
467 unsigned int i;
468 unsigned int n_params = 4;
469 GLfloat converted_params[4];
470 bool convert_params_value = true;
471
472 switch(pname) {
473 case GL_LIGHT_MODEL_AMBIENT:
474 n_params = 4;
475 break;
476 case GL_LIGHT_MODEL_TWO_SIDE:
477 convert_params_value = false;
478 n_params = 1;
479 break;
480 default:
481 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
482 "glLightModelxv(pname=0x%x)", pname);
483 return;
484 }
485
486 if (convert_params_value) {
487 for (i = 0; i < n_params; i++) {
488 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
489 }
490 } else {
491 for (i = 0; i < n_params; i++) {
492 converted_params[i] = (GLfloat) params[i];
493 }
494 }
495
496 _mesa_LightModelfv(pname, converted_params);
497 }
498
499 void GL_APIENTRY
500 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
501 {
502 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
503 }
504
505 void GL_APIENTRY
506 _es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
507 {
508 unsigned int i;
509 unsigned int n_params = 4;
510 GLfloat converted_params[4];
511
512 if (light < GL_LIGHT0 || light > GL_LIGHT7) {
513 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
514 "glLightxv(light=0x%x)", light);
515 return;
516 }
517 switch(pname) {
518 case GL_AMBIENT:
519 case GL_DIFFUSE:
520 case GL_SPECULAR:
521 case GL_POSITION:
522 n_params = 4;
523 break;
524 case GL_SPOT_DIRECTION:
525 n_params = 3;
526 break;
527 case GL_SPOT_EXPONENT:
528 case GL_SPOT_CUTOFF:
529 case GL_CONSTANT_ATTENUATION:
530 case GL_LINEAR_ATTENUATION:
531 case GL_QUADRATIC_ATTENUATION:
532 n_params = 1;
533 break;
534 default:
535 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
536 "glLightxv(pname=0x%x)", pname);
537 return;
538 }
539
540 for (i = 0; i < n_params; i++) {
541 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
542 }
543
544 _mesa_Lightfv(light, pname, converted_params);
545 }
546
547 void GL_APIENTRY
548 _es_LineWidthx(GLfixed width)
549 {
550 _mesa_LineWidth((GLfloat) (width / 65536.0f));
551 }
552
553 void GL_APIENTRY
554 _es_LoadMatrixx(const GLfixed *m)
555 {
556 unsigned int i;
557 GLfloat converted_m[16];
558
559 for (i = 0; i < Elements(converted_m); i++) {
560 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
561 }
562
563 _mesa_LoadMatrixf(converted_m);
564 }
565
566 void GL_APIENTRY
567 _es_Materialx(GLenum face, GLenum pname, GLfixed param)
568 {
569 if (face != GL_FRONT_AND_BACK) {
570 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
571 "glMaterialx(face=0x%x)", face);
572 return;
573 }
574
575 if (pname != GL_SHININESS) {
576 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
577 "glMaterialx(pname=0x%x)", pname);
578 return;
579 }
580
581 _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
582 }
583
584 void GL_APIENTRY
585 _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
586 {
587 unsigned int i;
588 unsigned int n_params = 4;
589 GLfloat converted_params[4];
590
591 if (face != GL_FRONT_AND_BACK) {
592 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
593 "glMaterialxv(face=0x%x)", face);
594 return;
595 }
596
597 switch(pname) {
598 case GL_AMBIENT:
599 case GL_DIFFUSE:
600 case GL_AMBIENT_AND_DIFFUSE:
601 case GL_SPECULAR:
602 case GL_EMISSION:
603 n_params = 4;
604 break;
605 case GL_SHININESS:
606 n_params = 1;
607 break;
608 default:
609 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
610 "glMaterialxv(pname=0x%x)", pname);
611 return;
612 }
613
614 for (i = 0; i < n_params; i++) {
615 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
616 }
617
618 _es_Materialfv(face, pname, converted_params);
619 }
620
621 void GL_APIENTRY
622 _es_MultMatrixx(const GLfixed *m)
623 {
624 unsigned int i;
625 GLfloat converted_m[16];
626
627 for (i = 0; i < Elements(converted_m); i++) {
628 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
629 }
630
631 _mesa_MultMatrixf(converted_m);
632 }
633
634 void GL_APIENTRY
635 _es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
636 {
637 _es_MultiTexCoord4f(texture,
638 (GLfloat) (s / 65536.0f),
639 (GLfloat) (t / 65536.0f),
640 (GLfloat) (r / 65536.0f),
641 (GLfloat) (q / 65536.0f));
642 }
643
644 void GL_APIENTRY
645 _es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
646 {
647 _es_Normal3f((GLfloat) (nx / 65536.0f),
648 (GLfloat) (ny / 65536.0f),
649 (GLfloat) (nz / 65536.0f));
650 }
651
652 void GL_APIENTRY
653 _es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
654 GLfloat zNear, GLfloat zFar)
655 {
656 _mesa_Ortho((GLdouble) (left),
657 (GLdouble) (right),
658 (GLdouble) (bottom),
659 (GLdouble) (top),
660 (GLdouble) (zNear),
661 (GLdouble) (zFar));
662 }
663
664 void GL_APIENTRY
665 _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
666 GLfixed zNear, GLfixed zFar)
667 {
668 _mesa_Ortho((GLdouble) (left / 65536.0),
669 (GLdouble) (right / 65536.0),
670 (GLdouble) (bottom / 65536.0),
671 (GLdouble) (top / 65536.0),
672 (GLdouble) (zNear / 65536.0),
673 (GLdouble) (zFar / 65536.0));
674 }
675
676 void GL_APIENTRY
677 _es_PointParameterx(GLenum pname, GLfixed param)
678 {
679 switch(pname) {
680 case GL_POINT_SIZE_MIN:
681 case GL_POINT_SIZE_MAX:
682 case GL_POINT_FADE_THRESHOLD_SIZE:
683 break;
684 default:
685 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
686 "glPointParameterx(pname=0x%x)", pname);
687 return;
688 }
689
690 _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
691 }
692
693 void GL_APIENTRY
694 _es_PointParameterxv(GLenum pname, const GLfixed *params)
695 {
696 unsigned int i;
697 unsigned int n_params = 3;
698 GLfloat converted_params[3];
699
700 switch(pname) {
701 case GL_POINT_SIZE_MIN:
702 case GL_POINT_SIZE_MAX:
703 case GL_POINT_FADE_THRESHOLD_SIZE:
704 n_params = 1;
705 break;
706 case GL_POINT_DISTANCE_ATTENUATION:
707 n_params = 3;
708 break;
709 default:
710 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
711 "glPointParameterxv(pname=0x%x)", pname);
712 return;
713 }
714
715 for (i = 0; i < n_params; i++) {
716 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
717 }
718
719 _mesa_PointParameterfv(pname, converted_params);
720 }
721
722 void GL_APIENTRY
723 _es_PointSizex(GLfixed size)
724 {
725 _mesa_PointSize((GLfloat) (size / 65536.0f));
726 }
727
728 void GL_APIENTRY
729 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
730 {
731 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
732 (GLfloat) (units / 65536.0f));
733 }
734
735 void GL_APIENTRY
736 _es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
737 {
738 _mesa_Rotatef((GLfloat) (angle / 65536.0f),
739 (GLfloat) (x / 65536.0f),
740 (GLfloat) (y / 65536.0f),
741 (GLfloat) (z / 65536.0f));
742 }
743
744 void GL_APIENTRY
745 _es_SampleCoveragex(GLclampx value, GLboolean invert)
746 {
747 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
748 invert);
749 }
750
751 void GL_APIENTRY
752 _es_Scalex(GLfixed x, GLfixed y, GLfixed z)
753 {
754 _mesa_Scalef((GLfloat) (x / 65536.0f),
755 (GLfloat) (y / 65536.0f),
756 (GLfloat) (z / 65536.0f));
757 }
758
759 void GL_APIENTRY
760 _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
761 {
762 switch(target) {
763 case GL_POINT_SPRITE:
764 case GL_TEXTURE_FILTER_CONTROL_EXT:
765 case GL_TEXTURE_ENV:
766 break;
767 default:
768 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
769 "glTexEnvx(target=0x%x)", target);
770 return;
771 }
772
773 switch(pname) {
774 case GL_COORD_REPLACE:
775 case GL_TEXTURE_ENV_MODE:
776 case GL_COMBINE_RGB:
777 case GL_COMBINE_ALPHA:
778 case GL_SRC0_RGB:
779 case GL_SRC1_RGB:
780 case GL_SRC2_RGB:
781 case GL_SRC0_ALPHA:
782 case GL_SRC1_ALPHA:
783 case GL_SRC2_ALPHA:
784 case GL_OPERAND0_RGB:
785 case GL_OPERAND1_RGB:
786 case GL_OPERAND2_RGB:
787 case GL_OPERAND0_ALPHA:
788 case GL_OPERAND1_ALPHA:
789 case GL_OPERAND2_ALPHA:
790 _mesa_TexEnvf(target, pname, (GLfloat) param);
791 break;
792 case GL_TEXTURE_LOD_BIAS_EXT:
793 case GL_RGB_SCALE:
794 case GL_ALPHA_SCALE:
795 _mesa_TexEnvf(target, pname, (GLfloat) (param / 65536.0f));
796 break;
797 default:
798 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
799 "glTexEnvx(pname=0x%x)", pname);
800 return;
801 }
802 }
803
804 void GL_APIENTRY
805 _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
806 {
807 switch(target) {
808 case GL_POINT_SPRITE:
809 case GL_TEXTURE_FILTER_CONTROL_EXT:
810 case GL_TEXTURE_ENV:
811 break;
812 default:
813 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
814 "glTexEnvxv(target=0x%x)", target);
815 return;
816 }
817
818 switch(pname) {
819 case GL_COORD_REPLACE:
820 case GL_TEXTURE_ENV_MODE:
821 case GL_COMBINE_RGB:
822 case GL_COMBINE_ALPHA:
823 case GL_SRC0_RGB:
824 case GL_SRC1_RGB:
825 case GL_SRC2_RGB:
826 case GL_SRC0_ALPHA:
827 case GL_SRC1_ALPHA:
828 case GL_SRC2_ALPHA:
829 case GL_OPERAND0_RGB:
830 case GL_OPERAND1_RGB:
831 case GL_OPERAND2_RGB:
832 case GL_OPERAND0_ALPHA:
833 case GL_OPERAND1_ALPHA:
834 case GL_OPERAND2_ALPHA:
835 _mesa_TexEnvf(target, pname, (GLfloat) params[0]);
836 break;
837 case GL_TEXTURE_LOD_BIAS_EXT:
838 case GL_RGB_SCALE:
839 case GL_ALPHA_SCALE:
840 _mesa_TexEnvf(target, pname, (GLfloat) (params[0] / 65536.0f));
841 break;
842 case GL_TEXTURE_ENV_COLOR: {
843 unsigned int i;
844 GLfloat converted_params[4];
845
846 for (i = 0; i < Elements(converted_params); i++) {
847 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
848 }
849
850 _mesa_TexEnvfv(target, pname, converted_params);
851 break;
852 }
853 default:
854 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
855 "glTexEnvxv(pname=0x%x)", pname);
856 return;
857 }
858 }
859
860 void GL_APIENTRY
861 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
862 {
863 _es_TexGenf(coord, pname, (GLfloat) param);
864 }
865
866 void GL_APIENTRY
867 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
868 {
869 _es_TexGenf(coord, pname, (GLfloat) params[0]);
870 }
871
872 void GL_APIENTRY
873 _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
874 {
875 _es_TexGenf(coord, pname, (GLfloat) param);
876 }
877
878 void GL_APIENTRY
879 _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
880 {
881 _es_TexGenf(coord, pname, (GLfloat) params[0]);
882 }
883
884 void GL_APIENTRY
885 _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
886 {
887 if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
888 _mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
889 } else {
890 _mesa_TexParameterf(target, pname, (GLfloat) param);
891 }
892 }
893
894 void GL_APIENTRY
895 _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
896 {
897 unsigned int i;
898 unsigned int n_params = 4;
899 GLfloat converted_params[4];
900 bool convert_params_value = true;
901
902 switch(target) {
903 case GL_TEXTURE_2D:
904 case GL_TEXTURE_CUBE_MAP:
905 case GL_TEXTURE_EXTERNAL_OES:
906 break;
907 default:
908 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
909 "glTexParameterxv(target=0x%x)", target);
910 return;
911 }
912 switch(pname) {
913 case GL_TEXTURE_WRAP_S:
914 case GL_TEXTURE_WRAP_T:
915 convert_params_value = false;
916 n_params = 1;
917 break;
918 case GL_TEXTURE_MIN_FILTER:
919 case GL_TEXTURE_MAG_FILTER:
920 case GL_GENERATE_MIPMAP:
921 convert_params_value = false;
922 n_params = 1;
923 break;
924 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
925 n_params = 1;
926 break;
927 case GL_TEXTURE_CROP_RECT_OES:
928 n_params = 4;
929 break;
930 default:
931 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
932 "glTexParameterxv(pname=0x%x)", pname);
933 return;
934 }
935
936 if (convert_params_value) {
937 for (i = 0; i < n_params; i++) {
938 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
939 }
940 } else {
941 for (i = 0; i < n_params; i++) {
942 converted_params[i] = (GLfloat) params[i];
943 }
944 }
945
946 _mesa_TexParameterfv(target, pname, converted_params);
947 }
948
949 void GL_APIENTRY
950 _es_Translatex(GLfixed x, GLfixed y, GLfixed z)
951 {
952 _mesa_Translatef((GLfloat) (x / 65536.0f),
953 (GLfloat) (y / 65536.0f),
954 (GLfloat) (z / 65536.0f));
955 }
956
957 #endif /* FEATURE_ES1 */