6edc97bd468cad128ed5007864ddef6fce20d282
[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 _mesa_LightModelf(pname, (GLfloat) param);
512 }
513
514 void GL_APIENTRY
515 _es_LightModelxv(GLenum pname, const GLfixed *params)
516 {
517 unsigned int i;
518 unsigned int n_params = 4;
519 GLfloat converted_params[4];
520 bool convert_params_value = true;
521
522 switch(pname) {
523 case GL_LIGHT_MODEL_AMBIENT:
524 n_params = 4;
525 break;
526 case GL_LIGHT_MODEL_TWO_SIDE:
527 convert_params_value = false;
528 n_params = 1;
529 break;
530 default:
531 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
532 "glLightModelxv(pname=0x%x)", pname);
533 return;
534 }
535
536 if (convert_params_value) {
537 for (i = 0; i < n_params; i++) {
538 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
539 }
540 } else {
541 for (i = 0; i < n_params; i++) {
542 converted_params[i] = (GLfloat) params[i];
543 }
544 }
545
546 _mesa_LightModelfv(pname, converted_params);
547 }
548
549 void GL_APIENTRY
550 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
551 {
552 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
553 }
554
555 void GL_APIENTRY
556 _es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
557 {
558 unsigned int i;
559 unsigned int n_params = 4;
560 GLfloat converted_params[4];
561
562 if (light < GL_LIGHT0 || light > GL_LIGHT7) {
563 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
564 "glLightxv(light=0x%x)", light);
565 return;
566 }
567 switch(pname) {
568 case GL_AMBIENT:
569 case GL_DIFFUSE:
570 case GL_SPECULAR:
571 case GL_POSITION:
572 n_params = 4;
573 break;
574 case GL_SPOT_DIRECTION:
575 n_params = 3;
576 break;
577 case GL_SPOT_EXPONENT:
578 case GL_SPOT_CUTOFF:
579 case GL_CONSTANT_ATTENUATION:
580 case GL_LINEAR_ATTENUATION:
581 case GL_QUADRATIC_ATTENUATION:
582 n_params = 1;
583 break;
584 default:
585 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
586 "glLightxv(pname=0x%x)", pname);
587 return;
588 }
589
590 for (i = 0; i < n_params; i++) {
591 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
592 }
593
594 _mesa_Lightfv(light, pname, converted_params);
595 }
596
597 void GL_APIENTRY
598 _es_LineWidthx(GLfixed width)
599 {
600 _mesa_LineWidth((GLfloat) (width / 65536.0f));
601 }
602
603 void GL_APIENTRY
604 _es_LoadMatrixx(const GLfixed *m)
605 {
606 unsigned int i;
607 GLfloat converted_m[16];
608
609 for (i = 0; i < Elements(converted_m); i++) {
610 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
611 }
612
613 _mesa_LoadMatrixf(converted_m);
614 }
615
616 void GL_APIENTRY
617 _es_Materialx(GLenum face, GLenum pname, GLfixed param)
618 {
619 if (face != GL_FRONT_AND_BACK) {
620 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
621 "glMaterialx(face=0x%x)", face);
622 return;
623 }
624
625 if (pname != GL_SHININESS) {
626 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
627 "glMaterialx(pname=0x%x)", pname);
628 return;
629 }
630
631 _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
632 }
633
634 void GL_APIENTRY
635 _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
636 {
637 unsigned int i;
638 unsigned int n_params = 4;
639 GLfloat converted_params[4];
640
641 if (face != GL_FRONT_AND_BACK) {
642 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
643 "glMaterialxv(face=0x%x)", face);
644 return;
645 }
646
647 switch(pname) {
648 case GL_AMBIENT:
649 case GL_DIFFUSE:
650 case GL_AMBIENT_AND_DIFFUSE:
651 case GL_SPECULAR:
652 case GL_EMISSION:
653 n_params = 4;
654 break;
655 case GL_SHININESS:
656 n_params = 1;
657 break;
658 default:
659 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
660 "glMaterialxv(pname=0x%x)", pname);
661 return;
662 }
663
664 for (i = 0; i < n_params; i++) {
665 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
666 }
667
668 _es_Materialfv(face, pname, converted_params);
669 }
670
671 void GL_APIENTRY
672 _es_MultMatrixx(const GLfixed *m)
673 {
674 unsigned int i;
675 GLfloat converted_m[16];
676
677 for (i = 0; i < Elements(converted_m); i++) {
678 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
679 }
680
681 _mesa_MultMatrixf(converted_m);
682 }
683
684 void GL_APIENTRY
685 _es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
686 {
687 _es_MultiTexCoord4f(texture,
688 (GLfloat) (s / 65536.0f),
689 (GLfloat) (t / 65536.0f),
690 (GLfloat) (r / 65536.0f),
691 (GLfloat) (q / 65536.0f));
692 }
693
694 void GL_APIENTRY
695 _es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
696 {
697 _es_Normal3f((GLfloat) (nx / 65536.0f),
698 (GLfloat) (ny / 65536.0f),
699 (GLfloat) (nz / 65536.0f));
700 }
701
702 void GL_APIENTRY
703 _es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
704 GLfloat zNear, GLfloat zFar)
705 {
706 _mesa_Ortho((GLdouble) (left),
707 (GLdouble) (right),
708 (GLdouble) (bottom),
709 (GLdouble) (top),
710 (GLdouble) (zNear),
711 (GLdouble) (zFar));
712 }
713
714 void GL_APIENTRY
715 _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
716 GLfixed zNear, GLfixed zFar)
717 {
718 _mesa_Ortho((GLdouble) (left / 65536.0),
719 (GLdouble) (right / 65536.0),
720 (GLdouble) (bottom / 65536.0),
721 (GLdouble) (top / 65536.0),
722 (GLdouble) (zNear / 65536.0),
723 (GLdouble) (zFar / 65536.0));
724 }
725
726 void GL_APIENTRY
727 _es_PointParameterx(GLenum pname, GLfixed param)
728 {
729 switch(pname) {
730 case GL_POINT_SIZE_MIN:
731 case GL_POINT_SIZE_MAX:
732 case GL_POINT_FADE_THRESHOLD_SIZE:
733 break;
734 default:
735 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
736 "glPointParameterx(pname=0x%x)", pname);
737 return;
738 }
739
740 _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
741 }
742
743 void GL_APIENTRY
744 _es_PointParameterxv(GLenum pname, const GLfixed *params)
745 {
746 unsigned int i;
747 unsigned int n_params = 3;
748 GLfloat converted_params[3];
749
750 switch(pname) {
751 case GL_POINT_SIZE_MIN:
752 case GL_POINT_SIZE_MAX:
753 case GL_POINT_FADE_THRESHOLD_SIZE:
754 n_params = 1;
755 break;
756 case GL_POINT_DISTANCE_ATTENUATION:
757 n_params = 3;
758 break;
759 default:
760 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
761 "glPointParameterxv(pname=0x%x)", pname);
762 return;
763 }
764
765 for (i = 0; i < n_params; i++) {
766 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
767 }
768
769 _mesa_PointParameterfv(pname, converted_params);
770 }
771
772 void GL_APIENTRY
773 _es_PointSizex(GLfixed size)
774 {
775 _mesa_PointSize((GLfloat) (size / 65536.0f));
776 }
777
778 void GL_APIENTRY
779 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
780 {
781 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
782 (GLfloat) (units / 65536.0f));
783 }
784
785 void GL_APIENTRY
786 _es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
787 {
788 _mesa_Rotatef((GLfloat) (angle / 65536.0f),
789 (GLfloat) (x / 65536.0f),
790 (GLfloat) (y / 65536.0f),
791 (GLfloat) (z / 65536.0f));
792 }
793
794 void GL_APIENTRY
795 _es_SampleCoveragex(GLclampx value, GLboolean invert)
796 {
797 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
798 invert);
799 }
800
801 void GL_APIENTRY
802 _es_Scalex(GLfixed x, GLfixed y, GLfixed z)
803 {
804 _mesa_Scalef((GLfloat) (x / 65536.0f),
805 (GLfloat) (y / 65536.0f),
806 (GLfloat) (z / 65536.0f));
807 }
808
809 void GL_APIENTRY
810 _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
811 {
812 GLfloat converted_param;
813 bool convert_param_value = true;
814
815 switch(target) {
816 case GL_POINT_SPRITE:
817 if (pname != GL_COORD_REPLACE) {
818 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
819 "glTexEnvx(target=0x%x)", target);
820 return;
821 }
822 break;
823 case GL_TEXTURE_FILTER_CONTROL_EXT:
824 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
825 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
826 "glTexEnvx(target=0x%x)", target);
827 return;
828 }
829 break;
830 case GL_TEXTURE_ENV:
831 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) {
832 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
833 "glTexEnvx(target=0x%x)", target);
834 return;
835 }
836 break;
837 default:
838 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
839 "glTexEnvx(target=0x%x)", target);
840 return;
841 }
842 switch(pname) {
843 case GL_COORD_REPLACE:
844 if (param != GL_TRUE && param != GL_FALSE) {
845 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
846 "glTexEnvx(pname=0x%x)", pname);
847 return;
848 }
849 convert_param_value = false;
850 break;
851 case GL_TEXTURE_LOD_BIAS_EXT:
852 break;
853 case GL_TEXTURE_ENV_MODE:
854 if (param != GL_REPLACE && param != GL_MODULATE && param != GL_DECAL && param != GL_BLEND && param != GL_ADD && param != GL_COMBINE) {
855 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
856 "glTexEnvx(pname=0x%x)", pname);
857 return;
858 }
859 convert_param_value = false;
860 break;
861 case GL_COMBINE_RGB:
862 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) {
863 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
864 "glTexEnvx(pname=0x%x)", pname);
865 return;
866 }
867 convert_param_value = false;
868 break;
869 case GL_COMBINE_ALPHA:
870 if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT) {
871 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
872 "glTexEnvx(pname=0x%x)", pname);
873 return;
874 }
875 convert_param_value = false;
876 break;
877 case GL_RGB_SCALE:
878 case GL_ALPHA_SCALE:
879 break;
880 case GL_SRC0_RGB:
881 case GL_SRC1_RGB:
882 case GL_SRC2_RGB:
883 case GL_SRC0_ALPHA:
884 case GL_SRC1_ALPHA:
885 case GL_SRC2_ALPHA:
886 convert_param_value = false;
887 break;
888 case GL_OPERAND0_RGB:
889 case GL_OPERAND1_RGB:
890 case GL_OPERAND2_RGB:
891 if (param != GL_SRC_COLOR && param != GL_ONE_MINUS_SRC_COLOR && param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
892 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
893 "glTexEnvx(pname=0x%x)", pname);
894 return;
895 }
896 convert_param_value = false;
897 break;
898 case GL_OPERAND0_ALPHA:
899 case GL_OPERAND1_ALPHA:
900 case GL_OPERAND2_ALPHA:
901 if (param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) {
902 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
903 "glTexEnvx(pname=0x%x)", pname);
904 return;
905 }
906 convert_param_value = false;
907 break;
908 default:
909 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
910 "glTexEnvx(pname=0x%x)", pname);
911 return;
912 }
913
914 if (convert_param_value) {
915 converted_param = (GLfloat) (param / 65536.0f);
916 } else {
917 converted_param = (GLfloat) param;
918 }
919
920 _mesa_TexEnvf(target, pname, converted_param);
921 }
922
923 void GL_APIENTRY
924 _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
925 {
926 unsigned int i;
927 unsigned int n_params = 4;
928 GLfloat converted_params[4];
929 bool convert_params_value = true;
930
931 switch(target) {
932 case GL_POINT_SPRITE:
933 if (pname != GL_COORD_REPLACE) {
934 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
935 "glTexEnvxv(target=0x%x)", target);
936 return;
937 }
938 break;
939 case GL_TEXTURE_FILTER_CONTROL_EXT:
940 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
941 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
942 "glTexEnvxv(target=0x%x)", target);
943 return;
944 }
945 break;
946 case GL_TEXTURE_ENV:
947 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) {
948 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
949 "glTexEnvxv(target=0x%x)", target);
950 return;
951 }
952 break;
953 default:
954 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
955 "glTexEnvxv(target=0x%x)", target);
956 return;
957 }
958 switch(pname) {
959 case GL_COORD_REPLACE:
960 if (params[0] != GL_TRUE && params[0] != GL_FALSE) {
961 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
962 "glTexEnvxv(pname=0x%x)", pname);
963 return;
964 }
965 convert_params_value = false;
966 n_params = 1;
967 break;
968 case GL_TEXTURE_LOD_BIAS_EXT:
969 n_params = 1;
970 break;
971 case GL_TEXTURE_ENV_MODE:
972 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) {
973 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
974 "glTexEnvxv(pname=0x%x)", pname);
975 return;
976 }
977 convert_params_value = false;
978 n_params = 1;
979 break;
980 case GL_COMBINE_RGB:
981 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) {
982 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
983 "glTexEnvxv(pname=0x%x)", pname);
984 return;
985 }
986 convert_params_value = false;
987 n_params = 1;
988 break;
989 case GL_COMBINE_ALPHA:
990 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) {
991 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
992 "glTexEnvxv(pname=0x%x)", pname);
993 return;
994 }
995 convert_params_value = false;
996 n_params = 1;
997 break;
998 case GL_RGB_SCALE:
999 case GL_ALPHA_SCALE:
1000 break;
1001 case GL_SRC0_RGB:
1002 case GL_SRC1_RGB:
1003 case GL_SRC2_RGB:
1004 case GL_SRC0_ALPHA:
1005 case GL_SRC1_ALPHA:
1006 case GL_SRC2_ALPHA:
1007 convert_params_value = false;
1008 n_params = 1;
1009 break;
1010 case GL_OPERAND0_RGB:
1011 case GL_OPERAND1_RGB:
1012 case GL_OPERAND2_RGB:
1013 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) {
1014 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1015 "glTexEnvxv(pname=0x%x)", pname);
1016 return;
1017 }
1018 convert_params_value = false;
1019 n_params = 1;
1020 break;
1021 case GL_OPERAND0_ALPHA:
1022 case GL_OPERAND1_ALPHA:
1023 case GL_OPERAND2_ALPHA:
1024 if (params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) {
1025 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1026 "glTexEnvxv(pname=0x%x)", pname);
1027 return;
1028 }
1029 convert_params_value = false;
1030 n_params = 1;
1031 break;
1032 case GL_TEXTURE_ENV_COLOR:
1033 n_params = 4;
1034 break;
1035 default:
1036 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1037 "glTexEnvxv(pname=0x%x)", pname);
1038 return;
1039 }
1040
1041 if (convert_params_value) {
1042 for (i = 0; i < n_params; i++) {
1043 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1044 }
1045 } else {
1046 for (i = 0; i < n_params; i++) {
1047 converted_params[i] = (GLfloat) params[i];
1048 }
1049 }
1050
1051 _mesa_TexEnvfv(target, pname, converted_params);
1052 }
1053
1054 void GL_APIENTRY
1055 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
1056 {
1057 _es_TexGenf(coord, pname, (GLfloat) param);
1058 }
1059
1060 void GL_APIENTRY
1061 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
1062 {
1063 _es_TexGenf(coord, pname, (GLfloat) params[0]);
1064 }
1065
1066 void GL_APIENTRY
1067 _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
1068 {
1069 _es_TexGenf(coord, pname, (GLfloat) param);
1070 }
1071
1072 void GL_APIENTRY
1073 _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
1074 {
1075 _es_TexGenf(coord, pname, (GLfloat) params[0]);
1076 }
1077
1078 void GL_APIENTRY
1079 _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
1080 {
1081 if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
1082 _mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
1083 } else {
1084 _mesa_TexParameterf(target, pname, (GLfloat) param);
1085 }
1086 }
1087
1088 void GL_APIENTRY
1089 _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
1090 {
1091 unsigned int i;
1092 unsigned int n_params = 4;
1093 GLfloat converted_params[4];
1094 bool convert_params_value = true;
1095
1096 switch(target) {
1097 case GL_TEXTURE_2D:
1098 case GL_TEXTURE_CUBE_MAP:
1099 case GL_TEXTURE_EXTERNAL_OES:
1100 break;
1101 default:
1102 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1103 "glTexParameterxv(target=0x%x)", target);
1104 return;
1105 }
1106 switch(pname) {
1107 case GL_TEXTURE_WRAP_S:
1108 case GL_TEXTURE_WRAP_T:
1109 convert_params_value = false;
1110 n_params = 1;
1111 break;
1112 case GL_TEXTURE_MIN_FILTER:
1113 case GL_TEXTURE_MAG_FILTER:
1114 case GL_GENERATE_MIPMAP:
1115 convert_params_value = false;
1116 n_params = 1;
1117 break;
1118 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
1119 n_params = 1;
1120 break;
1121 case GL_TEXTURE_CROP_RECT_OES:
1122 n_params = 4;
1123 break;
1124 default:
1125 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
1126 "glTexParameterxv(pname=0x%x)", pname);
1127 return;
1128 }
1129
1130 if (convert_params_value) {
1131 for (i = 0; i < n_params; i++) {
1132 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
1133 }
1134 } else {
1135 for (i = 0; i < n_params; i++) {
1136 converted_params[i] = (GLfloat) params[i];
1137 }
1138 }
1139
1140 _mesa_TexParameterfv(target, pname, converted_params);
1141 }
1142
1143 void GL_APIENTRY
1144 _es_Translatex(GLfixed x, GLfixed y, GLfixed z)
1145 {
1146 _mesa_Translatef((GLfloat) (x / 65536.0f),
1147 (GLfloat) (y / 65536.0f),
1148 (GLfloat) (z / 65536.0f));
1149 }
1150
1151 #endif /* FEATURE_ES1 */