mesa/es: Validate glFog pname 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_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
313 void 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
399 void 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
430 void 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
461 void 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
509 void 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
529 void 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
569 void GL_APIENTRY
570 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
571 {
572 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
573 }
574
575 void 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
617 void GL_APIENTRY
618 _es_LineWidthx(GLfixed width)
619 {
620 _mesa_LineWidth((GLfloat) (width / 65536.0f));
621 }
622
623 void 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
636 void 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
659 void 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
698 void 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
711 void 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
721 void 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
729 void 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
741 void 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
753 void 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
770 void 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
799 void GL_APIENTRY
800 _es_PointSizex(GLfixed size)
801 {
802 _mesa_PointSize((GLfloat) (size / 65536.0f));
803 }
804
805 void GL_APIENTRY
806 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
807 {
808 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
809 (GLfloat) (units / 65536.0f));
810 }
811
812 void 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
821 void GL_APIENTRY
822 _es_SampleCoveragex(GLclampx value, GLboolean invert)
823 {
824 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
825 invert);
826 }
827
828 void 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
836 void 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
950 void 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
1081 void 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
1109 void 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
1146 void 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
1174 void 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
1211 void 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
1221 void 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
1276 void 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 */