mesa/es: Validate glMaterial face and 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_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 unsigned int i;
402 unsigned int n_params = 1;
403 GLfloat converted_params[1];
404
405 switch(coord) {
406 case GL_TEXTURE_GEN_STR_OES:
407 break;
408 default:
409 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
410 "glGetTexGenivOES(coord=0x%x)", coord);
411 return;
412 }
413 switch(pname) {
414 case GL_TEXTURE_GEN_MODE:
415 n_params = 1;
416 break;
417 default:
418 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
419 "glGetTexGenivOES(pname=0x%x)", pname);
420 return;
421 }
422
423 _es_GetTexGenfv(coord, pname, converted_params);
424 for (i = 0; i < n_params; i++) {
425 params[i] = (GLfloat) converted_params[i];
426 }
427 }
428
429 void GL_APIENTRY
430 _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
431 {
432 unsigned int i;
433 unsigned int n_params = 1;
434 GLfloat converted_params[1];
435
436 switch(coord) {
437 case GL_TEXTURE_GEN_STR_OES:
438 break;
439 default:
440 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
441 "glGetTexGenxvOES(coord=0x%x)", coord);
442 return;
443 }
444 switch(pname) {
445 case GL_TEXTURE_GEN_MODE:
446 n_params = 1;
447 break;
448 default:
449 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
450 "glGetTexGenxvOES(pname=0x%x)", pname);
451 return;
452 }
453
454 _es_GetTexGenfv(coord, pname, converted_params);
455 for (i = 0; i < n_params; i++) {
456 params[i] = (GLfloat) converted_params[i];
457 }
458 }
459
460 void GL_APIENTRY
461 _es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
462 {
463 unsigned int i;
464 unsigned int n_params = 4;
465 GLfloat converted_params[4];
466 bool convert_params_value = true;
467
468 switch(target) {
469 case GL_TEXTURE_2D:
470 case GL_TEXTURE_CUBE_MAP:
471 case GL_TEXTURE_EXTERNAL_OES:
472 break;
473 default:
474 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
475 "glGetTexParameterxv(target=0x%x)", target);
476 return;
477 }
478 switch(pname) {
479 case GL_TEXTURE_WRAP_S:
480 case GL_TEXTURE_WRAP_T:
481 case GL_TEXTURE_MIN_FILTER:
482 case GL_TEXTURE_MAG_FILTER:
483 case GL_GENERATE_MIPMAP:
484 convert_params_value = false;
485 n_params = 1;
486 break;
487 case GL_TEXTURE_CROP_RECT_OES:
488 n_params = 4;
489 break;
490 default:
491 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
492 "glGetTexParameterxv(pname=0x%x)", pname);
493 return;
494 }
495
496 _mesa_GetTexParameterfv(target, pname, converted_params);
497 if (convert_params_value) {
498 for (i = 0; i < n_params; i++) {
499 params[i] = (GLint) (converted_params[i] * 65536);
500 }
501 } else {
502 for (i = 0; i < n_params; i++) {
503 params[i] = (GLfixed) converted_params[i];
504 }
505 }
506 }
507
508 void GL_APIENTRY
509 _es_LightModelx(GLenum pname, GLfixed param)
510 {
511 switch(pname) {
512 case GL_LIGHT_MODEL_TWO_SIDE:
513 if (param != GL_TRUE && param != GL_FALSE) {
514 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
515 "glLightModelx(pname=0x%x)", pname);
516 return;
517 }
518 break;
519 default:
520 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
521 "glLightModelx(pname=0x%x)", pname);
522 return;
523 }
524
525 _mesa_LightModelf(pname, (GLfloat) param);
526 }
527
528 void GL_APIENTRY
529 _es_LightModelxv(GLenum pname, const GLfixed *params)
530 {
531 unsigned int i;
532 unsigned int n_params = 4;
533 GLfloat converted_params[4];
534 bool convert_params_value = true;
535
536 switch(pname) {
537 case GL_LIGHT_MODEL_AMBIENT:
538 n_params = 4;
539 break;
540 case GL_LIGHT_MODEL_TWO_SIDE:
541 if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
542 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
543 "glLightModelxv(pname=0x%x)", pname);
544 return;
545 }
546 convert_params_value = false;
547 n_params = 1;
548 break;
549 default:
550 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
551 "glLightModelxv(pname=0x%x)", pname);
552 return;
553 }
554
555 if (convert_params_value) {
556 for (i = 0; i < n_params; i++) {
557 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
558 }
559 } else {
560 for (i = 0; i < n_params; i++) {
561 converted_params[i] = (GLfloat) params[i];
562 }
563 }
564
565 _mesa_LightModelfv(pname, converted_params);
566 }
567
568 void GL_APIENTRY
569 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
570 {
571 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
572 }
573
574 void GL_APIENTRY
575 _es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
576 {
577 unsigned int i;
578 unsigned int n_params = 4;
579 GLfloat converted_params[4];
580
581 if (light < GL_LIGHT0 || light > GL_LIGHT7) {
582 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
583 "glLightxv(light=0x%x)", light);
584 return;
585 }
586 switch(pname) {
587 case GL_AMBIENT:
588 case GL_DIFFUSE:
589 case GL_SPECULAR:
590 case GL_POSITION:
591 n_params = 4;
592 break;
593 case GL_SPOT_DIRECTION:
594 n_params = 3;
595 break;
596 case GL_SPOT_EXPONENT:
597 case GL_SPOT_CUTOFF:
598 case GL_CONSTANT_ATTENUATION:
599 case GL_LINEAR_ATTENUATION:
600 case GL_QUADRATIC_ATTENUATION:
601 n_params = 1;
602 break;
603 default:
604 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
605 "glLightxv(pname=0x%x)", pname);
606 return;
607 }
608
609 for (i = 0; i < n_params; i++) {
610 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
611 }
612
613 _mesa_Lightfv(light, pname, converted_params);
614 }
615
616 void GL_APIENTRY
617 _es_LineWidthx(GLfixed width)
618 {
619 _mesa_LineWidth((GLfloat) (width / 65536.0f));
620 }
621
622 void GL_APIENTRY
623 _es_LoadMatrixx(const GLfixed *m)
624 {
625 unsigned int i;
626 GLfloat converted_m[16];
627
628 for (i = 0; i < Elements(converted_m); i++) {
629 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
630 }
631
632 _mesa_LoadMatrixf(converted_m);
633 }
634
635 void GL_APIENTRY
636 _es_Materialx(GLenum face, GLenum pname, GLfixed param)
637 {
638 if (face != GL_FRONT_AND_BACK) {
639 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
640 "glMaterialx(face=0x%x)", face);
641 return;
642 }
643
644 if (pname != GL_SHININESS) {
645 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
646 "glMaterialx(pname=0x%x)", pname);
647 return;
648 }
649
650 _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
651 }
652
653 void GL_APIENTRY
654 _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
655 {
656 unsigned int i;
657 unsigned int n_params = 4;
658 GLfloat converted_params[4];
659
660 if (face != GL_FRONT_AND_BACK) {
661 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
662 "glMaterialxv(face=0x%x)", face);
663 return;
664 }
665
666 switch(pname) {
667 case GL_AMBIENT:
668 case GL_DIFFUSE:
669 case GL_AMBIENT_AND_DIFFUSE:
670 case GL_SPECULAR:
671 case GL_EMISSION:
672 n_params = 4;
673 break;
674 case GL_SHININESS:
675 n_params = 1;
676 break;
677 default:
678 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
679 "glMaterialxv(pname=0x%x)", pname);
680 return;
681 }
682
683 for (i = 0; i < n_params; i++) {
684 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
685 }
686
687 _es_Materialfv(face, pname, converted_params);
688 }
689
690 void GL_APIENTRY
691 _es_MultMatrixx(const GLfixed *m)
692 {
693 unsigned int i;
694 GLfloat converted_m[16];
695
696 for (i = 0; i < Elements(converted_m); i++) {
697 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
698 }
699
700 _mesa_MultMatrixf(converted_m);
701 }
702
703 void GL_APIENTRY
704 _es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
705 {
706 _es_MultiTexCoord4f(texture,
707 (GLfloat) (s / 65536.0f),
708 (GLfloat) (t / 65536.0f),
709 (GLfloat) (r / 65536.0f),
710 (GLfloat) (q / 65536.0f));
711 }
712
713 void GL_APIENTRY
714 _es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
715 {
716 _es_Normal3f((GLfloat) (nx / 65536.0f),
717 (GLfloat) (ny / 65536.0f),
718 (GLfloat) (nz / 65536.0f));
719 }
720
721 void GL_APIENTRY
722 _es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
723 GLfloat zNear, GLfloat zFar)
724 {
725 _mesa_Ortho((GLdouble) (left),
726 (GLdouble) (right),
727 (GLdouble) (bottom),
728 (GLdouble) (top),
729 (GLdouble) (zNear),
730 (GLdouble) (zFar));
731 }
732
733 void GL_APIENTRY
734 _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
735 GLfixed zNear, GLfixed zFar)
736 {
737 _mesa_Ortho((GLdouble) (left / 65536.0),
738 (GLdouble) (right / 65536.0),
739 (GLdouble) (bottom / 65536.0),
740 (GLdouble) (top / 65536.0),
741 (GLdouble) (zNear / 65536.0),
742 (GLdouble) (zFar / 65536.0));
743 }
744
745 void GL_APIENTRY
746 _es_PointParameterx(GLenum pname, GLfixed param)
747 {
748 switch(pname) {
749 case GL_POINT_SIZE_MIN:
750 case GL_POINT_SIZE_MAX:
751 case GL_POINT_FADE_THRESHOLD_SIZE:
752 break;
753 default:
754 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
755 "glPointParameterx(pname=0x%x)", pname);
756 return;
757 }
758
759 _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
760 }
761
762 void GL_APIENTRY
763 _es_PointParameterxv(GLenum pname, const GLfixed *params)
764 {
765 unsigned int i;
766 unsigned int n_params = 3;
767 GLfloat converted_params[3];
768
769 switch(pname) {
770 case GL_POINT_SIZE_MIN:
771 case GL_POINT_SIZE_MAX:
772 case GL_POINT_FADE_THRESHOLD_SIZE:
773 n_params = 1;
774 break;
775 case GL_POINT_DISTANCE_ATTENUATION:
776 n_params = 3;
777 break;
778 default:
779 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
780 "glPointParameterxv(pname=0x%x)", pname);
781 return;
782 }
783
784 for (i = 0; i < n_params; i++) {
785 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
786 }
787
788 _mesa_PointParameterfv(pname, converted_params);
789 }
790
791 void GL_APIENTRY
792 _es_PointSizex(GLfixed size)
793 {
794 _mesa_PointSize((GLfloat) (size / 65536.0f));
795 }
796
797 void GL_APIENTRY
798 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
799 {
800 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
801 (GLfloat) (units / 65536.0f));
802 }
803
804 void GL_APIENTRY
805 _es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
806 {
807 _mesa_Rotatef((GLfloat) (angle / 65536.0f),
808 (GLfloat) (x / 65536.0f),
809 (GLfloat) (y / 65536.0f),
810 (GLfloat) (z / 65536.0f));
811 }
812
813 void GL_APIENTRY
814 _es_SampleCoveragex(GLclampx value, GLboolean invert)
815 {
816 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
817 invert);
818 }
819
820 void GL_APIENTRY
821 _es_Scalex(GLfixed x, GLfixed y, GLfixed z)
822 {
823 _mesa_Scalef((GLfloat) (x / 65536.0f),
824 (GLfloat) (y / 65536.0f),
825 (GLfloat) (z / 65536.0f));
826 }
827
828 void GL_APIENTRY
829 _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
830 {
831 GLfloat converted_param;
832 bool convert_param_value = true;
833
834 switch(target) {
835 case GL_POINT_SPRITE:
836 if (pname != GL_COORD_REPLACE) {
837 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
838 "glTexEnvx(target=0x%x)", target);
839 return;
840 }
841 break;
842 case GL_TEXTURE_FILTER_CONTROL_EXT:
843 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
844 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
845 "glTexEnvx(target=0x%x)", target);
846 return;
847 }
848 break;
849 case GL_TEXTURE_ENV:
850 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) {
851 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
852 "glTexEnvx(target=0x%x)", target);
853 return;
854 }
855 break;
856 default:
857 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
858 "glTexEnvx(target=0x%x)", target);
859 return;
860 }
861 switch(pname) {
862 case GL_COORD_REPLACE:
863 if (param != GL_TRUE && param != GL_FALSE) {
864 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
865 "glTexEnvx(pname=0x%x)", pname);
866 return;
867 }
868 convert_param_value = false;
869 break;
870 case GL_TEXTURE_LOD_BIAS_EXT:
871 break;
872 case GL_TEXTURE_ENV_MODE:
873 if (param != GL_REPLACE && param != GL_MODULATE && param != GL_DECAL && param != GL_BLEND && param != GL_ADD && param != GL_COMBINE) {
874 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
875 "glTexEnvx(pname=0x%x)", pname);
876 return;
877 }
878 convert_param_value = false;
879 break;
880 case GL_COMBINE_RGB:
881 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) {
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_ALPHA:
889 if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT) {
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_RGB_SCALE:
897 case GL_ALPHA_SCALE:
898 break;
899 case GL_SRC0_RGB:
900 case GL_SRC1_RGB:
901 case GL_SRC2_RGB:
902 case GL_SRC0_ALPHA:
903 case GL_SRC1_ALPHA:
904 case GL_SRC2_ALPHA:
905 convert_param_value = false;
906 break;
907 case GL_OPERAND0_RGB:
908 case GL_OPERAND1_RGB:
909 case GL_OPERAND2_RGB:
910 if (param != GL_SRC_COLOR && param != GL_ONE_MINUS_SRC_COLOR && param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
911 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
912 "glTexEnvx(pname=0x%x)", pname);
913 return;
914 }
915 convert_param_value = false;
916 break;
917 case GL_OPERAND0_ALPHA:
918 case GL_OPERAND1_ALPHA:
919 case GL_OPERAND2_ALPHA:
920 if (param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
921 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
922 "glTexEnvx(pname=0x%x)", pname);
923 return;
924 }
925 convert_param_value = false;
926 break;
927 default:
928 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
929 "glTexEnvx(pname=0x%x)", pname);
930 return;
931 }
932
933 if (convert_param_value) {
934 converted_param = (GLfloat) (param / 65536.0f);
935 } else {
936 converted_param = (GLfloat) param;
937 }
938
939 _mesa_TexEnvf(target, pname, converted_param);
940 }
941
942 void GL_APIENTRY
943 _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
944 {
945 unsigned int i;
946 unsigned int n_params = 4;
947 GLfloat converted_params[4];
948 bool convert_params_value = true;
949
950 switch(target) {
951 case GL_POINT_SPRITE:
952 if (pname != GL_COORD_REPLACE) {
953 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
954 "glTexEnvxv(target=0x%x)", target);
955 return;
956 }
957 break;
958 case GL_TEXTURE_FILTER_CONTROL_EXT:
959 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
960 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
961 "glTexEnvxv(target=0x%x)", target);
962 return;
963 }
964 break;
965 case GL_TEXTURE_ENV:
966 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) {
967 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
968 "glTexEnvxv(target=0x%x)", target);
969 return;
970 }
971 break;
972 default:
973 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
974 "glTexEnvxv(target=0x%x)", target);
975 return;
976 }
977 switch(pname) {
978 case GL_COORD_REPLACE:
979 if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
980 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
981 "glTexEnvxv(pname=0x%x)", pname);
982 return;
983 }
984 convert_params_value = false;
985 n_params = 1;
986 break;
987 case GL_TEXTURE_LOD_BIAS_EXT:
988 n_params = 1;
989 break;
990 case GL_TEXTURE_ENV_MODE:
991 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) {
992 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
993 "glTexEnvxv(pname=0x%x)", pname);
994 return;
995 }
996 convert_params_value = false;
997 n_params = 1;
998 break;
999 case GL_COMBINE_RGB:
1000 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) {
1001 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1002 "glTexEnvxv(pname=0x%x)", pname);
1003 return;
1004 }
1005 convert_params_value = false;
1006 n_params = 1;
1007 break;
1008 case GL_COMBINE_ALPHA:
1009 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) {
1010 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1011 "glTexEnvxv(pname=0x%x)", pname);
1012 return;
1013 }
1014 convert_params_value = false;
1015 n_params = 1;
1016 break;
1017 case GL_RGB_SCALE:
1018 case GL_ALPHA_SCALE:
1019 break;
1020 case GL_SRC0_RGB:
1021 case GL_SRC1_RGB:
1022 case GL_SRC2_RGB:
1023 case GL_SRC0_ALPHA:
1024 case GL_SRC1_ALPHA:
1025 case GL_SRC2_ALPHA:
1026 convert_params_value = false;
1027 n_params = 1;
1028 break;
1029 case GL_OPERAND0_RGB:
1030 case GL_OPERAND1_RGB:
1031 case GL_OPERAND2_RGB:
1032 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) {
1033 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1034 "glTexEnvxv(pname=0x%x)", pname);
1035 return;
1036 }
1037 convert_params_value = false;
1038 n_params = 1;
1039 break;
1040 case GL_OPERAND0_ALPHA:
1041 case GL_OPERAND1_ALPHA:
1042 case GL_OPERAND2_ALPHA:
1043 if (params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) {
1044 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1045 "glTexEnvxv(pname=0x%x)", pname);
1046 return;
1047 }
1048 convert_params_value = false;
1049 n_params = 1;
1050 break;
1051 case GL_TEXTURE_ENV_COLOR:
1052 n_params = 4;
1053 break;
1054 default:
1055 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1056 "glTexEnvxv(pname=0x%x)", pname);
1057 return;
1058 }
1059
1060 if (convert_params_value) {
1061 for (i = 0; i < n_params; i++) {
1062 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1063 }
1064 } else {
1065 for (i = 0; i < n_params; i++) {
1066 converted_params[i] = (GLfloat) params[i];
1067 }
1068 }
1069
1070 _mesa_TexEnvfv(target, pname, converted_params);
1071 }
1072
1073 void GL_APIENTRY
1074 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
1075 {
1076 switch(coord) {
1077 case GL_TEXTURE_GEN_STR_OES:
1078 break;
1079 default:
1080 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1081 "glTexGeniOES(coord=0x%x)", coord);
1082 return;
1083 }
1084 switch(pname) {
1085 case GL_TEXTURE_GEN_MODE:
1086 if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1087 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1088 "glTexGeniOES(pname=0x%x)", pname);
1089 return;
1090 }
1091 break;
1092 default:
1093 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1094 "glTexGeniOES(pname=0x%x)", pname);
1095 return;
1096 }
1097
1098 _es_TexGenf(coord, pname, (GLfloat) param);
1099 }
1100
1101 void GL_APIENTRY
1102 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
1103 {
1104 unsigned int i;
1105 unsigned int n_params = 1;
1106 GLfloat converted_params[1];
1107
1108 switch(coord) {
1109 case GL_TEXTURE_GEN_STR_OES:
1110 break;
1111 default:
1112 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1113 "glTexGenivOES(coord=0x%x)", coord);
1114 return;
1115 }
1116 switch(pname) {
1117 case GL_TEXTURE_GEN_MODE:
1118 if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1119 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1120 "glTexGenivOES(pname=0x%x)", pname);
1121 return;
1122 }
1123 n_params = 1;
1124 break;
1125 default:
1126 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1127 "glTexGenivOES(pname=0x%x)", pname);
1128 return;
1129 }
1130
1131 for (i = 0; i < n_params; i++) {
1132 converted_params[i] = (GLfloat) params[i];
1133 }
1134
1135 _es_TexGenfv(coord, pname, converted_params);
1136 }
1137
1138 void GL_APIENTRY
1139 _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
1140 {
1141 switch(coord) {
1142 case GL_TEXTURE_GEN_STR_OES:
1143 break;
1144 default:
1145 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1146 "glTexGenxOES(coord=0x%x)", coord);
1147 return;
1148 }
1149 switch(pname) {
1150 case GL_TEXTURE_GEN_MODE:
1151 if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) {
1152 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1153 "glTexGenxOES(pname=0x%x)", pname);
1154 return;
1155 }
1156 break;
1157 default:
1158 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1159 "glTexGenxOES(pname=0x%x)", pname);
1160 return;
1161 }
1162
1163 _es_TexGenf(coord, pname, (GLfloat) param);
1164 }
1165
1166 void GL_APIENTRY
1167 _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
1168 {
1169 unsigned int i;
1170 unsigned int n_params = 1;
1171 GLfloat converted_params[1];
1172
1173 switch(coord) {
1174 case GL_TEXTURE_GEN_STR_OES:
1175 break;
1176 default:
1177 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1178 "glTexGenxvOES(coord=0x%x)", coord);
1179 return;
1180 }
1181 switch(pname) {
1182 case GL_TEXTURE_GEN_MODE:
1183 if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) {
1184 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1185 "glTexGenxvOES(pname=0x%x)", pname);
1186 return;
1187 }
1188 n_params = 1;
1189 break;
1190 default:
1191 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1192 "glTexGenxvOES(pname=0x%x)", pname);
1193 return;
1194 }
1195
1196 for (i = 0; i < n_params; i++) {
1197 converted_params[i] = (GLfloat) params[i];
1198 }
1199
1200 _es_TexGenfv(coord, pname, converted_params);
1201 }
1202
1203 void GL_APIENTRY
1204 _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
1205 {
1206 if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
1207 _mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
1208 } else {
1209 _mesa_TexParameterf(target, pname, (GLfloat) param);
1210 }
1211 }
1212
1213 void GL_APIENTRY
1214 _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
1215 {
1216 unsigned int i;
1217 unsigned int n_params = 4;
1218 GLfloat converted_params[4];
1219 bool convert_params_value = true;
1220
1221 switch(target) {
1222 case GL_TEXTURE_2D:
1223 case GL_TEXTURE_CUBE_MAP:
1224 case GL_TEXTURE_EXTERNAL_OES:
1225 break;
1226 default:
1227 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1228 "glTexParameterxv(target=0x%x)", target);
1229 return;
1230 }
1231 switch(pname) {
1232 case GL_TEXTURE_WRAP_S:
1233 case GL_TEXTURE_WRAP_T:
1234 convert_params_value = false;
1235 n_params = 1;
1236 break;
1237 case GL_TEXTURE_MIN_FILTER:
1238 case GL_TEXTURE_MAG_FILTER:
1239 case GL_GENERATE_MIPMAP:
1240 convert_params_value = false;
1241 n_params = 1;
1242 break;
1243 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1244 n_params = 1;
1245 break;
1246 case GL_TEXTURE_CROP_RECT_OES:
1247 n_params = 4;
1248 break;
1249 default:
1250 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1251 "glTexParameterxv(pname=0x%x)", pname);
1252 return;
1253 }
1254
1255 if (convert_params_value) {
1256 for (i = 0; i < n_params; i++) {
1257 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1258 }
1259 } else {
1260 for (i = 0; i < n_params; i++) {
1261 converted_params[i] = (GLfloat) params[i];
1262 }
1263 }
1264
1265 _mesa_TexParameterfv(target, pname, converted_params);
1266 }
1267
1268 void GL_APIENTRY
1269 _es_Translatex(GLfixed x, GLfixed y, GLfixed z)
1270 {
1271 _mesa_Translatef((GLfloat) (x / 65536.0f),
1272 (GLfloat) (y / 65536.0f),
1273 (GLfloat) (z / 65536.0f));
1274 }
1275
1276 #endif /* FEATURE_ES1 */