1c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/*
2c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Mesa 3-D graphics library
3c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Version:  7.1
4c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
5c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
7c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
8c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * copy of this software and associated documentation files (the "Software"),
9c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * to deal in the Software without restriction, including without limitation
10c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
12c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Software is furnished to do so, subject to the following conditions:
13c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
14c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * The above copyright notice and this permission notice shall be included
15c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * in all copies or substantial portions of the Software.
16c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
17c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul */
24c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
25c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
26c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/**
27c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * \file api_exec.c
28c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Initialize dispatch table with the immidiate mode functions.
29c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul */
30c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
31c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
32f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul#include "mfeatures.h"
33c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "accum.h"
34c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "api_loopback.h"
35c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "api_exec.h"
36c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
37412cddf954d35282f913d01d83d3cdb45cf0e2d0Brian Paul#include "arbprogram.h"
38c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
3970c8d29b6bb3214966892d51e6b2befa7040622dBrian Paul#include "atifragshader.h"
40c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "attrib.h"
41c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "blend.h"
42c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "bufferobj.h"
43c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "arrayobj.h"
4434a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#if FEATURE_draw_read_buffer
45c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "buffers.h"
4634a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#endif
475ab1d0aceaffbf872d7f8ebea2a6655e25bf2390Brian Paul#include "clear.h"
48c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "clip.h"
49c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "colortab.h"
50ff3a52643d323626f32a9f1c14464a9501e6494dBrian Paul#include "condrender.h"
51c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "context.h"
52c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "convolve.h"
53c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "depth.h"
54c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "dlist.h"
55c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "drawpix.h"
56d25080074f2da1ebc47cdfb5c3491740a57ec03fChia-I Wu#include "rastpos.h"
57c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "enable.h"
585dd750d685d3f80b3783b1205f6727cb867c049anobled#include "errors.h"
59c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "eval.h"
60c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "get.h"
61c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "feedback.h"
62c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "fog.h"
63c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_EXT_framebuffer_object
64c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "fbobject.h"
65c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
66c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "framebuffer.h"
67c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "hint.h"
68c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "histogram.h"
69c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "imports.h"
70c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "light.h"
71c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "lines.h"
72c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "matrix.h"
73c132e2b1db855b3c33d8b879c4a986011d631d43Brian Paul#include "multisample.h"
74c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "pixel.h"
75c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "pixelstore.h"
76c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "points.h"
77c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "polygon.h"
78c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "queryobj.h"
79c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "readpix.h"
8034a5d3b9f4740601708c82093e2114356d749e65Brian Paul#if FEATURE_ARB_sampler_objects
8134a5d3b9f4740601708c82093e2114356d749e65Brian Paul#include "samplerobj.h"
8234a5d3b9f4740601708c82093e2114356d749e65Brian Paul#endif
8355e341c4c2e5a6f3475a8a3e6389b904f99a6d1aBrian Paul#include "scissor.h"
84c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "stencil.h"
8511ebfd22bb451f86a492254b77c90aeb011f8d9aBrian Paul#include "texenv.h"
86ba2a55ccd61d9fa5565640faefb64fd6fb0e70abBrian Paul#include "texgetimage.h"
87c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "teximage.h"
8810db6c2d81506bb8cc5165d07b01e93d3830978dBrian Paul#include "texgen.h"
89c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "texobj.h"
90ae1fdc15238498bf025d0f0be7337e2f9dda455fBrian Paul#include "texparam.h"
91c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "texstate.h"
922ace9ffc8e2354acce4dc45d425d71c3f1a349b2Brian Paul#include "texstorage.h"
93867f9b07d42c2b49ddb9e5bb17f0ac5c4a80d8acMarek Olšák#include "texturebarrier.h"
94808c424b673de109babc608ec74b34f0738ed906Brian Paul#include "transformfeedback.h"
95c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "mtypes.h"
96c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#include "varray.h"
972c3785159574e6c8640b6af3ce2ef561d095f324Brian Paul#include "viewport.h"
989674929bce0c0ea4862b468d0a1a7e58b2664049Nicolas Kaiser#if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
997936e06657bc43de80ae4f56ee9db956e193d880Brian Paul#include "nvprogram.h"
100c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
101c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_ARB_shader_objects
102a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul#include "shaderapi.h"
103936605fc8a69f67de323e5ede60c2f1373bfcafeBrian Paul#include "uniforms.h"
104c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
105f37070bab6af350caec905ea7658e9241042b6ccIan Romanick#include "syncobj.h"
1062cf44390d1e819f23e1d7ceb3199276c9148c647Chia-I Wu#include "main/dispatch.h"
107c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
108cc289e22213c5f5fe72602ce81db992bc8f7b1adChia-I Wu
109a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick#if FEATURE_GL || FEATURE_ES2
110cc289e22213c5f5fe72602ce81db992bc8f7b1adChia-I Wu
111cc289e22213c5f5fe72602ce81db992bc8f7b1adChia-I Wu
112c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/**
113c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Initialize a dispatch table with pointers to Mesa's immediate-mode
114c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * commands.
115c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
116c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * Pointers to glBegin()/glEnd() object commands and a few others
117c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * are provided via the GLvertexformat interface.
118c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul *
119c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * \param ctx  GL context to which \c exec belongs.
120c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul * \param exec dispatch table.
121c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul */
122fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsbergstruct _glapi_table *
1233d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen_mesa_create_exec_table(struct gl_context *ctx)
124c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul{
125fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg   struct _glapi_table *exec;
126fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg
127b762db62c2972506fa78a5ed72f796113fc9b0d1Chia-I Wu   exec = _mesa_alloc_dispatch_table(_gloffset_COUNT);
128fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg   if (exec == NULL)
129fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg      return NULL;
130fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg
131c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
1320dc989ea5b54a35bbafb00a0d40a799f8cdf0facIan Romanick   _mesa_loopback_init_api_table(ctx, exec);
133c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
134c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
135c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* load the dispatch slots we understand */
136a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1373d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_AlphaFunc(exec, _mesa_AlphaFunc);
1383d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
1393d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen
140c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendFunc(exec, _mesa_BlendFunc);
141c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Clear(exec, _mesa_Clear);
142c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_ClearColor(exec, _mesa_ClearColor);
143c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_ClearStencil(exec, _mesa_ClearStencil);
144c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_ColorMask(exec, _mesa_ColorMask);
145c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CullFace(exec, _mesa_CullFace);
146c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Disable(exec, _mesa_Disable);
14734a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#if FEATURE_draw_read_buffer
148a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API == API_OPENGL || ctx->API == API_OPENGL_CORE)
149a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_DrawBuffer(exec, _mesa_DrawBuffer);
150a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
15134a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell   SET_ReadBuffer(exec, _mesa_ReadBuffer);
15234a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#endif
153c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Enable(exec, _mesa_Enable);
154c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Finish(exec, _mesa_Finish);
155c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Flush(exec, _mesa_Flush);
156c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_FrontFace(exec, _mesa_FrontFace);
157a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1583d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Frustum(exec, _mesa_Frustum);
1593d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
160c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetError(exec, _mesa_GetError);
161c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetFloatv(exec, _mesa_GetFloatv);
162c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetString(exec, _mesa_GetString);
1637e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
1643d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LineStipple(exec, _mesa_LineStipple);
1653d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
166c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_LineWidth(exec, _mesa_LineWidth);
167a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1683d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LoadIdentity(exec, _mesa_LoadIdentity);
1693d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LoadMatrixf(exec, _mesa_LoadMatrixf);
1703d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
171a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
172a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_LogicOp(exec, _mesa_LogicOp);
173a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
174a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1753d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_MatrixMode(exec, _mesa_MatrixMode);
1763d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_MultMatrixf(exec, _mesa_MultMatrixf);
1773d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Ortho(exec, _mesa_Ortho);
1783d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
179c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_PixelStorei(exec, _mesa_PixelStorei);
180a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1813d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_PopMatrix(exec, _mesa_PopMatrix);
1823d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_PushMatrix(exec, _mesa_PushMatrix);
1833d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Rotatef(exec, _mesa_Rotatef);
1843d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Scalef(exec, _mesa_Scalef);
1853d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
186c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Scissor(exec, _mesa_Scissor);
187a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1883d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ShadeModel(exec, _mesa_ShadeModel);
1893d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
190c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilFunc(exec, _mesa_StencilFunc);
191c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilMask(exec, _mesa_StencilMask);
192c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilOp(exec, _mesa_StencilOp);
193a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
1943d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexEnvfv(exec, _mesa_TexEnvfv);
1953d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexEnvi(exec, _mesa_TexEnvi);
1963d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
197c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexImage2D(exec, _mesa_TexImage2D);
198c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexParameteri(exec, _mesa_TexParameteri);
199a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
2003d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Translatef(exec, _mesa_Translatef);
2013d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
202c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Viewport(exec, _mesa_Viewport);
203a833ff0f53da6e365d917bb0081d909a809b6ec1Chia-I Wu
2047e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2053d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      _mesa_init_accum_dispatch(exec);
2063d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      _mesa_init_dlist_dispatch(exec);
2073d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
208a833ff0f53da6e365d917bb0081d909a809b6ec1Chia-I Wu
209961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick   if (ctx->API != API_OPENGLES2) {
210961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick      SET_ClearDepth(exec, _mesa_ClearDepth);
211961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick   }
212961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick
2137e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2143d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ClearIndex(exec, _mesa_ClearIndex);
2153d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ClipPlane(exec, _mesa_ClipPlane);
2163d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ColorMaterial(exec, _mesa_ColorMaterial);
2173d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
218c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DepthFunc(exec, _mesa_DepthFunc);
219c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DepthMask(exec, _mesa_DepthMask);
220961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick
221961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick   if (ctx->API != API_OPENGLES2) {
222961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick      SET_DepthRange(exec, _mesa_DepthRange);
223961567d0fe29915b9b5ed0be9970d180a18eea4eIan Romanick   }
22467a2a4e901367418a5c28e7b0963bf9c0c4762baChia-I Wu
225a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2 && ctx->API != API_OPENGL_CORE) {
226a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_drawpix_dispatch(exec);
227a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
2287e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2297e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_feedback_dispatch(exec);
2307e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
23167a2a4e901367418a5c28e7b0963bf9c0c4762baChia-I Wu
2327e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2333d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_FogCoordPointerEXT(exec, _mesa_FogCoordPointerEXT);
2343d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Fogf(exec, _mesa_Fogf);
2353d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Fogfv(exec, _mesa_Fogfv);
2363d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Fogi(exec, _mesa_Fogi);
2373d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Fogiv(exec, _mesa_Fogiv);
2383d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetClipPlane(exec, _mesa_GetClipPlane);
2393d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
240c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetBooleanv(exec, _mesa_GetBooleanv);
241f57bc97c7a7f225a3844817748db011f53ef5e06Ian Romanick   if (ctx->API != API_OPENGLES2) {
242f57bc97c7a7f225a3844817748db011f53ef5e06Ian Romanick      SET_GetDoublev(exec, _mesa_GetDoublev);
243f57bc97c7a7f225a3844817748db011f53ef5e06Ian Romanick   }
244c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetIntegerv(exec, _mesa_GetIntegerv);
245a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
2463d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetLightfv(exec, _mesa_GetLightfv);
2473d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetLightiv(exec, _mesa_GetLightiv);
2483d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetMaterialfv(exec, _mesa_GetMaterialfv);
2493d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetMaterialiv(exec, _mesa_GetMaterialiv);
2503d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetPolygonStipple(exec, _mesa_GetPolygonStipple);
2513d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetTexEnvfv(exec, _mesa_GetTexEnvfv);
2523d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetTexEnviv(exec, _mesa_GetTexEnviv);
2533d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
254a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
255a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv);
256a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv);
257a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
258c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetTexParameterfv(exec, _mesa_GetTexParameterfv);
259c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetTexParameteriv(exec, _mesa_GetTexParameteriv);
260a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
261a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetTexImage(exec, _mesa_GetTexImage);
262a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
263c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_Hint(exec, _mesa_Hint);
2647e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2653d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_IndexMask(exec, _mesa_IndexMask);
2663d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
267c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_IsEnabled(exec, _mesa_IsEnabled);
268a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
2693d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LightModelf(exec, _mesa_LightModelf);
2703d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LightModelfv(exec, _mesa_LightModelfv);
2713d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LightModeli(exec, _mesa_LightModeli);
2723d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LightModeliv(exec, _mesa_LightModeliv);
2733d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Lightf(exec, _mesa_Lightf);
2743d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Lightfv(exec, _mesa_Lightfv);
2753d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Lighti(exec, _mesa_Lighti);
2763d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Lightiv(exec, _mesa_Lightiv);
2773d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LoadMatrixd(exec, _mesa_LoadMatrixd);
2783d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
279aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
2807e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2817e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_eval_dispatch(exec);
2823d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_MultMatrixd(exec, _mesa_MultMatrixd);
2837e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_pixel_dispatch(exec);
2843d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
285dbb8fb8de9a9deca0ae22015e4680f4e631d6d32Chia-I Wu
286a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
287a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_PixelStoref(exec, _mesa_PixelStoref);
288a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
289bb16b471d28b575fe3e7346aa1d6dbefa9bf90cdIan Romanick      SET_PointSize(exec, _mesa_PointSize);
290a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
291a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_PolygonMode(exec, _mesa_PolygonMode);
292a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
293a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
294c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_PolygonOffset(exec, _mesa_PolygonOffset);
2957e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
2963d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_PolygonStipple(exec, _mesa_PolygonStipple);
2977e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_attrib_dispatch(exec);
2987e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_rastpos_dispatch(exec);
2997e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
3002b36db496d34c60a3f987fa88d52bf5684713240Chia-I Wu
301c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_ReadPixels(exec, _mesa_ReadPixels);
302a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
3033d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Rotated(exec, _mesa_Rotated);
3043d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Scaled(exec, _mesa_Scaled);
3053d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_SecondaryColorPointerEXT(exec, _mesa_SecondaryColorPointerEXT);
3063d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexEnvf(exec, _mesa_TexEnvf);
3073d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexEnviv(exec, _mesa_TexEnviv);
3083d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
30934a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell
310a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
3117e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_texgen_dispatch(exec);
3127e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
31334a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell
314a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
315a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexImage1D(exec, _mesa_TexImage1D);
316a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
317c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexParameterf(exec, _mesa_TexParameterf);
318c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexParameterfv(exec, _mesa_TexParameterfv);
319c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexParameteriv(exec, _mesa_TexParameteriv);
3207e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
3213d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_Translated(exec, _mesa_Translated);
3223d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
323c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
324c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 1.1 */
325c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BindTexture(exec, _mesa_BindTexture);
326c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DeleteTextures(exec, _mesa_DeleteTextures);
327c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GenTextures(exec, _mesa_GenTextures);
328c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
3297e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
3303d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_AreTexturesResident(exec, _mesa_AreTexturesResident);
3313d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ColorPointer(exec, _mesa_ColorPointer);
3323d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
333a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
334a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D);
335a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D);
336a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexSubImage1D(exec, _mesa_TexSubImage1D);
337a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
338a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
339c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CopyTexImage2D(exec, _mesa_CopyTexImage2D);
340c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CopyTexSubImage2D(exec, _mesa_CopyTexSubImage2D);
341a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   SET_TexSubImage2D(exec, _mesa_TexSubImage2D);
342a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
343a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
3443d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_DisableClientState(exec, _mesa_DisableClientState);
3453d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_EdgeFlagPointer(exec, _mesa_EdgeFlagPointer);
3463d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_EnableClientState(exec, _mesa_EnableClientState);
3473d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetPointerv(exec, _mesa_GetPointerv);
3483d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_IndexPointer(exec, _mesa_IndexPointer);
3493d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_InterleavedArrays(exec, _mesa_InterleavedArrays);
3503d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
351c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_IsTexture(exec, _mesa_IsTexture);
352a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
3533d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_NormalPointer(exec, _mesa_NormalPointer);
3543d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_PrioritizeTextures(exec, _mesa_PrioritizeTextures);
3553d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexCoordPointer(exec, _mesa_TexCoordPointer);
3563d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_VertexPointer(exec, _mesa_VertexPointer);
3573d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
358c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
359c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
360c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 1.2 */
361c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
362c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CopyTexSubImage3D(exec, _mesa_CopyTexSubImage3D);
363c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexImage3D(exec, _mesa_TexImage3D);
364c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_TexSubImage3D(exec, _mesa_TexSubImage3D);
365c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
366c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
367c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* OpenGL 1.2  GL_ARB_imaging */
368c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendColor(exec, _mesa_BlendColor);
369c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendEquation(exec, _mesa_BlendEquation);
370c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT);
37134a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell
3727e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
3737e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_colortable_dispatch(exec);
3747e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_convolve_dispatch(exec);
3757e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_histogram_dispatch(exec);
3767e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
377c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
378c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* OpenGL 2.0 */
379c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilFuncSeparate(exec, _mesa_StencilFuncSeparate);
380c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilMaskSeparate(exec, _mesa_StencilMaskSeparate);
381c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_StencilOpSeparate(exec, _mesa_StencilOpSeparate);
382962f92611216e304c95e7c089b38d58066236014Brian Paul
383c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_ARB_shader_objects
3840fb12a40e48ca804653a51e2f5ff1acba13e703eIan Romanick   _mesa_init_shader_dispatch(ctx, exec);
3854cdbf27fac2537fe1c5216afd5c10bde224eb57bIan Romanick   _mesa_init_shader_uniform_dispatch(ctx, exec);
386c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
387c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
388c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 2. GL_EXT_blend_color */
389c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if 0
390c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/*    SET_BlendColorEXT(exec, _mesa_BlendColorEXT); */
391c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
392c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
393c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 3. GL_EXT_polygon_offset */
394c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
3957e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
3967e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_PolygonOffsetEXT(exec, _mesa_PolygonOffsetEXT);
3977e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
398c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
399c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
400c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 6. GL_EXT_texture3d */
401c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if 0
402c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/*    SET_CopyTexSubImage3DEXT(exec, _mesa_CopyTexSubImage3D); */
403c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/*    SET_TexImage3DEXT(exec, _mesa_TexImage3DEXT); */
404c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul/*    SET_TexSubImage3DEXT(exec, _mesa_TexSubImage3D); */
405c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
406c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
407c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 11. GL_EXT_histogram */
408c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if 0
4097e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
4103d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetHistogramEXT(exec, _mesa_GetHistogram);
4113d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetHistogramParameterfvEXT(exec, _mesa_GetHistogramParameterfv);
4123d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetHistogramParameterivEXT(exec, _mesa_GetHistogramParameteriv);
4133d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetMinmaxEXT(exec, _mesa_GetMinmax);
4143d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetMinmaxParameterfvEXT(exec, _mesa_GetMinmaxParameterfv);
4153d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetMinmaxParameterivEXT(exec, _mesa_GetMinmaxParameteriv);
4163d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
417c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
418c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
419c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 14. SGI_color_table */
420c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if 0
421a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API == API_OPENGL) {
4223d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ColorTableSGI(exec, _mesa_ColorTable);
4233d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ColorSubTableSGI(exec, _mesa_ColorSubTable);
4243d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetColorTableSGI(exec, _mesa_GetColorTable);
4253d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetColorTableParameterfvSGI(exec, _mesa_GetColorTableParameterfv);
4263d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_GetColorTableParameterivSGI(exec, _mesa_GetColorTableParameteriv);
4273d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
428c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
429c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
430c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 30. GL_EXT_vertex_array */
431c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
4327e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
4333d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_ColorPointerEXT(exec, _mesa_ColorPointerEXT);
4343d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_EdgeFlagPointerEXT(exec, _mesa_EdgeFlagPointerEXT);
4353d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_IndexPointerEXT(exec, _mesa_IndexPointerEXT);
4363d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_NormalPointerEXT(exec, _mesa_NormalPointerEXT);
4373d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_TexCoordPointerEXT(exec, _mesa_TexCoordPointerEXT);
4383d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_VertexPointerEXT(exec, _mesa_VertexPointerEXT);
4393d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
440c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
441c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
442c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 37. GL_EXT_blend_minmax */
443c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if 0
444c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendEquationEXT(exec, _mesa_BlendEquationEXT);
445c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
446c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
447c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 54. GL_EXT_point_parameters */
448c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
4497dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick   if (ctx->API != API_OPENGLES2) {
4507dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick      SET_PointParameterfEXT(exec, _mesa_PointParameterf);
4517dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick      SET_PointParameterfvEXT(exec, _mesa_PointParameterfv);
4527dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick   }
453c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
454c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
455e12c4faf7ef1246fd7c3a9d9dc30130a6675c3b4Eric Anholt   /* 95. GL_ARB_ES2_compatibility */
456e12c4faf7ef1246fd7c3a9d9dc30130a6675c3b4Eric Anholt   SET_ClearDepthf(exec, _mesa_ClearDepthf);
457e12c4faf7ef1246fd7c3a9d9dc30130a6675c3b4Eric Anholt   SET_DepthRangef(exec, _mesa_DepthRangef);
458e12c4faf7ef1246fd7c3a9d9dc30130a6675c3b4Eric Anholt
459c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 97. GL_EXT_compiled_vertex_array */
460c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
4617e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
4627e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_LockArraysEXT(exec, _mesa_LockArraysEXT);
4637e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_UnlockArraysEXT(exec, _mesa_UnlockArraysEXT);
4647e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
465c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
466c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
467c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 148. GL_EXT_multi_draw_arrays */
468c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
469c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_MultiDrawArraysEXT(exec, _mesa_MultiDrawArraysEXT);
470c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
471c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
472c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 173. GL_INGR_blend_func_separate */
473c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
474c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BlendFuncSeparateEXT(exec, _mesa_BlendFuncSeparateEXT);
475c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
476c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
477c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 196. GL_MESA_resize_buffers */
478c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
479dd0dd9aa52061eb1ce8436bb3e1fdc5234e79987Ian Romanick   if (_mesa_is_desktop_gl(ctx)) {
480dd0dd9aa52061eb1ce8436bb3e1fdc5234e79987Ian Romanick      SET_ResizeBuffersMESA(exec, _mesa_ResizeBuffersMESA);
481dd0dd9aa52061eb1ce8436bb3e1fdc5234e79987Ian Romanick   }
482c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
483c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
484c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 197. GL_MESA_window_pos */
485d25080074f2da1ebc47cdfb5c3491740a57ec03fChia-I Wu   /* part of _mesa_init_rastpos_dispatch(exec); */
486c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
487c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 200. GL_IBM_multimode_draw_arrays */
488c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
489a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
490a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM);
491a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM);
492a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
493c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
494c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
495c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 233. GL_NV_vertex_program */
496c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_NV_vertex_program
4977e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
4987e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_BindProgramNV(exec, _mesa_BindProgram);
4997e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_DeleteProgramsNV(exec, _mesa_DeletePrograms);
5007e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ExecuteProgramNV(exec, _mesa_ExecuteProgramNV);
5017e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GenProgramsNV(exec, _mesa_GenPrograms);
5027e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_AreProgramsResidentNV(exec, _mesa_AreProgramsResidentNV);
5037e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_RequestResidentProgramsNV(exec, _mesa_RequestResidentProgramsNV);
5047e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramParameterfvNV(exec, _mesa_GetProgramParameterfvNV);
5057e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramParameterdvNV(exec, _mesa_GetProgramParameterdvNV);
5067e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramivNV(exec, _mesa_GetProgramivNV);
5077e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramStringNV(exec, _mesa_GetProgramStringNV);
5087e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetTrackMatrixivNV(exec, _mesa_GetTrackMatrixivNV);
5097e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetVertexAttribdvNV(exec, _mesa_GetVertexAttribdvNV);
5107e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetVertexAttribfvNV(exec, _mesa_GetVertexAttribfvNV);
5117e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetVertexAttribivNV(exec, _mesa_GetVertexAttribivNV);
5127e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_IsProgramNV(exec, _mesa_IsProgramARB);
5137e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_LoadProgramNV(exec, _mesa_LoadProgramNV);
5147e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB); /* alias to ProgramParameter4dNV */
5157e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB);  /* alias to ProgramParameter4dvNV */
5167e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB);  /* alias to ProgramParameter4fNV */
5177e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB);  /* alias to ProgramParameter4fvNV */
5187e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramParameters4dvNV(exec, _mesa_ProgramParameters4dvNV);
5197e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramParameters4fvNV(exec, _mesa_ProgramParameters4fvNV);
5207e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_TrackMatrixNV(exec, _mesa_TrackMatrixNV);
5217e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_VertexAttribPointerNV(exec, _mesa_VertexAttribPointerNV);
5227e81f553bccda66fafa769f8456b4918d088181aIan Romanick      /* glVertexAttrib*NV functions handled in api_loopback.c */
5237e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
524c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
525fc2219e4482c4b940ea32dbe8ad220a22c300f3dIan Romanick   SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV);
526c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
527c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 273. GL_APPLE_vertex_array_object */
5287e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
5297e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_BindVertexArrayAPPLE(exec, _mesa_BindVertexArrayAPPLE);
5307e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GenVertexArraysAPPLE(exec, _mesa_GenVertexArraysAPPLE);
5317e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
53236ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   /* Reused by ARB_vertex_array_object / OES_vertex_array_object */
53336ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   SET_DeleteVertexArraysAPPLE(exec, _mesa_DeleteVertexArraysAPPLE);
53436ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   SET_IsVertexArrayAPPLE(exec, _mesa_IsVertexArrayAPPLE);
535c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
536c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 282. GL_NV_fragment_program */
537c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_NV_fragment_program
5387e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
5397e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramNamedParameter4fNV(exec, _mesa_ProgramNamedParameter4fNV);
5407e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramNamedParameter4dNV(exec, _mesa_ProgramNamedParameter4dNV);
5417e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramNamedParameter4fvNV(exec, _mesa_ProgramNamedParameter4fvNV);
5427e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramNamedParameter4dvNV(exec, _mesa_ProgramNamedParameter4dvNV);
5437e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramNamedParameterfvNV(exec, _mesa_GetProgramNamedParameterfvNV);
5447e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramNamedParameterdvNV(exec, _mesa_GetProgramNamedParameterdvNV);
5457e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
5467e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
5477e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
5487e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
5497e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
5507e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
5517e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
552c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
553c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
554c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 262. GL_NV_point_sprite */
555c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
5567dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick   if (_mesa_is_desktop_gl(ctx)) {
5577dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick      SET_PointParameteriNV(exec, _mesa_PointParameteri);
5587dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick      SET_PointParameterivNV(exec, _mesa_PointParameteriv);
5597dc8dc0f7cb21b23190f59ec2fc61fbf8b1556aeIan Romanick   }
560c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
561c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
562c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* 268. GL_EXT_stencil_two_side */
563c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
5647e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
5657e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ActiveStencilFaceEXT(exec, _mesa_ActiveStencilFaceEXT);
5667e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
567c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
568c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
569b3de6e703d91da4f7f402f9ca33ccbbe31e97d99Brian Paul   /* 285. GL_NV_primitive_restart */
570a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
571a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_PrimitiveRestartIndexNV(exec, _mesa_PrimitiveRestartIndex);
572a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
573b3de6e703d91da4f7f402f9ca33ccbbe31e97d99Brian Paul
574c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ???. GL_EXT_depth_bounds_test */
575a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
576a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT);
577a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
578c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
579808c424b673de109babc608ec74b34f0738ed906Brian Paul   /* 352. GL_EXT_transform_feedback */
58048dcdcffd61c6c3755d818493bc3b7bdc1260ea5Marek Olšák   /* ARB 93. GL_ARB_transform_feedback2 */
581a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
582a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_transform_feedback_dispatch(exec);
583a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
584808c424b673de109babc608ec74b34f0738ed906Brian Paul
585808c424b673de109babc608ec74b34f0738ed906Brian Paul   /* 364. GL_EXT_provoking_vertex */
586a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
587a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ProvokingVertexEXT(exec, _mesa_ProvokingVertexEXT);
588a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
589fe86e508967bd7b63902928033247e145103f60cBrian Paul
590c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 1. GL_ARB_multitexture */
591c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
592c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB);
59304d6ffa06deff792aea49eccc4bceb1a91a1892eIan Romanick   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {
594a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB);
595a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
596c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
597c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
598c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 3. GL_ARB_transpose_matrix */
599c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
6007e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
6013d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LoadTransposeMatrixdARB(exec, _mesa_LoadTransposeMatrixdARB);
6023d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_LoadTransposeMatrixfARB(exec, _mesa_LoadTransposeMatrixfARB);
6033d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_MultTransposeMatrixdARB(exec, _mesa_MultTransposeMatrixdARB);
6043d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen      SET_MultTransposeMatrixfARB(exec, _mesa_MultTransposeMatrixfARB);
6053d0b54c7c6021becb3cae9245fc8f88a0f0f2be9Jordan Justen   }
606c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
607c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
608c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 5. GL_ARB_multisample */
609c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
610c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_SampleCoverageARB(exec, _mesa_SampleCoverageARB);
611c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
612c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
613c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 12. GL_ARB_texture_compression */
614c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if _HAVE_FULL_GL
615a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
616a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB);
617a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB);
618a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB);
619a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
620a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
621c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CompressedTexImage3DARB(exec, _mesa_CompressedTexImage3DARB);
622c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CompressedTexImage2DARB(exec, _mesa_CompressedTexImage2DARB);
623c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CompressedTexSubImage3DARB(exec, _mesa_CompressedTexSubImage3DARB);
624c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CompressedTexSubImage2DARB(exec, _mesa_CompressedTexSubImage2DARB);
6256b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul
6266b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul   /* ARB 104. GL_ARB_robustness */
627a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
628a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetnCompressedTexImageARB(exec, _mesa_GetnCompressedTexImageARB);
629a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
630c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
631c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
632c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 14. GL_ARB_point_parameters */
633c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* reuse EXT_point_parameters functions */
634c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
635c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 26. GL_ARB_vertex_program */
636c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 27. GL_ARB_fragment_program */
637c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
638c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1sARB aliases glVertexAttrib1sNV */
639c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1fARB aliases glVertexAttrib1fNV */
640c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1dARB aliases glVertexAttrib1dNV */
641c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2sARB aliases glVertexAttrib2sNV */
642c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2fARB aliases glVertexAttrib2fNV */
643c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2dARB aliases glVertexAttrib2dNV */
644c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3sARB aliases glVertexAttrib3sNV */
645c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3fARB aliases glVertexAttrib3fNV */
646c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3dARB aliases glVertexAttrib3dNV */
647c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4sARB aliases glVertexAttrib4sNV */
648c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4fARB aliases glVertexAttrib4fNV */
649c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4dARB aliases glVertexAttrib4dNV */
650c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NubARB aliases glVertexAttrib4NubNV */
651c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1svARB aliases glVertexAttrib1svNV */
652c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1fvARB aliases glVertexAttrib1fvNV */
653c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib1dvARB aliases glVertexAttrib1dvNV */
654c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2svARB aliases glVertexAttrib2svNV */
655c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2fvARB aliases glVertexAttrib2fvNV */
656c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib2dvARB aliases glVertexAttrib2dvNV */
657c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3svARB aliases glVertexAttrib3svNV */
658c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3fvARB aliases glVertexAttrib3fvNV */
659c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib3dvARB aliases glVertexAttrib3dvNV */
660c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4svARB aliases glVertexAttrib4svNV */
661c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4fvARB aliases glVertexAttrib4fvNV */
662c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4dvARB aliases glVertexAttrib4dvNV */
663c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NubvARB aliases glVertexAttrib4NubvNV */
664c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4bvARB handled in api_loopback.c */
665c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4ivARB handled in api_loopback.c */
666c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4ubvARB handled in api_loopback.c */
667c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4usvARB handled in api_loopback.c */
668c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4uivARB handled in api_loopback.c */
669c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NbvARB handled in api_loopback.c */
670c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NsvARB handled in api_loopback.c */
671c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NivARB handled in api_loopback.c */
672c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NusvARB handled in api_loopback.c */
673c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glVertexAttrib4NuivARB handled in api_loopback.c */
674c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_VertexAttribPointerARB(exec, _mesa_VertexAttribPointerARB);
675c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_EnableVertexAttribArrayARB(exec, _mesa_EnableVertexAttribArrayARB);
676c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DisableVertexAttribArrayARB(exec, _mesa_DisableVertexAttribArrayARB);
677a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
678a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ProgramStringARB(exec, _mesa_ProgramStringARB);
679a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      /* glBindProgramARB aliases glBindProgramNV */
680a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      /* glDeleteProgramsARB aliases glDeleteProgramsNV */
681a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      /* glGenProgramsARB aliases glGenProgramsNV */
682a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      /* glIsProgramARB aliases glIsProgramNV */
683a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB);
684a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
685a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick
686c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetVertexAttribfvARB(exec, _mesa_GetVertexAttribfvARB);
687c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetVertexAttribivARB(exec, _mesa_GetVertexAttribivARB);
688c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* glGetVertexAttribPointervARB aliases glGetVertexAttribPointervNV */
6897e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
6907e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB);
6917e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB);
6927e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB);
6937e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB);
6947e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB);
6957e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB);
6967e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB);
6977e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB);
6987e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramEnvParameterdvARB(exec, _mesa_GetProgramEnvParameterdvARB);
6997e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramEnvParameterfvARB(exec, _mesa_GetProgramEnvParameterfvARB);
70090ec1db9f4c62d345fc78518570f4fde5e177d57Ian Romanick      SET_GetProgramivARB(exec, _mesa_GetProgramivARB);
7017e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB);
7027e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB);
7037e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetProgramStringARB(exec, _mesa_GetProgramStringARB);
7047e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
705c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
706c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
707c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 28. GL_ARB_vertex_buffer_object */
708e2370bcc1ddde84d5d1ff676c29638645cb21731Ian Romanick   _mesa_init_bufferobj_dispatch(ctx, exec);
709c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
710c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 29. GL_ARB_occlusion_query */
711a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
712a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_queryobj_dispatch(exec);
713a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
714c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
715c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* ARB 37. GL_ARB_draw_buffers */
71634a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#if FEATURE_draw_read_buffer
717c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DrawBuffersARB(exec, _mesa_DrawBuffersARB);
71834a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell#endif
71934a61c66fd1b625a5606b795d192a49632ff1787Keith Whitwell
7205dd750d685d3f80b3783b1205f6727cb867c049anobled   /* ARB 66. GL_ARB_sync */
721a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
722a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_sync_dispatch(exec);
723a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
7245dd750d685d3f80b3783b1205f6727cb867c049anobled
7255dd750d685d3f80b3783b1205f6727cb867c049anobled   /* ARB 104. GL_ARB_debug_output */
726a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
727a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_errors_dispatch(exec);
728a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
7295dd750d685d3f80b3783b1205f6727cb867c049anobled
7305dd750d685d3f80b3783b1205f6727cb867c049anobled   /* ARB 105. GL_ARB_robustness */
731a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
732a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetGraphicsResetStatusARB(exec, _mesa_GetGraphicsResetStatusARB);
733a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetnPolygonStippleARB(exec, _mesa_GetnPolygonStippleARB);
734a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetnTexImageARB(exec, _mesa_GetnTexImageARB);
735a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ReadnPixelsARB(exec, _mesa_ReadnPixelsARB);
736a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
7376b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul
738c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul  /* GL_ATI_fragment_shader */
7397e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
7407e81f553bccda66fafa769f8456b4918d088181aIan Romanick      _mesa_init_ati_fragment_shader_dispatch(exec);
7417e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
742c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
743114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger  /* GL_ATI_envmap_bumpmap */
7447e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
7457e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetTexBumpParameterivATI(exec, _mesa_GetTexBumpParameterivATI);
7467e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_GetTexBumpParameterfvATI(exec, _mesa_GetTexBumpParameterfvATI);
7477e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_TexBumpParameterivATI(exec, _mesa_TexBumpParameterivATI);
7487e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_TexBumpParameterfvATI(exec, _mesa_TexBumpParameterfvATI);
7497e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
750114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger
751c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_EXT_framebuffer_object
752c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_IsRenderbufferEXT(exec, _mesa_IsRenderbufferEXT);
753c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BindRenderbufferEXT(exec, _mesa_BindRenderbufferEXT);
754c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DeleteRenderbuffersEXT(exec, _mesa_DeleteRenderbuffersEXT);
755c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GenRenderbuffersEXT(exec, _mesa_GenRenderbuffersEXT);
756c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_RenderbufferStorageEXT(exec, _mesa_RenderbufferStorageEXT);
757c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetRenderbufferParameterivEXT(exec, _mesa_GetRenderbufferParameterivEXT);
758c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_IsFramebufferEXT(exec, _mesa_IsFramebufferEXT);
759c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_BindFramebufferEXT(exec, _mesa_BindFramebufferEXT);
760c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_DeleteFramebuffersEXT(exec, _mesa_DeleteFramebuffersEXT);
761c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GenFramebuffersEXT(exec, _mesa_GenFramebuffersEXT);
762c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_CheckFramebufferStatusEXT(exec, _mesa_CheckFramebufferStatusEXT);
763a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
764a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT);
765a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
766c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_FramebufferTexture2DEXT(exec, _mesa_FramebufferTexture2DEXT);
767c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_FramebufferTexture3DEXT(exec, _mesa_FramebufferTexture3DEXT);
768c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_FramebufferRenderbufferEXT(exec, _mesa_FramebufferRenderbufferEXT);
769c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GetFramebufferAttachmentParameterivEXT(exec, _mesa_GetFramebufferAttachmentParameterivEXT);
770c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   SET_GenerateMipmapEXT(exec, _mesa_GenerateMipmapEXT);
771c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
772c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
773c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_EXT_framebuffer_blit
774a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
775a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BlitFramebufferEXT(exec, _mesa_BlitFramebufferEXT);
776a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
777c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
778c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
779c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* GL_EXT_gpu_program_parameters */
780c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
7817e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
7827e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramEnvParameters4fvEXT(exec, _mesa_ProgramEnvParameters4fvEXT);
7837e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_ProgramLocalParameters4fvEXT(exec, _mesa_ProgramLocalParameters4fvEXT);
7847e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
785c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
786c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
787c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* GL_MESA_texture_array / GL_EXT_texture_array */
788c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#if FEATURE_EXT_framebuffer_object
789a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
790a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_FramebufferTextureLayerEXT(exec, _mesa_FramebufferTextureLayerEXT);
791a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
792c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul#endif
793c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul
794c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul   /* GL_ATI_separate_stencil */
7957e81f553bccda66fafa769f8456b4918d088181aIan Romanick   if (ctx->API == API_OPENGL) {
7967e81f553bccda66fafa769f8456b4918d088181aIan Romanick      SET_StencilFuncSeparateATI(exec, _mesa_StencilFuncSeparateATI);
7977e81f553bccda66fafa769f8456b4918d088181aIan Romanick   }
798777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul
799777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul#if FEATURE_ARB_framebuffer_object
800777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul   /* The ARB_fbo functions are the union of
801777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul    * GL_EXT_fbo, GL_EXT_framebuffer_blit, GL_EXT_texture_array
802777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul    */
803a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
804a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_RenderbufferStorageMultisample(exec, _mesa_RenderbufferStorageMultisample);
805a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
806777a2efc7768de659fbc2e9a7541c9cbb3fc1d8bBrian Paul#endif
80708e43ebfb216284818925e899419af03e28d2360Brian Paul
808e75b283b45add351dbe5a09289fe85546df8a79aBrian Paul#if FEATURE_ARB_map_buffer_range
809a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
810a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_MapBufferRange(exec, _mesa_MapBufferRange);
811a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_FlushMappedBufferRange(exec, _mesa_FlushMappedBufferRange);
812a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
813e75b283b45add351dbe5a09289fe85546df8a79aBrian Paul#endif
814e75b283b45add351dbe5a09289fe85546df8a79aBrian Paul
81508e43ebfb216284818925e899419af03e28d2360Brian Paul   /* GL_ARB_copy_buffer */
816a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
817a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_CopyBufferSubData(exec, _mesa_CopyBufferSubData);
818a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
819cfb815805839ecb5eb8636b1a7f643de44e04ca9Brian Paul
82036ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   /* GL_ARB_vertex_array_object / GL_OES_vertex_array_object */
82136ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   SET_BindVertexArray(exec, _mesa_BindVertexArray);
82236ceabfb745f27bc5754ee2a9766945d1dd59551Ian Romanick   SET_GenVertexArrays(exec, _mesa_GenVertexArrays);
82381c72a1dabe72ebe6a875bd048d2d7a676716cbfBrian Paul
82481c72a1dabe72ebe6a875bd048d2d7a676716cbfBrian Paul   /* GL_EXT_draw_buffers2 */
825a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
826a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ColorMaskIndexedEXT(exec, _mesa_ColorMaskIndexed);
827a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetBooleanIndexedvEXT(exec, _mesa_GetBooleanIndexedv);
828a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetIntegerIndexedvEXT(exec, _mesa_GetIntegerIndexedv);
829a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_EnableIndexedEXT(exec, _mesa_EnableIndexed);
830a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_DisableIndexedEXT(exec, _mesa_DisableIndexed);
831a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_IsEnabledIndexedEXT(exec, _mesa_IsEnabledIndexed);
832a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
833ff3a52643d323626f32a9f1c14464a9501e6494dBrian Paul
834ff3a52643d323626f32a9f1c14464a9501e6494dBrian Paul   /* GL_NV_conditional_render */
835a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
836a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BeginConditionalRenderNV(exec, _mesa_BeginConditionalRender);
837a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_EndConditionalRenderNV(exec, _mesa_EndConditionalRender);
838a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
839ea203de2d005b311d2f7f981523ae84494d6672aKristian Høgsberg
840ea203de2d005b311d2f7f981523ae84494d6672aKristian Høgsberg#if FEATURE_OES_EGL_image
841ea203de2d005b311d2f7f981523ae84494d6672aKristian Høgsberg   SET_EGLImageTargetTexture2DOES(exec, _mesa_EGLImageTargetTexture2DOES);
842ea203de2d005b311d2f7f981523ae84494d6672aKristian Høgsberg   SET_EGLImageTargetRenderbufferStorageOES(exec, _mesa_EGLImageTargetRenderbufferStorageOES);
843ea203de2d005b311d2f7f981523ae84494d6672aKristian Høgsberg#endif
84499864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson
84599864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson#if FEATURE_APPLE_object_purgeable
846a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
847a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE);
848a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE);
849a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE);
850a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
85199864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson#endif
852fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg
853da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#if FEATURE_ARB_geometry_shader4
854a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
855a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_FramebufferTextureARB(exec, _mesa_FramebufferTextureARB);
856a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB);
857a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
858da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#endif
859da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin
860a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
861a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClampColorARB(exec, _mesa_ClampColorARB);
862a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
863e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák
86498bb70ac842e6898c0e2f78940549be5fb910edaBrian Paul   /* GL_EXT_texture_integer */
865a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
866a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT);
867a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT);
868a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
869a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
870a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetTexParameterIivEXT(exec, _mesa_GetTexParameterIiv);
871a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetTexParameterIuivEXT(exec, _mesa_GetTexParameterIuiv);
872a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexParameterIivEXT(exec, _mesa_TexParameterIiv);
873a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexParameterIuivEXT(exec, _mesa_TexParameterIuiv);
874a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
875da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin
876ba9995953c347b074b2f9df0053fa85040b4af83Brian Paul   /* GL_EXT_gpu_shader4 / OpenGL 3.0 */
877a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
878a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetVertexAttribIivEXT(exec, _mesa_GetVertexAttribIiv);
879a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetVertexAttribIuivEXT(exec, _mesa_GetVertexAttribIuiv);
880a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_VertexAttribIPointerEXT(exec, _mesa_VertexAttribIPointer);
881a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
882ba9995953c347b074b2f9df0053fa85040b4af83Brian Paul
8835ed51e950f8b5850cada5aa6289215dbf254c1c7Brian Paul   /* GL 3.0 (functions not covered by other extensions) */
884a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
885a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearBufferiv(exec, _mesa_ClearBufferiv);
886a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearBufferuiv(exec, _mesa_ClearBufferuiv);
887a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearBufferfv(exec, _mesa_ClearBufferfv);
888a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClearBufferfi(exec, _mesa_ClearBufferfi);
889a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_GetStringi(exec, _mesa_GetStringi);
890a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_ClampColor(exec, _mesa_ClampColorARB);
891a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
8925ed51e950f8b5850cada5aa6289215dbf254c1c7Brian Paul
8931d1eb9578716913f4133786b30c6e6edc69a8a0cBrian Paul   /* GL_ARB_instanced_arrays */
894a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
895a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_VertexAttribDivisorARB(exec, _mesa_VertexAttribDivisor);
896a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
8975ed51e950f8b5850cada5aa6289215dbf254c1c7Brian Paul
8987f48278edc70ad0841cbee2c46add7653b4fac15Brian Paul   /* GL_ARB_draw_buffer_blend */
899a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
900a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BlendFunciARB(exec, _mesa_BlendFunci);
901a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BlendFuncSeparateiARB(exec, _mesa_BlendFuncSeparatei);
902a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BlendEquationiARB(exec, _mesa_BlendEquationi);
903a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_BlendEquationSeparateiARB(exec, _mesa_BlendEquationSeparatei);
904a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
905867f9b07d42c2b49ddb9e5bb17f0ac5c4a80d8acMarek Olšák
906867f9b07d42c2b49ddb9e5bb17f0ac5c4a80d8acMarek Olšák   /* GL_NV_texture_barrier */
907a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
908a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TextureBarrierNV(exec, _mesa_TextureBarrierNV);
909a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
9107f48278edc70ad0841cbee2c46add7653b4fac15Brian Paul
911874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul   /* GL_ARB_texture_buffer_object */
912a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
913a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexBufferARB(exec, _mesa_TexBuffer);
914a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
915874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul
9162ace9ffc8e2354acce4dc45d425d71c3f1a349b2Brian Paul   /* GL_ARB_texture_storage */
917a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
918a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TexStorage1D(exec, _mesa_TexStorage1D);
919a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      SET_TextureStorage1DEXT(exec, _mesa_TextureStorage1DEXT);
920a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
921b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
922b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick      SET_TexStorage2D(exec, _mesa_TexStorage2D);
923b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick      SET_TexStorage3D(exec, _mesa_TexStorage3D);
924b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick      SET_TextureStorage2DEXT(exec, _mesa_TextureStorage2DEXT);
925b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick      SET_TextureStorage3DEXT(exec, _mesa_TextureStorage3DEXT);
926b56c93dfff1e718c4e4a2f688d1275580c2c4ce0Ian Romanick   }
9272ace9ffc8e2354acce4dc45d425d71c3f1a349b2Brian Paul
92834a5d3b9f4740601708c82093e2114356d749e65Brian Paul#if FEATURE_ARB_sampler_objects
929a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   if (ctx->API != API_OPENGLES2) {
930a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick      _mesa_init_sampler_object_dispatch(exec);
931a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick   }
93234a5d3b9f4740601708c82093e2114356d749e65Brian Paul#endif
93334a5d3b9f4740601708c82093e2114356d749e65Brian Paul
93407e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick   if (_mesa_is_desktop_gl(ctx)) {
93507e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick      SET_InvalidateTexSubImage(exec, _mesa_InvalidateTexSubImage);
93607e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick      SET_InvalidateTexImage(exec, _mesa_InvalidateTexImage);
93707e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick   }
93807e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick
939342be8aa88819446220bba680d8e0b628078156fIan Romanick   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
940342be8aa88819446220bba680d8e0b628078156fIan Romanick      SET_InvalidateSubFramebuffer(exec, _mesa_InvalidateSubFramebuffer);
941342be8aa88819446220bba680d8e0b628078156fIan Romanick      SET_InvalidateFramebuffer(exec, _mesa_InvalidateFramebuffer);
942342be8aa88819446220bba680d8e0b628078156fIan Romanick   }
94307e12c49175e0bf23dbd8bdc3afd7aa79ccc7140Ian Romanick
944fa416106307dc193e2133aa6a29b9bcfc91f8b39Kristian Høgsberg   return exec;
945c9e5671691289006e9b1152d6ce20200a83010c2Brian Paul}
946cc289e22213c5f5fe72602ce81db992bc8f7b1adChia-I Wu
947a010215463c63680c69e90202fe3fcd2e5b25fa6Ian Romanick#endif /* FEATURE_GL || FEATURE_ES2 */
948