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