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