Home | History | Annotate | Download | only in main
      1 /*
      2  * Mesa 3-D graphics library
      3  * Version:  7.1
      4  *
      5  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining a
      8  * copy of this software and associated documentation files (the "Software"),
      9  * to deal in the Software without restriction, including without limitation
     10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     11  * and/or sell copies of the Software, and to permit persons to whom the
     12  * Software is furnished to do so, subject to the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be included
     15  * in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     21  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 
     26 /**
     27  * \file api_exec.c
     28  * Initialize dispatch table with the immidiate mode functions.
     29  */
     30 
     31 
     32 #include "mfeatures.h"
     33 #include "accum.h"
     34 #include "api_loopback.h"
     35 #include "api_exec.h"
     36 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
     37 #include "arbprogram.h"
     38 #endif
     39 #include "atifragshader.h"
     40 #include "attrib.h"
     41 #include "blend.h"
     42 #include "bufferobj.h"
     43 #include "arrayobj.h"
     44 #if FEATURE_draw_read_buffer
     45 #include "buffers.h"
     46 #endif
     47 #include "clear.h"
     48 #include "clip.h"
     49 #include "colortab.h"
     50 #include "condrender.h"
     51 #include "context.h"
     52 #include "convolve.h"
     53 #include "depth.h"
     54 #include "dlist.h"
     55 #include "drawpix.h"
     56 #include "rastpos.h"
     57 #include "enable.h"
     58 #include "errors.h"
     59 #include "eval.h"
     60 #include "get.h"
     61 #include "feedback.h"
     62 #include "fog.h"
     63 #if FEATURE_EXT_framebuffer_object
     64 #include "fbobject.h"
     65 #endif
     66 #include "framebuffer.h"
     67 #include "hint.h"
     68 #include "histogram.h"
     69 #include "imports.h"
     70 #include "light.h"
     71 #include "lines.h"
     72 #include "matrix.h"
     73 #include "multisample.h"
     74 #include "pixel.h"
     75 #include "pixelstore.h"
     76 #include "points.h"
     77 #include "polygon.h"
     78 #include "queryobj.h"
     79 #include "readpix.h"
     80 #if FEATURE_ARB_sampler_objects
     81 #include "samplerobj.h"
     82 #endif
     83 #include "scissor.h"
     84 #include "stencil.h"
     85 #include "texenv.h"
     86 #include "texgetimage.h"
     87 #include "teximage.h"
     88 #include "texgen.h"
     89 #include "texobj.h"
     90 #include "texparam.h"
     91 #include "texstate.h"
     92 #include "texstorage.h"
     93 #include "texturebarrier.h"
     94 #include "transformfeedback.h"
     95 #include "mtypes.h"
     96 #include "varray.h"
     97 #include "viewport.h"
     98 #if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
     99 #include "nvprogram.h"
    100 #endif
    101 #if FEATURE_ARB_shader_objects
    102 #include "shaderapi.h"
    103 #include "uniforms.h"
    104 #endif
    105 #include "syncobj.h"
    106 #include "main/dispatch.h"
    107 
    108 
    109 #if FEATURE_GL || FEATURE_ES2
    110 
    111 
    112 /**
    113  * Initialize a dispatch table with pointers to Mesa's immediate-mode
    114  * commands.
    115  *
    116  * Pointers to glBegin()/glEnd() object commands and a few others
    117  * are provided via the GLvertexformat interface.
    118  *
    119  * \param ctx  GL context to which \c exec belongs.
    120  * \param exec dispatch table.
    121  */
    122 struct _glapi_table *
    123 _mesa_create_exec_table(struct gl_context *ctx)
    124 {
    125    struct _glapi_table *exec;
    126 
    127    exec = _mesa_alloc_dispatch_table(_gloffset_COUNT);
    128    if (exec == NULL)
    129       return NULL;
    130 
    131 #if _HAVE_FULL_GL
    132    _mesa_loopback_init_api_table(ctx, exec);
    133 #endif
    134 
    135    /* load the dispatch slots we understand */
    136    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    137       SET_AlphaFunc(exec, _mesa_AlphaFunc);
    138    }
    139 
    140    SET_BlendFunc(exec, _mesa_BlendFunc);
    141    SET_Clear(exec, _mesa_Clear);
    142    SET_ClearColor(exec, _mesa_ClearColor);
    143    SET_ClearStencil(exec, _mesa_ClearStencil);
    144    SET_ColorMask(exec, _mesa_ColorMask);
    145    SET_CullFace(exec, _mesa_CullFace);
    146    SET_Disable(exec, _mesa_Disable);
    147 #if FEATURE_draw_read_buffer
    148    if (ctx->API == API_OPENGL || ctx->API == API_OPENGL_CORE)
    149       SET_DrawBuffer(exec, _mesa_DrawBuffer);
    150 
    151    SET_ReadBuffer(exec, _mesa_ReadBuffer);
    152 #endif
    153    SET_Enable(exec, _mesa_Enable);
    154    SET_Finish(exec, _mesa_Finish);
    155    SET_Flush(exec, _mesa_Flush);
    156    SET_FrontFace(exec, _mesa_FrontFace);
    157    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    158       SET_Frustum(exec, _mesa_Frustum);
    159    }
    160    SET_GetError(exec, _mesa_GetError);
    161    SET_GetFloatv(exec, _mesa_GetFloatv);
    162    SET_GetString(exec, _mesa_GetString);
    163    if (ctx->API == API_OPENGL) {
    164       SET_LineStipple(exec, _mesa_LineStipple);
    165    }
    166    SET_LineWidth(exec, _mesa_LineWidth);
    167    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    168       SET_LoadIdentity(exec, _mesa_LoadIdentity);
    169       SET_LoadMatrixf(exec, _mesa_LoadMatrixf);
    170    }
    171    if (ctx->API != API_OPENGLES2) {
    172       SET_LogicOp(exec, _mesa_LogicOp);
    173    }
    174    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    175       SET_MatrixMode(exec, _mesa_MatrixMode);
    176       SET_MultMatrixf(exec, _mesa_MultMatrixf);
    177       SET_Ortho(exec, _mesa_Ortho);
    178    }
    179    SET_PixelStorei(exec, _mesa_PixelStorei);
    180    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    181       SET_PopMatrix(exec, _mesa_PopMatrix);
    182       SET_PushMatrix(exec, _mesa_PushMatrix);
    183       SET_Rotatef(exec, _mesa_Rotatef);
    184       SET_Scalef(exec, _mesa_Scalef);
    185    }
    186    SET_Scissor(exec, _mesa_Scissor);
    187    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    188       SET_ShadeModel(exec, _mesa_ShadeModel);
    189    }
    190    SET_StencilFunc(exec, _mesa_StencilFunc);
    191    SET_StencilMask(exec, _mesa_StencilMask);
    192    SET_StencilOp(exec, _mesa_StencilOp);
    193    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    194       SET_TexEnvfv(exec, _mesa_TexEnvfv);
    195       SET_TexEnvi(exec, _mesa_TexEnvi);
    196    }
    197    SET_TexImage2D(exec, _mesa_TexImage2D);
    198    SET_TexParameteri(exec, _mesa_TexParameteri);
    199    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    200       SET_Translatef(exec, _mesa_Translatef);
    201    }
    202    SET_Viewport(exec, _mesa_Viewport);
    203 
    204    if (ctx->API == API_OPENGL) {
    205       _mesa_init_accum_dispatch(exec);
    206       _mesa_init_dlist_dispatch(exec);
    207    }
    208 
    209    if (ctx->API != API_OPENGLES2) {
    210       SET_ClearDepth(exec, _mesa_ClearDepth);
    211    }
    212 
    213    if (ctx->API == API_OPENGL) {
    214       SET_ClearIndex(exec, _mesa_ClearIndex);
    215       SET_ClipPlane(exec, _mesa_ClipPlane);
    216       SET_ColorMaterial(exec, _mesa_ColorMaterial);
    217    }
    218    SET_DepthFunc(exec, _mesa_DepthFunc);
    219    SET_DepthMask(exec, _mesa_DepthMask);
    220 
    221    if (ctx->API != API_OPENGLES2) {
    222       SET_DepthRange(exec, _mesa_DepthRange);
    223    }
    224 
    225    if (ctx->API != API_OPENGLES2 && ctx->API != API_OPENGL_CORE) {
    226       _mesa_init_drawpix_dispatch(exec);
    227    }
    228    if (ctx->API == API_OPENGL) {
    229       _mesa_init_feedback_dispatch(exec);
    230    }
    231 
    232    if (ctx->API == API_OPENGL) {
    233       SET_FogCoordPointerEXT(exec, _mesa_FogCoordPointerEXT);
    234       SET_Fogf(exec, _mesa_Fogf);
    235       SET_Fogfv(exec, _mesa_Fogfv);
    236       SET_Fogi(exec, _mesa_Fogi);
    237       SET_Fogiv(exec, _mesa_Fogiv);
    238       SET_GetClipPlane(exec, _mesa_GetClipPlane);
    239    }
    240    SET_GetBooleanv(exec, _mesa_GetBooleanv);
    241    if (ctx->API != API_OPENGLES2) {
    242       SET_GetDoublev(exec, _mesa_GetDoublev);
    243    }
    244    SET_GetIntegerv(exec, _mesa_GetIntegerv);
    245    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    246       SET_GetLightfv(exec, _mesa_GetLightfv);
    247       SET_GetLightiv(exec, _mesa_GetLightiv);
    248       SET_GetMaterialfv(exec, _mesa_GetMaterialfv);
    249       SET_GetMaterialiv(exec, _mesa_GetMaterialiv);
    250       SET_GetPolygonStipple(exec, _mesa_GetPolygonStipple);
    251       SET_GetTexEnvfv(exec, _mesa_GetTexEnvfv);
    252       SET_GetTexEnviv(exec, _mesa_GetTexEnviv);
    253    }
    254    if (ctx->API != API_OPENGLES2) {
    255       SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv);
    256       SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv);
    257    }
    258    SET_GetTexParameterfv(exec, _mesa_GetTexParameterfv);
    259    SET_GetTexParameteriv(exec, _mesa_GetTexParameteriv);
    260    if (ctx->API != API_OPENGLES2) {
    261       SET_GetTexImage(exec, _mesa_GetTexImage);
    262    }
    263    SET_Hint(exec, _mesa_Hint);
    264    if (ctx->API == API_OPENGL) {
    265       SET_IndexMask(exec, _mesa_IndexMask);
    266    }
    267    SET_IsEnabled(exec, _mesa_IsEnabled);
    268    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    269       SET_LightModelf(exec, _mesa_LightModelf);
    270       SET_LightModelfv(exec, _mesa_LightModelfv);
    271       SET_LightModeli(exec, _mesa_LightModeli);
    272       SET_LightModeliv(exec, _mesa_LightModeliv);
    273       SET_Lightf(exec, _mesa_Lightf);
    274       SET_Lightfv(exec, _mesa_Lightfv);
    275       SET_Lighti(exec, _mesa_Lighti);
    276       SET_Lightiv(exec, _mesa_Lightiv);
    277       SET_LoadMatrixd(exec, _mesa_LoadMatrixd);
    278    }
    279 
    280    if (ctx->API == API_OPENGL) {
    281       _mesa_init_eval_dispatch(exec);
    282       SET_MultMatrixd(exec, _mesa_MultMatrixd);
    283       _mesa_init_pixel_dispatch(exec);
    284    }
    285 
    286    if (ctx->API != API_OPENGLES2) {
    287       SET_PixelStoref(exec, _mesa_PixelStoref);
    288 
    289       SET_PointSize(exec, _mesa_PointSize);
    290 
    291       SET_PolygonMode(exec, _mesa_PolygonMode);
    292    }
    293 
    294    SET_PolygonOffset(exec, _mesa_PolygonOffset);
    295    if (ctx->API == API_OPENGL) {
    296       SET_PolygonStipple(exec, _mesa_PolygonStipple);
    297       _mesa_init_attrib_dispatch(exec);
    298       _mesa_init_rastpos_dispatch(exec);
    299    }
    300 
    301    SET_ReadPixels(exec, _mesa_ReadPixels);
    302    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    303       SET_Rotated(exec, _mesa_Rotated);
    304       SET_Scaled(exec, _mesa_Scaled);
    305       SET_SecondaryColorPointerEXT(exec, _mesa_SecondaryColorPointerEXT);
    306       SET_TexEnvf(exec, _mesa_TexEnvf);
    307       SET_TexEnviv(exec, _mesa_TexEnviv);
    308    }
    309 
    310    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    311       _mesa_init_texgen_dispatch(exec);
    312    }
    313 
    314    if (ctx->API != API_OPENGLES2) {
    315       SET_TexImage1D(exec, _mesa_TexImage1D);
    316    }
    317    SET_TexParameterf(exec, _mesa_TexParameterf);
    318    SET_TexParameterfv(exec, _mesa_TexParameterfv);
    319    SET_TexParameteriv(exec, _mesa_TexParameteriv);
    320    if (ctx->API == API_OPENGL) {
    321       SET_Translated(exec, _mesa_Translated);
    322    }
    323 
    324    /* 1.1 */
    325    SET_BindTexture(exec, _mesa_BindTexture);
    326    SET_DeleteTextures(exec, _mesa_DeleteTextures);
    327    SET_GenTextures(exec, _mesa_GenTextures);
    328 #if _HAVE_FULL_GL
    329    if (ctx->API == API_OPENGL) {
    330       SET_AreTexturesResident(exec, _mesa_AreTexturesResident);
    331       SET_ColorPointer(exec, _mesa_ColorPointer);
    332    }
    333    if (ctx->API != API_OPENGLES2) {
    334       SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D);
    335       SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D);
    336       SET_TexSubImage1D(exec, _mesa_TexSubImage1D);
    337    }
    338 
    339    SET_CopyTexImage2D(exec, _mesa_CopyTexImage2D);
    340    SET_CopyTexSubImage2D(exec, _mesa_CopyTexSubImage2D);
    341    SET_TexSubImage2D(exec, _mesa_TexSubImage2D);
    342 
    343    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    344       SET_DisableClientState(exec, _mesa_DisableClientState);
    345       SET_EdgeFlagPointer(exec, _mesa_EdgeFlagPointer);
    346       SET_EnableClientState(exec, _mesa_EnableClientState);
    347       SET_GetPointerv(exec, _mesa_GetPointerv);
    348       SET_IndexPointer(exec, _mesa_IndexPointer);
    349       SET_InterleavedArrays(exec, _mesa_InterleavedArrays);
    350    }
    351    SET_IsTexture(exec, _mesa_IsTexture);
    352    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    353       SET_NormalPointer(exec, _mesa_NormalPointer);
    354       SET_PrioritizeTextures(exec, _mesa_PrioritizeTextures);
    355       SET_TexCoordPointer(exec, _mesa_TexCoordPointer);
    356       SET_VertexPointer(exec, _mesa_VertexPointer);
    357    }
    358 #endif
    359 
    360    /* 1.2 */
    361 #if _HAVE_FULL_GL
    362    SET_CopyTexSubImage3D(exec, _mesa_CopyTexSubImage3D);
    363    SET_TexImage3D(exec, _mesa_TexImage3D);
    364    SET_TexSubImage3D(exec, _mesa_TexSubImage3D);
    365 #endif
    366 
    367    /* OpenGL 1.2  GL_ARB_imaging */
    368    SET_BlendColor(exec, _mesa_BlendColor);
    369    SET_BlendEquation(exec, _mesa_BlendEquation);
    370    SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT);
    371 
    372    if (ctx->API == API_OPENGL) {
    373       _mesa_init_colortable_dispatch(exec);
    374       _mesa_init_convolve_dispatch(exec);
    375       _mesa_init_histogram_dispatch(exec);
    376    }
    377 
    378    /* OpenGL 2.0 */
    379    SET_StencilFuncSeparate(exec, _mesa_StencilFuncSeparate);
    380    SET_StencilMaskSeparate(exec, _mesa_StencilMaskSeparate);
    381    SET_StencilOpSeparate(exec, _mesa_StencilOpSeparate);
    382 
    383 #if FEATURE_ARB_shader_objects
    384    _mesa_init_shader_dispatch(ctx, exec);
    385    _mesa_init_shader_uniform_dispatch(ctx, exec);
    386 #endif
    387 
    388    /* 2. GL_EXT_blend_color */
    389 #if 0
    390 /*    SET_BlendColorEXT(exec, _mesa_BlendColorEXT); */
    391 #endif
    392 
    393    /* 3. GL_EXT_polygon_offset */
    394 #if _HAVE_FULL_GL
    395    if (ctx->API == API_OPENGL) {
    396       SET_PolygonOffsetEXT(exec, _mesa_PolygonOffsetEXT);
    397    }
    398 #endif
    399 
    400    /* 6. GL_EXT_texture3d */
    401 #if 0
    402 /*    SET_CopyTexSubImage3DEXT(exec, _mesa_CopyTexSubImage3D); */
    403 /*    SET_TexImage3DEXT(exec, _mesa_TexImage3DEXT); */
    404 /*    SET_TexSubImage3DEXT(exec, _mesa_TexSubImage3D); */
    405 #endif
    406 
    407    /* 11. GL_EXT_histogram */
    408 #if 0
    409    if (ctx->API == API_OPENGL) {
    410       SET_GetHistogramEXT(exec, _mesa_GetHistogram);
    411       SET_GetHistogramParameterfvEXT(exec, _mesa_GetHistogramParameterfv);
    412       SET_GetHistogramParameterivEXT(exec, _mesa_GetHistogramParameteriv);
    413       SET_GetMinmaxEXT(exec, _mesa_GetMinmax);
    414       SET_GetMinmaxParameterfvEXT(exec, _mesa_GetMinmaxParameterfv);
    415       SET_GetMinmaxParameterivEXT(exec, _mesa_GetMinmaxParameteriv);
    416    }
    417 #endif
    418 
    419    /* 14. SGI_color_table */
    420 #if 0
    421    if (ctx->API == API_OPENGL) {
    422       SET_ColorTableSGI(exec, _mesa_ColorTable);
    423       SET_ColorSubTableSGI(exec, _mesa_ColorSubTable);
    424       SET_GetColorTableSGI(exec, _mesa_GetColorTable);
    425       SET_GetColorTableParameterfvSGI(exec, _mesa_GetColorTableParameterfv);
    426       SET_GetColorTableParameterivSGI(exec, _mesa_GetColorTableParameteriv);
    427    }
    428 #endif
    429 
    430    /* 30. GL_EXT_vertex_array */
    431 #if _HAVE_FULL_GL
    432    if (ctx->API == API_OPENGL) {
    433       SET_ColorPointerEXT(exec, _mesa_ColorPointerEXT);
    434       SET_EdgeFlagPointerEXT(exec, _mesa_EdgeFlagPointerEXT);
    435       SET_IndexPointerEXT(exec, _mesa_IndexPointerEXT);
    436       SET_NormalPointerEXT(exec, _mesa_NormalPointerEXT);
    437       SET_TexCoordPointerEXT(exec, _mesa_TexCoordPointerEXT);
    438       SET_VertexPointerEXT(exec, _mesa_VertexPointerEXT);
    439    }
    440 #endif
    441 
    442    /* 37. GL_EXT_blend_minmax */
    443 #if 0
    444    SET_BlendEquationEXT(exec, _mesa_BlendEquationEXT);
    445 #endif
    446 
    447    /* 54. GL_EXT_point_parameters */
    448 #if _HAVE_FULL_GL
    449    if (ctx->API != API_OPENGLES2) {
    450       SET_PointParameterfEXT(exec, _mesa_PointParameterf);
    451       SET_PointParameterfvEXT(exec, _mesa_PointParameterfv);
    452    }
    453 #endif
    454 
    455    /* 95. GL_ARB_ES2_compatibility */
    456    SET_ClearDepthf(exec, _mesa_ClearDepthf);
    457    SET_DepthRangef(exec, _mesa_DepthRangef);
    458 
    459    /* 97. GL_EXT_compiled_vertex_array */
    460 #if _HAVE_FULL_GL
    461    if (ctx->API == API_OPENGL) {
    462       SET_LockArraysEXT(exec, _mesa_LockArraysEXT);
    463       SET_UnlockArraysEXT(exec, _mesa_UnlockArraysEXT);
    464    }
    465 #endif
    466 
    467    /* 148. GL_EXT_multi_draw_arrays */
    468 #if _HAVE_FULL_GL
    469    SET_MultiDrawArraysEXT(exec, _mesa_MultiDrawArraysEXT);
    470 #endif
    471 
    472    /* 173. GL_INGR_blend_func_separate */
    473 #if _HAVE_FULL_GL
    474    SET_BlendFuncSeparateEXT(exec, _mesa_BlendFuncSeparateEXT);
    475 #endif
    476 
    477    /* 196. GL_MESA_resize_buffers */
    478 #if _HAVE_FULL_GL
    479    if (_mesa_is_desktop_gl(ctx)) {
    480       SET_ResizeBuffersMESA(exec, _mesa_ResizeBuffersMESA);
    481    }
    482 #endif
    483 
    484    /* 197. GL_MESA_window_pos */
    485    /* part of _mesa_init_rastpos_dispatch(exec); */
    486 
    487    /* 200. GL_IBM_multimode_draw_arrays */
    488 #if _HAVE_FULL_GL
    489    if (ctx->API != API_OPENGLES2) {
    490       SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM);
    491       SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM);
    492    }
    493 #endif
    494 
    495    /* 233. GL_NV_vertex_program */
    496 #if FEATURE_NV_vertex_program
    497    if (ctx->API == API_OPENGL) {
    498       SET_BindProgramNV(exec, _mesa_BindProgram);
    499       SET_DeleteProgramsNV(exec, _mesa_DeletePrograms);
    500       SET_ExecuteProgramNV(exec, _mesa_ExecuteProgramNV);
    501       SET_GenProgramsNV(exec, _mesa_GenPrograms);
    502       SET_AreProgramsResidentNV(exec, _mesa_AreProgramsResidentNV);
    503       SET_RequestResidentProgramsNV(exec, _mesa_RequestResidentProgramsNV);
    504       SET_GetProgramParameterfvNV(exec, _mesa_GetProgramParameterfvNV);
    505       SET_GetProgramParameterdvNV(exec, _mesa_GetProgramParameterdvNV);
    506       SET_GetProgramivNV(exec, _mesa_GetProgramivNV);
    507       SET_GetProgramStringNV(exec, _mesa_GetProgramStringNV);
    508       SET_GetTrackMatrixivNV(exec, _mesa_GetTrackMatrixivNV);
    509       SET_GetVertexAttribdvNV(exec, _mesa_GetVertexAttribdvNV);
    510       SET_GetVertexAttribfvNV(exec, _mesa_GetVertexAttribfvNV);
    511       SET_GetVertexAttribivNV(exec, _mesa_GetVertexAttribivNV);
    512       SET_IsProgramNV(exec, _mesa_IsProgramARB);
    513       SET_LoadProgramNV(exec, _mesa_LoadProgramNV);
    514       SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB); /* alias to ProgramParameter4dNV */
    515       SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB);  /* alias to ProgramParameter4dvNV */
    516       SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB);  /* alias to ProgramParameter4fNV */
    517       SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB);  /* alias to ProgramParameter4fvNV */
    518       SET_ProgramParameters4dvNV(exec, _mesa_ProgramParameters4dvNV);
    519       SET_ProgramParameters4fvNV(exec, _mesa_ProgramParameters4fvNV);
    520       SET_TrackMatrixNV(exec, _mesa_TrackMatrixNV);
    521       SET_VertexAttribPointerNV(exec, _mesa_VertexAttribPointerNV);
    522       /* glVertexAttrib*NV functions handled in api_loopback.c */
    523    }
    524 #endif
    525    SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV);
    526 
    527    /* 273. GL_APPLE_vertex_array_object */
    528    if (ctx->API == API_OPENGL) {
    529       SET_BindVertexArrayAPPLE(exec, _mesa_BindVertexArrayAPPLE);
    530       SET_GenVertexArraysAPPLE(exec, _mesa_GenVertexArraysAPPLE);
    531    }
    532    /* Reused by ARB_vertex_array_object / OES_vertex_array_object */
    533    SET_DeleteVertexArraysAPPLE(exec, _mesa_DeleteVertexArraysAPPLE);
    534    SET_IsVertexArrayAPPLE(exec, _mesa_IsVertexArrayAPPLE);
    535 
    536    /* 282. GL_NV_fragment_program */
    537 #if FEATURE_NV_fragment_program
    538    if (ctx->API == API_OPENGL) {
    539       SET_ProgramNamedParameter4fNV(exec, _mesa_ProgramNamedParameter4fNV);
    540       SET_ProgramNamedParameter4dNV(exec, _mesa_ProgramNamedParameter4dNV);
    541       SET_ProgramNamedParameter4fvNV(exec, _mesa_ProgramNamedParameter4fvNV);
    542       SET_ProgramNamedParameter4dvNV(exec, _mesa_ProgramNamedParameter4dvNV);
    543       SET_GetProgramNamedParameterfvNV(exec, _mesa_GetProgramNamedParameterfvNV);
    544       SET_GetProgramNamedParameterdvNV(exec, _mesa_GetProgramNamedParameterdvNV);
    545       SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
    546       SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
    547       SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
    548       SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
    549       SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
    550       SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
    551    }
    552 #endif
    553 
    554    /* 262. GL_NV_point_sprite */
    555 #if _HAVE_FULL_GL
    556    if (_mesa_is_desktop_gl(ctx)) {
    557       SET_PointParameteriNV(exec, _mesa_PointParameteri);
    558       SET_PointParameterivNV(exec, _mesa_PointParameteriv);
    559    }
    560 #endif
    561 
    562    /* 268. GL_EXT_stencil_two_side */
    563 #if _HAVE_FULL_GL
    564    if (ctx->API == API_OPENGL) {
    565       SET_ActiveStencilFaceEXT(exec, _mesa_ActiveStencilFaceEXT);
    566    }
    567 #endif
    568 
    569    /* 285. GL_NV_primitive_restart */
    570    if (ctx->API != API_OPENGLES2) {
    571       SET_PrimitiveRestartIndexNV(exec, _mesa_PrimitiveRestartIndex);
    572    }
    573 
    574    /* ???. GL_EXT_depth_bounds_test */
    575    if (ctx->API != API_OPENGLES2) {
    576       SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT);
    577    }
    578 
    579    /* 352. GL_EXT_transform_feedback */
    580    /* ARB 93. GL_ARB_transform_feedback2 */
    581    if (ctx->API != API_OPENGLES2) {
    582       _mesa_init_transform_feedback_dispatch(exec);
    583    }
    584 
    585    /* 364. GL_EXT_provoking_vertex */
    586    if (ctx->API != API_OPENGLES2) {
    587       SET_ProvokingVertexEXT(exec, _mesa_ProvokingVertexEXT);
    588    }
    589 
    590    /* ARB 1. GL_ARB_multitexture */
    591 #if _HAVE_FULL_GL
    592    SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB);
    593    if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
    594       SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB);
    595    }
    596 #endif
    597 
    598    /* ARB 3. GL_ARB_transpose_matrix */
    599 #if _HAVE_FULL_GL
    600    if (ctx->API == API_OPENGL) {
    601       SET_LoadTransposeMatrixdARB(exec, _mesa_LoadTransposeMatrixdARB);
    602       SET_LoadTransposeMatrixfARB(exec, _mesa_LoadTransposeMatrixfARB);
    603       SET_MultTransposeMatrixdARB(exec, _mesa_MultTransposeMatrixdARB);
    604       SET_MultTransposeMatrixfARB(exec, _mesa_MultTransposeMatrixfARB);
    605    }
    606 #endif
    607 
    608    /* ARB 5. GL_ARB_multisample */
    609 #if _HAVE_FULL_GL
    610    SET_SampleCoverageARB(exec, _mesa_SampleCoverageARB);
    611 #endif
    612 
    613    /* ARB 12. GL_ARB_texture_compression */
    614 #if _HAVE_FULL_GL
    615    if (ctx->API != API_OPENGLES2) {
    616       SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB);
    617       SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB);
    618       SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB);
    619    }
    620 
    621    SET_CompressedTexImage3DARB(exec, _mesa_CompressedTexImage3DARB);
    622    SET_CompressedTexImage2DARB(exec, _mesa_CompressedTexImage2DARB);
    623    SET_CompressedTexSubImage3DARB(exec, _mesa_CompressedTexSubImage3DARB);
    624    SET_CompressedTexSubImage2DARB(exec, _mesa_CompressedTexSubImage2DARB);
    625 
    626    /* ARB 104. GL_ARB_robustness */
    627    if (ctx->API != API_OPENGLES2) {
    628       SET_GetnCompressedTexImageARB(exec, _mesa_GetnCompressedTexImageARB);
    629    }
    630 #endif
    631 
    632    /* ARB 14. GL_ARB_point_parameters */
    633    /* reuse EXT_point_parameters functions */
    634 
    635    /* ARB 26. GL_ARB_vertex_program */
    636    /* ARB 27. GL_ARB_fragment_program */
    637 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
    638    /* glVertexAttrib1sARB aliases glVertexAttrib1sNV */
    639    /* glVertexAttrib1fARB aliases glVertexAttrib1fNV */
    640    /* glVertexAttrib1dARB aliases glVertexAttrib1dNV */
    641    /* glVertexAttrib2sARB aliases glVertexAttrib2sNV */
    642    /* glVertexAttrib2fARB aliases glVertexAttrib2fNV */
    643    /* glVertexAttrib2dARB aliases glVertexAttrib2dNV */
    644    /* glVertexAttrib3sARB aliases glVertexAttrib3sNV */
    645    /* glVertexAttrib3fARB aliases glVertexAttrib3fNV */
    646    /* glVertexAttrib3dARB aliases glVertexAttrib3dNV */
    647    /* glVertexAttrib4sARB aliases glVertexAttrib4sNV */
    648    /* glVertexAttrib4fARB aliases glVertexAttrib4fNV */
    649    /* glVertexAttrib4dARB aliases glVertexAttrib4dNV */
    650    /* glVertexAttrib4NubARB aliases glVertexAttrib4NubNV */
    651    /* glVertexAttrib1svARB aliases glVertexAttrib1svNV */
    652    /* glVertexAttrib1fvARB aliases glVertexAttrib1fvNV */
    653    /* glVertexAttrib1dvARB aliases glVertexAttrib1dvNV */
    654    /* glVertexAttrib2svARB aliases glVertexAttrib2svNV */
    655    /* glVertexAttrib2fvARB aliases glVertexAttrib2fvNV */
    656    /* glVertexAttrib2dvARB aliases glVertexAttrib2dvNV */
    657    /* glVertexAttrib3svARB aliases glVertexAttrib3svNV */
    658    /* glVertexAttrib3fvARB aliases glVertexAttrib3fvNV */
    659    /* glVertexAttrib3dvARB aliases glVertexAttrib3dvNV */
    660    /* glVertexAttrib4svARB aliases glVertexAttrib4svNV */
    661    /* glVertexAttrib4fvARB aliases glVertexAttrib4fvNV */
    662    /* glVertexAttrib4dvARB aliases glVertexAttrib4dvNV */
    663    /* glVertexAttrib4NubvARB aliases glVertexAttrib4NubvNV */
    664    /* glVertexAttrib4bvARB handled in api_loopback.c */
    665    /* glVertexAttrib4ivARB handled in api_loopback.c */
    666    /* glVertexAttrib4ubvARB handled in api_loopback.c */
    667    /* glVertexAttrib4usvARB handled in api_loopback.c */
    668    /* glVertexAttrib4uivARB handled in api_loopback.c */
    669    /* glVertexAttrib4NbvARB handled in api_loopback.c */
    670    /* glVertexAttrib4NsvARB handled in api_loopback.c */
    671    /* glVertexAttrib4NivARB handled in api_loopback.c */
    672    /* glVertexAttrib4NusvARB handled in api_loopback.c */
    673    /* glVertexAttrib4NuivARB handled in api_loopback.c */
    674    SET_VertexAttribPointerARB(exec, _mesa_VertexAttribPointerARB);
    675    SET_EnableVertexAttribArrayARB(exec, _mesa_EnableVertexAttribArrayARB);
    676    SET_DisableVertexAttribArrayARB(exec, _mesa_DisableVertexAttribArrayARB);
    677    if (ctx->API != API_OPENGLES2) {
    678       SET_ProgramStringARB(exec, _mesa_ProgramStringARB);
    679       /* glBindProgramARB aliases glBindProgramNV */
    680       /* glDeleteProgramsARB aliases glDeleteProgramsNV */
    681       /* glGenProgramsARB aliases glGenProgramsNV */
    682       /* glIsProgramARB aliases glIsProgramNV */
    683       SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB);
    684    }
    685 
    686    SET_GetVertexAttribfvARB(exec, _mesa_GetVertexAttribfvARB);
    687    SET_GetVertexAttribivARB(exec, _mesa_GetVertexAttribivARB);
    688    /* glGetVertexAttribPointervARB aliases glGetVertexAttribPointervNV */
    689    if (ctx->API == API_OPENGL) {
    690       SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB);
    691       SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB);
    692       SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB);
    693       SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB);
    694       SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
    695       SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
    696       SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
    697       SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
    698       SET_GetProgramEnvParameterdvARB(exec, _mesa_GetProgramEnvParameterdvARB);
    699       SET_GetProgramEnvParameterfvARB(exec, _mesa_GetProgramEnvParameterfvARB);
    700       SET_GetProgramivARB(exec, _mesa_GetProgramivARB);
    701       SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
    702       SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
    703       SET_GetProgramStringARB(exec, _mesa_GetProgramStringARB);
    704    }
    705 #endif
    706 
    707    /* ARB 28. GL_ARB_vertex_buffer_object */
    708    _mesa_init_bufferobj_dispatch(ctx, exec);
    709 
    710    /* ARB 29. GL_ARB_occlusion_query */
    711    if (ctx->API != API_OPENGLES2) {
    712       _mesa_init_queryobj_dispatch(exec);
    713    }
    714 
    715    /* ARB 37. GL_ARB_draw_buffers */
    716 #if FEATURE_draw_read_buffer
    717    SET_DrawBuffersARB(exec, _mesa_DrawBuffersARB);
    718 #endif
    719 
    720    /* ARB 66. GL_ARB_sync */
    721    if (ctx->API != API_OPENGLES2) {
    722       _mesa_init_sync_dispatch(exec);
    723    }
    724 
    725    /* ARB 104. GL_ARB_debug_output */
    726    if (ctx->API != API_OPENGLES2) {
    727       _mesa_init_errors_dispatch(exec);
    728    }
    729 
    730    /* ARB 105. GL_ARB_robustness */
    731    if (ctx->API != API_OPENGLES2) {
    732       SET_GetGraphicsResetStatusARB(exec, _mesa_GetGraphicsResetStatusARB);
    733       SET_GetnPolygonStippleARB(exec, _mesa_GetnPolygonStippleARB);
    734       SET_GetnTexImageARB(exec, _mesa_GetnTexImageARB);
    735       SET_ReadnPixelsARB(exec, _mesa_ReadnPixelsARB);
    736    }
    737 
    738   /* GL_ATI_fragment_shader */
    739    if (ctx->API == API_OPENGL) {
    740       _mesa_init_ati_fragment_shader_dispatch(exec);
    741    }
    742 
    743   /* GL_ATI_envmap_bumpmap */
    744    if (ctx->API == API_OPENGL) {
    745       SET_GetTexBumpParameterivATI(exec, _mesa_GetTexBumpParameterivATI);
    746       SET_GetTexBumpParameterfvATI(exec, _mesa_GetTexBumpParameterfvATI);
    747       SET_TexBumpParameterivATI(exec, _mesa_TexBumpParameterivATI);
    748       SET_TexBumpParameterfvATI(exec, _mesa_TexBumpParameterfvATI);
    749    }
    750 
    751 #if FEATURE_EXT_framebuffer_object
    752    SET_IsRenderbufferEXT(exec, _mesa_IsRenderbufferEXT);
    753    SET_BindRenderbufferEXT(exec, _mesa_BindRenderbufferEXT);
    754    SET_DeleteRenderbuffersEXT(exec, _mesa_DeleteRenderbuffersEXT);
    755    SET_GenRenderbuffersEXT(exec, _mesa_GenRenderbuffersEXT);
    756    SET_RenderbufferStorageEXT(exec, _mesa_RenderbufferStorageEXT);
    757    SET_GetRenderbufferParameterivEXT(exec, _mesa_GetRenderbufferParameterivEXT);
    758    SET_IsFramebufferEXT(exec, _mesa_IsFramebufferEXT);
    759    SET_BindFramebufferEXT(exec, _mesa_BindFramebufferEXT);
    760    SET_DeleteFramebuffersEXT(exec, _mesa_DeleteFramebuffersEXT);
    761    SET_GenFramebuffersEXT(exec, _mesa_GenFramebuffersEXT);
    762    SET_CheckFramebufferStatusEXT(exec, _mesa_CheckFramebufferStatusEXT);
    763    if (ctx->API != API_OPENGLES2) {
    764       SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT);
    765    }
    766    SET_FramebufferTexture2DEXT(exec, _mesa_FramebufferTexture2DEXT);
    767    SET_FramebufferTexture3DEXT(exec, _mesa_FramebufferTexture3DEXT);
    768    SET_FramebufferRenderbufferEXT(exec, _mesa_FramebufferRenderbufferEXT);
    769    SET_GetFramebufferAttachmentParameterivEXT(exec, _mesa_GetFramebufferAttachmentParameterivEXT);
    770    SET_GenerateMipmapEXT(exec, _mesa_GenerateMipmapEXT);
    771 #endif
    772 
    773 #if FEATURE_EXT_framebuffer_blit
    774    if (ctx->API != API_OPENGLES2) {
    775       SET_BlitFramebufferEXT(exec, _mesa_BlitFramebufferEXT);
    776    }
    777 #endif
    778 
    779    /* GL_EXT_gpu_program_parameters */
    780 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
    781    if (ctx->API == API_OPENGL) {
    782       SET_ProgramEnvParameters4fvEXT(exec, _mesa_ProgramEnvParameters4fvEXT);
    783       SET_ProgramLocalParameters4fvEXT(exec, _mesa_ProgramLocalParameters4fvEXT);
    784    }
    785 #endif
    786 
    787    /* GL_MESA_texture_array / GL_EXT_texture_array */
    788 #if FEATURE_EXT_framebuffer_object
    789    if (ctx->API != API_OPENGLES2) {
    790       SET_FramebufferTextureLayerEXT(exec, _mesa_FramebufferTextureLayerEXT);
    791    }
    792 #endif
    793 
    794    /* GL_ATI_separate_stencil */
    795    if (ctx->API == API_OPENGL) {
    796       SET_StencilFuncSeparateATI(exec, _mesa_StencilFuncSeparateATI);
    797    }
    798 
    799 #if FEATURE_ARB_framebuffer_object
    800    /* The ARB_fbo functions are the union of
    801     * GL_EXT_fbo, GL_EXT_framebuffer_blit, GL_EXT_texture_array
    802     */
    803    if (ctx->API != API_OPENGLES2) {
    804       SET_RenderbufferStorageMultisample(exec, _mesa_RenderbufferStorageMultisample);
    805    }
    806 #endif
    807 
    808 #if FEATURE_ARB_map_buffer_range
    809    if (ctx->API != API_OPENGLES2) {
    810       SET_MapBufferRange(exec, _mesa_MapBufferRange);
    811       SET_FlushMappedBufferRange(exec, _mesa_FlushMappedBufferRange);
    812    }
    813 #endif
    814 
    815    /* GL_ARB_copy_buffer */
    816    if (ctx->API != API_OPENGLES2) {
    817       SET_CopyBufferSubData(exec, _mesa_CopyBufferSubData);
    818    }
    819 
    820    /* GL_ARB_vertex_array_object / GL_OES_vertex_array_object */
    821    SET_BindVertexArray(exec, _mesa_BindVertexArray);
    822    SET_GenVertexArrays(exec, _mesa_GenVertexArrays);
    823 
    824    /* GL_EXT_draw_buffers2 */
    825    if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
    826       SET_ColorMaskIndexedEXT(exec, _mesa_ColorMaskIndexed);
    827       SET_GetBooleanIndexedvEXT(exec, _mesa_GetBooleanIndexedv);
    828       SET_GetIntegerIndexedvEXT(exec, _mesa_GetIntegerIndexedv);
    829       SET_EnableIndexedEXT(exec, _mesa_EnableIndexed);
    830       SET_DisableIndexedEXT(exec, _mesa_DisableIndexed);
    831       SET_IsEnabledIndexedEXT(exec, _mesa_IsEnabledIndexed);
    832    }
    833 
    834    /* GL_NV_conditional_render */
    835    if (ctx->API != API_OPENGLES2) {
    836       SET_BeginConditionalRenderNV(exec, _mesa_BeginConditionalRender);
    837       SET_EndConditionalRenderNV(exec, _mesa_EndConditionalRender);
    838    }
    839 
    840 #if FEATURE_OES_EGL_image
    841    SET_EGLImageTargetTexture2DOES(exec, _mesa_EGLImageTargetTexture2DOES);
    842    SET_EGLImageTargetRenderbufferStorageOES(exec, _mesa_EGLImageTargetRenderbufferStorageOES);
    843 #endif
    844 
    845 #if FEATURE_APPLE_object_purgeable
    846    if (ctx->API != API_OPENGLES2) {
    847       SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE);
    848       SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE);
    849       SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE);
    850    }
    851 #endif
    852 
    853 #if FEATURE_ARB_geometry_shader4
    854    if (ctx->API != API_OPENGLES2) {
    855       SET_FramebufferTextureARB(exec, _mesa_FramebufferTextureARB);
    856       SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB);
    857    }
    858 #endif
    859 
    860    if (ctx->API != API_OPENGLES2) {
    861       SET_ClampColorARB(exec, _mesa_ClampColorARB);
    862    }
    863 
    864    /* GL_EXT_texture_integer */
    865    if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
    866       SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT);
    867       SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT);
    868    }
    869    if (ctx->API != API_OPENGLES2) {
    870       SET_GetTexParameterIivEXT(exec, _mesa_GetTexParameterIiv);
    871       SET_GetTexParameterIuivEXT(exec, _mesa_GetTexParameterIuiv);
    872       SET_TexParameterIivEXT(exec, _mesa_TexParameterIiv);
    873       SET_TexParameterIuivEXT(exec, _mesa_TexParameterIuiv);
    874    }
    875 
    876    /* GL_EXT_gpu_shader4 / OpenGL 3.0 */
    877    if (ctx->API != API_OPENGLES2) {
    878       SET_GetVertexAttribIivEXT(exec, _mesa_GetVertexAttribIiv);
    879       SET_GetVertexAttribIuivEXT(exec, _mesa_GetVertexAttribIuiv);
    880       SET_VertexAttribIPointerEXT(exec, _mesa_VertexAttribIPointer);
    881    }
    882 
    883    /* GL 3.0 (functions not covered by other extensions) */
    884    if (ctx->API != API_OPENGLES2) {
    885       SET_ClearBufferiv(exec, _mesa_ClearBufferiv);
    886       SET_ClearBufferuiv(exec, _mesa_ClearBufferuiv);
    887       SET_ClearBufferfv(exec, _mesa_ClearBufferfv);
    888       SET_ClearBufferfi(exec, _mesa_ClearBufferfi);
    889       SET_GetStringi(exec, _mesa_GetStringi);
    890       SET_ClampColor(exec, _mesa_ClampColorARB);
    891    }
    892 
    893    /* GL_ARB_instanced_arrays */
    894    if (ctx->API != API_OPENGLES2) {
    895       SET_VertexAttribDivisorARB(exec, _mesa_VertexAttribDivisor);
    896    }
    897 
    898    /* GL_ARB_draw_buffer_blend */
    899    if (ctx->API != API_OPENGLES2) {
    900       SET_BlendFunciARB(exec, _mesa_BlendFunci);
    901       SET_BlendFuncSeparateiARB(exec, _mesa_BlendFuncSeparatei);
    902       SET_BlendEquationiARB(exec, _mesa_BlendEquationi);
    903       SET_BlendEquationSeparateiARB(exec, _mesa_BlendEquationSeparatei);
    904    }
    905 
    906    /* GL_NV_texture_barrier */
    907    if (ctx->API != API_OPENGLES2) {
    908       SET_TextureBarrierNV(exec, _mesa_TextureBarrierNV);
    909    }
    910 
    911    /* GL_ARB_texture_buffer_object */
    912    if (ctx->API != API_OPENGLES2) {
    913       SET_TexBufferARB(exec, _mesa_TexBuffer);
    914    }
    915 
    916    /* GL_ARB_texture_storage */
    917    if (ctx->API != API_OPENGLES2) {
    918       SET_TexStorage1D(exec, _mesa_TexStorage1D);
    919       SET_TextureStorage1DEXT(exec, _mesa_TextureStorage1DEXT);
    920    }
    921    if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
    922       SET_TexStorage2D(exec, _mesa_TexStorage2D);
    923       SET_TexStorage3D(exec, _mesa_TexStorage3D);
    924       SET_TextureStorage2DEXT(exec, _mesa_TextureStorage2DEXT);
    925       SET_TextureStorage3DEXT(exec, _mesa_TextureStorage3DEXT);
    926    }
    927 
    928 #if FEATURE_ARB_sampler_objects
    929    if (ctx->API != API_OPENGLES2) {
    930       _mesa_init_sampler_object_dispatch(exec);
    931    }
    932 #endif
    933 
    934    if (_mesa_is_desktop_gl(ctx)) {
    935       SET_InvalidateTexSubImage(exec, _mesa_InvalidateTexSubImage);
    936       SET_InvalidateTexImage(exec, _mesa_InvalidateTexImage);
    937    }
    938 
    939    if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
    940       SET_InvalidateSubFramebuffer(exec, _mesa_InvalidateSubFramebuffer);
    941       SET_InvalidateFramebuffer(exec, _mesa_InvalidateFramebuffer);
    942    }
    943 
    944    return exec;
    945 }
    946 
    947 #endif /* FEATURE_GL || FEATURE_ES2 */
    948