es1_conversion.c revision f329adfa497b6b2e0a125ab98a38c656a017270d
1cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#include <stdbool.h> 2cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#include "main/mfeatures.h" 38cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com 4cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#if FEATURE_ES1 5cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com 6cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#include "api_loopback.h" 78cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "api_exec.h" 8cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#include "blend.h" 98cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "clear.h" 10cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#include "clip.h" 118cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "context.h" 128cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "depth.h" 138cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "fog.h" 148cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "imports.h" 158cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "light.h" 168cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "lines.h" 178cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "matrix.h" 188cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "multisample.h" 198cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "pixelstore.h" 208cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#include "points.h" 218cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#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 38void GL_APIENTRY 39_es_AlphaFuncx(GLenum func, GLclampx ref) 40{ 41 _mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f)); 42} 43 44void 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 53void GL_APIENTRY 54_es_ClearDepthx(GLclampx depth) 55{ 56 _mesa_ClearDepthf((GLclampf) (depth / 65536.0f)); 57} 58 59void 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 72void 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 85void 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 94void 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 103void GL_APIENTRY 104_es_DepthRangex(GLclampx zNear, GLclampx zFar) 105{ 106 _mesa_DepthRangef((GLclampf) (zNear / 65536.0f), 107 (GLclampf) (zFar / 65536.0f)); 108} 109 110void 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 121void 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 134void 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 145void 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 185void 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 197void 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 209void 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 221void 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 233void 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 274void 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 312void 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 398void 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 429void 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 460void 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 508void GL_APIENTRY 509_es_LightModelx(GLenum pname, GLfixed param) 510{ 511 _mesa_LightModelf(pname, (GLfloat) param); 512} 513 514void 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 549void GL_APIENTRY 550_es_Lightx(GLenum light, GLenum pname, GLfixed param) 551{ 552 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f)); 553} 554 555void 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 597void GL_APIENTRY 598_es_LineWidthx(GLfixed width) 599{ 600 _mesa_LineWidth((GLfloat) (width / 65536.0f)); 601} 602 603void 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 616void 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 634void 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 671void 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 684void 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 694void 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 702void 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 714void 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 726void 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 743void 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 772void GL_APIENTRY 773_es_PointSizex(GLfixed size) 774{ 775 _mesa_PointSize((GLfloat) (size / 65536.0f)); 776} 777 778void GL_APIENTRY 779_es_PolygonOffsetx(GLfixed factor, GLfixed units) 780{ 781 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f), 782 (GLfloat) (units / 65536.0f)); 783} 784 785void 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 794void GL_APIENTRY 795_es_SampleCoveragex(GLclampx value, GLboolean invert) 796{ 797 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f), 798 invert); 799} 800 801void 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 809void 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 923void 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 1054void GL_APIENTRY 1055_check_TexGeniOES(GLenum coord, GLenum pname, GLint param) 1056{ 1057 _es_TexGenf(coord, pname, (GLfloat) param); 1058} 1059 1060void GL_APIENTRY 1061_check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params) 1062{ 1063 _es_TexGenf(coord, pname, (GLfloat) params[0]); 1064} 1065 1066void GL_APIENTRY 1067_check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param) 1068{ 1069 _es_TexGenf(coord, pname, (GLfloat) param); 1070} 1071 1072void GL_APIENTRY 1073_check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params) 1074{ 1075 _es_TexGenf(coord, pname, (GLfloat) params[0]); 1076} 1077 1078void 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 1088void 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 1143void 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 */ 1152