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