mesa: remove driver hooks for GetFloat/Integer/Doublev, etc
[profile/ivi/mesa.git] / src / mesa / main / dd.h
1 /**
2  * \file dd.h
3  * Device driver interfaces.
4  */
5
6 /*
7  * Mesa 3-D graphics library
8  * Version:  6.5.2
9  *
10  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28  */
29
30
31 #ifndef DD_INCLUDED
32 #define DD_INCLUDED
33
34 /* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
35
36 struct gl_pixelstore_attrib;
37 struct gl_display_list;
38
39 #if FEATURE_ARB_vertex_buffer_object
40 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
41  * NULL) if buffer is unavailable for immediate mapping.
42  *
43  * Does GL_MAP_INVALIDATE_RANGE_BIT do this?  It seems so, but it
44  * would require more book-keeping in the driver than seems necessary
45  * at this point.
46  *
47  * Does GL_MAP_INVALDIATE_BUFFER_BIT do this?  Not really -- we don't
48  * want to provoke the driver to throw away the old storage, we will
49  * respect the contents of already referenced data.
50  */
51 #define MESA_MAP_NOWAIT_BIT       0x0040
52 #endif
53
54
55 /**
56  * Device driver function table.
57  * Core Mesa uses these function pointers to call into device drivers.
58  * Most of these functions directly correspond to OpenGL state commands.
59  * Core Mesa will call these functions after error checking has been done
60  * so that the drivers don't have to worry about error testing.
61  *
62  * Vertex transformation/clipping/lighting is patched into the T&L module.
63  * Rasterization functions are patched into the swrast module.
64  *
65  * Note: when new functions are added here, the drivers/common/driverfuncs.c
66  * file should be updated too!!!
67  */
68 struct dd_function_table {
69    /**
70     * Return a string as needed by glGetString().
71     * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
72     * returned.
73     */
74    const GLubyte * (*GetString)( GLcontext *ctx, GLenum name );
75
76    /**
77     * Notify the driver after Mesa has made some internal state changes.  
78     *
79     * This is in addition to any state change callbacks Mesa may already have
80     * made.
81     */
82    void (*UpdateState)( GLcontext *ctx, GLbitfield new_state );
83
84    /**
85     * Get the width and height of the named buffer/window.
86     *
87     * Mesa uses this to determine when the driver's window size has changed.
88     * XXX OBSOLETE: this function will be removed in the future.
89     */
90    void (*GetBufferSize)( GLframebuffer *buffer,
91                           GLuint *width, GLuint *height );
92
93    /**
94     * Resize the given framebuffer to the given size.
95     * XXX OBSOLETE: this function will be removed in the future.
96     */
97    void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb,
98                           GLuint width, GLuint height);
99
100    /**
101     * Called whenever an error is generated.  
102     * __GLcontextRec::ErrorValue contains the error value.
103     */
104    void (*Error)( GLcontext *ctx );
105
106    /**
107     * This is called whenever glFinish() is called.
108     */
109    void (*Finish)( GLcontext *ctx );
110
111    /**
112     * This is called whenever glFlush() is called.
113     */
114    void (*Flush)( GLcontext *ctx );
115
116    /**
117     * Clear the color/depth/stencil/accum buffer(s).
118     * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
119     *                 renderbuffers need to be cleared.
120     */
121    void (*Clear)( GLcontext *ctx, GLbitfield buffers );
122
123    /**
124     * Execute glAccum command.
125     */
126    void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value );
127
128
129    /**
130     * Execute glRasterPos, updating the ctx->Current.Raster fields
131     */
132    void (*RasterPos)( GLcontext *ctx, const GLfloat v[4] );
133
134    /**
135     * \name Image-related functions
136     */
137    /*@{*/
138
139    /**
140     * Called by glDrawPixels().
141     * \p unpack describes how to unpack the source image data.
142     */
143    void (*DrawPixels)( GLcontext *ctx,
144                        GLint x, GLint y, GLsizei width, GLsizei height,
145                        GLenum format, GLenum type,
146                        const struct gl_pixelstore_attrib *unpack,
147                        const GLvoid *pixels );
148
149    /**
150     * Called by glReadPixels().
151     */
152    void (*ReadPixels)( GLcontext *ctx,
153                        GLint x, GLint y, GLsizei width, GLsizei height,
154                        GLenum format, GLenum type,
155                        const struct gl_pixelstore_attrib *unpack,
156                        GLvoid *dest );
157
158    /**
159     * Called by glCopyPixels().  
160     */
161    void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy,
162                        GLsizei width, GLsizei height,
163                        GLint dstx, GLint dsty, GLenum type );
164
165    /**
166     * Called by glBitmap().  
167     */
168    void (*Bitmap)( GLcontext *ctx,
169                    GLint x, GLint y, GLsizei width, GLsizei height,
170                    const struct gl_pixelstore_attrib *unpack,
171                    const GLubyte *bitmap );
172    /*@}*/
173
174    
175    /**
176     * \name Texture image functions
177     */
178    /*@{*/
179
180    /**
181     * Choose texture format.
182     * 
183     * This is called by the \c _mesa_store_tex[sub]image[123]d() fallback
184     * functions.  The driver should examine \p internalFormat and return a
185     * gl_format value.
186     */
187    GLuint (*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat,
188                                      GLenum srcFormat, GLenum srcType );
189
190    /**
191     * Called by glTexImage1D().
192     * 
193     * \param target user specified.
194     * \param format user specified.
195     * \param type user specified.
196     * \param pixels user specified.
197     * \param packing indicates the image packing of pixels.
198     * \param texObj is the target texture object.
199     * \param texImage is the target texture image.  It will have the texture \p
200     * width, \p height, \p depth, \p border and \p internalFormat information.
201     * 
202     * \p retainInternalCopy is returned by this function and indicates whether
203     * core Mesa should keep an internal copy of the texture image.
204     *
205     * Drivers should call a fallback routine from texstore.c if needed.
206     */
207    void (*TexImage1D)( GLcontext *ctx, GLenum target, GLint level,
208                        GLint internalFormat,
209                        GLint width, GLint border,
210                        GLenum format, GLenum type, const GLvoid *pixels,
211                        const struct gl_pixelstore_attrib *packing,
212                        struct gl_texture_object *texObj,
213                        struct gl_texture_image *texImage );
214
215    /**
216     * Called by glTexImage2D().
217     * 
218     * \sa dd_function_table::TexImage1D.
219     */
220    void (*TexImage2D)( GLcontext *ctx, GLenum target, GLint level,
221                        GLint internalFormat,
222                        GLint width, GLint height, GLint border,
223                        GLenum format, GLenum type, const GLvoid *pixels,
224                        const struct gl_pixelstore_attrib *packing,
225                        struct gl_texture_object *texObj,
226                        struct gl_texture_image *texImage );
227    
228    /**
229     * Called by glTexImage3D().
230     * 
231     * \sa dd_function_table::TexImage1D.
232     */
233    void (*TexImage3D)( GLcontext *ctx, GLenum target, GLint level,
234                        GLint internalFormat,
235                        GLint width, GLint height, GLint depth, GLint border,
236                        GLenum format, GLenum type, const GLvoid *pixels,
237                        const struct gl_pixelstore_attrib *packing,
238                        struct gl_texture_object *texObj,
239                        struct gl_texture_image *texImage );
240
241    /**
242     * Called by glTexSubImage1D().
243     *
244     * \param target user specified.
245     * \param level user specified.
246     * \param xoffset user specified.
247     * \param yoffset user specified.
248     * \param zoffset user specified.
249     * \param width user specified.
250     * \param height user specified.
251     * \param depth user specified.
252     * \param format user specified.
253     * \param type user specified.
254     * \param pixels user specified.
255     * \param packing indicates the image packing of pixels.
256     * \param texObj is the target texture object.
257     * \param texImage is the target texture image.  It will have the texture \p
258     * width, \p height, \p border and \p internalFormat information.
259     *
260     * The driver should use a fallback routine from texstore.c if needed.
261     */
262    void (*TexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
263                           GLint xoffset, GLsizei width,
264                           GLenum format, GLenum type,
265                           const GLvoid *pixels,
266                           const struct gl_pixelstore_attrib *packing,
267                           struct gl_texture_object *texObj,
268                           struct gl_texture_image *texImage );
269    
270    /**
271     * Called by glTexSubImage2D().
272     *
273     * \sa dd_function_table::TexSubImage1D.
274     */
275    void (*TexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
276                           GLint xoffset, GLint yoffset,
277                           GLsizei width, GLsizei height,
278                           GLenum format, GLenum type,
279                           const GLvoid *pixels,
280                           const struct gl_pixelstore_attrib *packing,
281                           struct gl_texture_object *texObj,
282                           struct gl_texture_image *texImage );
283    
284    /**
285     * Called by glTexSubImage3D().
286     *
287     * \sa dd_function_table::TexSubImage1D.
288     */
289    void (*TexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
290                           GLint xoffset, GLint yoffset, GLint zoffset,
291                           GLsizei width, GLsizei height, GLint depth,
292                           GLenum format, GLenum type,
293                           const GLvoid *pixels,
294                           const struct gl_pixelstore_attrib *packing,
295                           struct gl_texture_object *texObj,
296                           struct gl_texture_image *texImage );
297
298    /**
299     * Called by glGetTexImage().
300     */
301    void (*GetTexImage)( GLcontext *ctx, GLenum target, GLint level,
302                         GLenum format, GLenum type, GLvoid *pixels,
303                         struct gl_texture_object *texObj,
304                         struct gl_texture_image *texImage );
305
306    /**
307     * Called by glCopyTexImage1D().
308     * 
309     * Drivers should use a fallback routine from texstore.c if needed.
310     */
311    void (*CopyTexImage1D)( GLcontext *ctx, GLenum target, GLint level,
312                            GLenum internalFormat, GLint x, GLint y,
313                            GLsizei width, GLint border );
314
315    /**
316     * Called by glCopyTexImage2D().
317     * 
318     * Drivers should use a fallback routine from texstore.c if needed.
319     */
320    void (*CopyTexImage2D)( GLcontext *ctx, GLenum target, GLint level,
321                            GLenum internalFormat, GLint x, GLint y,
322                            GLsizei width, GLsizei height, GLint border );
323
324    /**
325     * Called by glCopyTexSubImage1D().
326     * 
327     * Drivers should use a fallback routine from texstore.c if needed.
328     */
329    void (*CopyTexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
330                               GLint xoffset,
331                               GLint x, GLint y, GLsizei width );
332    /**
333     * Called by glCopyTexSubImage2D().
334     * 
335     * Drivers should use a fallback routine from texstore.c if needed.
336     */
337    void (*CopyTexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
338                               GLint xoffset, GLint yoffset,
339                               GLint x, GLint y,
340                               GLsizei width, GLsizei height );
341    /**
342     * Called by glCopyTexSubImage3D().
343     * 
344     * Drivers should use a fallback routine from texstore.c if needed.
345     */
346    void (*CopyTexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
347                               GLint xoffset, GLint yoffset, GLint zoffset,
348                               GLint x, GLint y,
349                               GLsizei width, GLsizei height );
350
351    /**
352     * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
353     */
354    void (*GenerateMipmap)(GLcontext *ctx, GLenum target,
355                           struct gl_texture_object *texObj);
356
357    /**
358     * Called by glTexImage[123]D when user specifies a proxy texture
359     * target.  
360     *
361     * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails.
362     */
363    GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target,
364                                   GLint level, GLint internalFormat,
365                                   GLenum format, GLenum type,
366                                   GLint width, GLint height,
367                                   GLint depth, GLint border);
368    /*@}*/
369
370    
371    /**
372     * \name Compressed texture functions
373     */
374    /*@{*/
375
376    /**
377     * Called by glCompressedTexImage1D().
378     *
379     * \param target user specified.
380     * \param format user specified.
381     * \param type user specified.
382     * \param pixels user specified.
383     * \param packing indicates the image packing of pixels.
384     * \param texObj is the target texture object.
385     * \param texImage is the target texture image.  It will have the texture \p
386     * width, \p height, \p depth, \p border and \p internalFormat information.
387     *      
388     * \a retainInternalCopy is returned by this function and indicates whether
389     * core Mesa should keep an internal copy of the texture image.
390     */
391    void (*CompressedTexImage1D)( GLcontext *ctx, GLenum target,
392                                  GLint level, GLint internalFormat,
393                                  GLsizei width, GLint border,
394                                  GLsizei imageSize, const GLvoid *data,
395                                  struct gl_texture_object *texObj,
396                                  struct gl_texture_image *texImage );
397    /**
398     * Called by glCompressedTexImage2D().
399     *
400     * \sa dd_function_table::CompressedTexImage1D.
401     */
402    void (*CompressedTexImage2D)( GLcontext *ctx, GLenum target,
403                                  GLint level, GLint internalFormat,
404                                  GLsizei width, GLsizei height, GLint border,
405                                  GLsizei imageSize, const GLvoid *data,
406                                  struct gl_texture_object *texObj,
407                                  struct gl_texture_image *texImage );
408    /**
409     * Called by glCompressedTexImage3D().
410     *
411     * \sa dd_function_table::CompressedTexImage3D.
412     */
413    void (*CompressedTexImage3D)( GLcontext *ctx, GLenum target,
414                                  GLint level, GLint internalFormat,
415                                  GLsizei width, GLsizei height, GLsizei depth,
416                                  GLint border,
417                                  GLsizei imageSize, const GLvoid *data,
418                                  struct gl_texture_object *texObj,
419                                  struct gl_texture_image *texImage );
420
421    /**
422     * Called by glCompressedTexSubImage1D().
423     * 
424     * \param target user specified.
425     * \param level user specified.
426     * \param xoffset user specified.
427     * \param yoffset user specified.
428     * \param zoffset user specified.
429     * \param width user specified.
430     * \param height user specified.
431     * \param depth user specified.
432     * \param imageSize user specified.
433     * \param data user specified.
434     * \param texObj is the target texture object.
435     * \param texImage is the target texture image.  It will have the texture \p
436     * width, \p height, \p depth, \p border and \p internalFormat information.
437     */
438    void (*CompressedTexSubImage1D)(GLcontext *ctx, GLenum target, GLint level,
439                                    GLint xoffset, GLsizei width,
440                                    GLenum format,
441                                    GLsizei imageSize, const GLvoid *data,
442                                    struct gl_texture_object *texObj,
443                                    struct gl_texture_image *texImage);
444    /**
445     * Called by glCompressedTexSubImage2D().
446     *
447     * \sa dd_function_table::CompressedTexImage3D.
448     */
449    void (*CompressedTexSubImage2D)(GLcontext *ctx, GLenum target, GLint level,
450                                    GLint xoffset, GLint yoffset,
451                                    GLsizei width, GLint height,
452                                    GLenum format,
453                                    GLsizei imageSize, const GLvoid *data,
454                                    struct gl_texture_object *texObj,
455                                    struct gl_texture_image *texImage);
456    /**
457     * Called by glCompressedTexSubImage3D().
458     *
459     * \sa dd_function_table::CompressedTexImage3D.
460     */
461    void (*CompressedTexSubImage3D)(GLcontext *ctx, GLenum target, GLint level,
462                                    GLint xoffset, GLint yoffset, GLint zoffset,
463                                    GLsizei width, GLint height, GLint depth,
464                                    GLenum format,
465                                    GLsizei imageSize, const GLvoid *data,
466                                    struct gl_texture_object *texObj,
467                                    struct gl_texture_image *texImage);
468
469
470    /**
471     * Called by glGetCompressedTexImage.
472     */
473    void (*GetCompressedTexImage)(GLcontext *ctx, GLenum target, GLint level,
474                                  GLvoid *img,
475                                  struct gl_texture_object *texObj,
476                                  struct gl_texture_image *texImage);
477
478    /*@}*/
479
480    /**
481     * \name Texture object functions
482     */
483    /*@{*/
484
485    /**
486     * Called by glBindTexture().
487     */
488    void (*BindTexture)( GLcontext *ctx, GLenum target,
489                         struct gl_texture_object *tObj );
490
491    /**
492     * Called to allocate a new texture object.
493     * A new gl_texture_object should be returned.  The driver should
494     * attach to it any device-specific info it needs.
495     */
496    struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name,
497                                                    GLenum target );
498    /**
499     * Called when a texture object is about to be deallocated.  
500     *
501     * Driver should delete the gl_texture_object object and anything
502     * hanging off of it.
503     */
504    void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
505
506    /**
507     * Called to allocate a new texture image object.
508     */
509    struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx );
510
511    /** 
512     * Called to free tImage->Data.
513     */
514    void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
515
516    /** Map texture image data into user space */
517    void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
518    /** Unmap texture images from user space */
519    void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
520
521    /**
522     * Note: no context argument.  This function doesn't initially look
523     * like it belongs here, except that the driver is the only entity
524     * that knows for sure how the texture memory is allocated - via
525     * the above callbacks.  There is then an argument that the driver
526     * knows what memcpy paths might be fast.  Typically this is invoked with
527     * 
528     * to -- a pointer into texture memory allocated by NewTextureImage() above.
529     * from -- a pointer into client memory or a mesa temporary.
530     * sz -- nr bytes to copy.
531     */
532    void* (*TextureMemCpy)( void *to, const void *from, size_t sz );
533
534    /**
535     * Called by glAreTextureResident().
536     */
537    GLboolean (*IsTextureResident)( GLcontext *ctx,
538                                    struct gl_texture_object *t );
539
540    /**
541     * Called when the texture's color lookup table is changed.
542     * 
543     * If \p tObj is NULL then the shared texture palette
544     * gl_texture_object::Palette is to be updated.
545     */
546    void (*UpdateTexturePalette)( GLcontext *ctx,
547                                  struct gl_texture_object *tObj );
548    /*@}*/
549
550    
551    /**
552     * \name Imaging functionality
553     */
554    /*@{*/
555    void (*CopyColorTable)( GLcontext *ctx,
556                            GLenum target, GLenum internalformat,
557                            GLint x, GLint y, GLsizei width );
558
559    void (*CopyColorSubTable)( GLcontext *ctx,
560                               GLenum target, GLsizei start,
561                               GLint x, GLint y, GLsizei width );
562
563    void (*CopyConvolutionFilter1D)( GLcontext *ctx, GLenum target,
564                                     GLenum internalFormat,
565                                     GLint x, GLint y, GLsizei width );
566
567    void (*CopyConvolutionFilter2D)( GLcontext *ctx, GLenum target,
568                                     GLenum internalFormat,
569                                     GLint x, GLint y,
570                                     GLsizei width, GLsizei height );
571    /*@}*/
572
573
574    /**
575     * \name Vertex/fragment program functions
576     */
577    /*@{*/
578    /** Bind a vertex/fragment program */
579    void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog);
580    /** Allocate a new program */
581    struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
582    /** Delete a program */
583    void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog);   
584    /**
585     * Notify driver that a program string (and GPU code) has been specified
586     * or modified.  Return GL_TRUE or GL_FALSE to indicate if the program is
587     * supported by the driver.
588     */
589    GLboolean (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 
590                                     struct gl_program *prog);
591
592    /** Query if program can be loaded onto hardware */
593    GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 
594                                 struct gl_program *prog);
595    
596    /*@}*/
597
598
599    /**
600     * \name State-changing functions.
601     *
602     * \note drawing functions are above.
603     *
604     * These functions are called by their corresponding OpenGL API functions.
605     * They are \e also called by the gl_PopAttrib() function!!!
606     * May add more functions like these to the device driver in the future.
607     */
608    /*@{*/
609    /** Specify the alpha test function */
610    void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref);
611    /** Set the blend color */
612    void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
613    /** Set the blend equation */
614    void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA);
615    /** Specify pixel arithmetic */
616    void (*BlendFuncSeparate)(GLcontext *ctx,
617                              GLenum sfactorRGB, GLenum dfactorRGB,
618                              GLenum sfactorA, GLenum dfactorA);
619    /** Specify clear values for the color buffers */
620    void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]);
621    /** Specify the clear value for the depth buffer */
622    void (*ClearDepth)(GLcontext *ctx, GLclampd d);
623    /** Specify the clear value for the stencil buffer */
624    void (*ClearStencil)(GLcontext *ctx, GLint s);
625    /** Specify a plane against which all geometry is clipped */
626    void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation );
627    /** Enable and disable writing of frame buffer color components */
628    void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
629                      GLboolean bmask, GLboolean amask );
630    void (*ColorMaskIndexed)(GLcontext *ctx, GLuint buf, GLboolean rmask,
631                             GLboolean gmask, GLboolean bmask, GLboolean amask);
632    /** Cause a material color to track the current color */
633    void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode);
634    /** Specify whether front- or back-facing facets can be culled */
635    void (*CullFace)(GLcontext *ctx, GLenum mode);
636    /** Define front- and back-facing polygons */
637    void (*FrontFace)(GLcontext *ctx, GLenum mode);
638    /** Specify the value used for depth buffer comparisons */
639    void (*DepthFunc)(GLcontext *ctx, GLenum func);
640    /** Enable or disable writing into the depth buffer */
641    void (*DepthMask)(GLcontext *ctx, GLboolean flag);
642    /** Specify mapping of depth values from NDC to window coordinates */
643    void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval);
644    /** Specify the current buffer for writing */
645    void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
646    /** Specify the buffers for writing for fragment programs*/
647    void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
648    /** Enable or disable server-side gl capabilities */
649    void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state);
650    /** Specify fog parameters */
651    void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
652    /** Specify implementation-specific hints */
653    void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
654    /** Set light source parameters.
655     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
656     * been transformed to eye-space.
657     */
658    void (*Lightfv)(GLcontext *ctx, GLenum light,
659                    GLenum pname, const GLfloat *params );
660    /** Set the lighting model parameters */
661    void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
662    /** Specify the line stipple pattern */
663    void (*LineStipple)(GLcontext *ctx, GLint factor, GLushort pattern );
664    /** Specify the width of rasterized lines */
665    void (*LineWidth)(GLcontext *ctx, GLfloat width);
666    /** Specify a logical pixel operation for color index rendering */
667    void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
668    void (*PointParameterfv)(GLcontext *ctx, GLenum pname,
669                             const GLfloat *params);
670    /** Specify the diameter of rasterized points */
671    void (*PointSize)(GLcontext *ctx, GLfloat size);
672    /** Select a polygon rasterization mode */
673    void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
674    /** Set the scale and units used to calculate depth values */
675    void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units);
676    /** Set the polygon stippling pattern */
677    void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
678    /* Specifies the current buffer for reading */
679    void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
680    /** Set rasterization mode */
681    void (*RenderMode)(GLcontext *ctx, GLenum mode );
682    /** Define the scissor box */
683    void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
684    /** Select flat or smooth shading */
685    void (*ShadeModel)(GLcontext *ctx, GLenum mode);
686    /** OpenGL 2.0 two-sided StencilFunc */
687    void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func,
688                                GLint ref, GLuint mask);
689    /** OpenGL 2.0 two-sided StencilMask */
690    void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask);
691    /** OpenGL 2.0 two-sided StencilOp */
692    void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail,
693                              GLenum zfail, GLenum zpass);
694    /** Control the generation of texture coordinates */
695    void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname,
696                   const GLfloat *params);
697    /** Set texture environment parameters */
698    void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname,
699                   const GLfloat *param);
700    /** Set texture parameters */
701    void (*TexParameter)(GLcontext *ctx, GLenum target,
702                         struct gl_texture_object *texObj,
703                         GLenum pname, const GLfloat *params);
704    /** Set the viewport */
705    void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
706    /*@}*/
707
708
709    /**
710     * \name Vertex/pixel buffer object functions
711     */
712 #if FEATURE_ARB_vertex_buffer_object
713    /*@{*/
714    void (*BindBuffer)( GLcontext *ctx, GLenum target,
715                        struct gl_buffer_object *obj );
716
717    struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer,
718                                                  GLenum target );
719    
720    void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
721
722    GLboolean (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
723                             const GLvoid *data, GLenum usage,
724                             struct gl_buffer_object *obj );
725
726    void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
727                           GLsizeiptrARB size, const GLvoid *data,
728                           struct gl_buffer_object *obj );
729
730    void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
731                              GLintptrARB offset, GLsizeiptrARB size,
732                              GLvoid *data, struct gl_buffer_object *obj );
733
734    void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
735                         struct gl_buffer_object *obj );
736
737    void (*CopyBufferSubData)( GLcontext *ctx,
738                               struct gl_buffer_object *src,
739                               struct gl_buffer_object *dst,
740                               GLintptr readOffset, GLintptr writeOffset,
741                               GLsizeiptr size );
742
743    /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
744     */
745    void * (*MapBufferRange)( GLcontext *ctx, GLenum target, GLintptr offset,
746                              GLsizeiptr length, GLbitfield access,
747                              struct gl_buffer_object *obj);
748
749    void (*FlushMappedBufferRange)(GLcontext *ctx, GLenum target, 
750                                   GLintptr offset, GLsizeiptr length,
751                                   struct gl_buffer_object *obj);
752
753    GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
754                              struct gl_buffer_object *obj );
755    /*@}*/
756 #endif
757
758    /**
759     * \name Functions for GL_APPLE_object_purgeable
760     */
761 #if FEATURE_APPLE_object_purgeable
762    /*@{*/
763    /* variations on ObjectPurgeable */
764    GLenum (*BufferObjectPurgeable)( GLcontext *ctx, struct gl_buffer_object *obj, GLenum option );
765    GLenum (*RenderObjectPurgeable)( GLcontext *ctx, struct gl_renderbuffer *obj, GLenum option );
766    GLenum (*TextureObjectPurgeable)( GLcontext *ctx, struct gl_texture_object *obj, GLenum option );
767
768    /* variations on ObjectUnpurgeable */
769    GLenum (*BufferObjectUnpurgeable)( GLcontext *ctx, struct gl_buffer_object *obj, GLenum option );
770    GLenum (*RenderObjectUnpurgeable)( GLcontext *ctx, struct gl_renderbuffer *obj, GLenum option );
771    GLenum (*TextureObjectUnpurgeable)( GLcontext *ctx, struct gl_texture_object *obj, GLenum option );
772    /*@}*/
773 #endif
774
775    /**
776     * \name Functions for GL_EXT_framebuffer_object
777     */
778 #if FEATURE_EXT_framebuffer_object
779    /*@{*/
780    struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
781    struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
782    void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
783                            struct gl_framebuffer *drawFb,
784                            struct gl_framebuffer *readFb);
785    void (*FramebufferRenderbuffer)(GLcontext *ctx, 
786                                    struct gl_framebuffer *fb,
787                                    GLenum attachment,
788                                    struct gl_renderbuffer *rb);
789    void (*RenderTexture)(GLcontext *ctx,
790                          struct gl_framebuffer *fb,
791                          struct gl_renderbuffer_attachment *att);
792    void (*FinishRenderTexture)(GLcontext *ctx,
793                                struct gl_renderbuffer_attachment *att);
794    void (*ValidateFramebuffer)(GLcontext *ctx,
795                                struct gl_framebuffer *fb);
796    /*@}*/
797 #endif
798 #if FEATURE_EXT_framebuffer_blit
799    void (*BlitFramebuffer)(GLcontext *ctx,
800                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
801                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
802                            GLbitfield mask, GLenum filter);
803 #endif
804
805    /**
806     * \name Query objects
807     */
808    /*@{*/
809    struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
810    void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
811    void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
812    void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
813    void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
814    void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
815    /*@}*/
816
817
818    /**
819     * \name Vertex Array objects
820     */
821    /*@{*/
822    struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
823    void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
824    void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
825    /*@}*/
826
827    /**
828     * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
829     */
830    /*@{*/
831    void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
832    void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
833                               const GLcharARB *name);
834    void (*CompileShader)(GLcontext *ctx, GLuint shader);
835    GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
836    GLuint (*CreateProgram)(GLcontext *ctx);
837    void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
838    void (*DeleteShader)(GLcontext *ctx, GLuint shader);
839    void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
840    void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
841                            GLsizei maxLength, GLsizei * length, GLint * size,
842                            GLenum * type, GLcharARB * name);
843    void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
844                             GLsizei maxLength, GLsizei *length, GLint *size,
845                             GLenum *type, GLcharARB *name);
846    void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
847                               GLsizei *count, GLuint *obj);
848    GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
849                               const GLcharARB *name);
850    GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
851    void (*GetProgramiv)(GLcontext *ctx, GLuint program,
852                         GLenum pname, GLint *params);
853    void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
854                              GLsizei *length, GLchar *infoLog);
855    void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
856                        GLenum pname, GLint *params);
857    void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
858                             GLsizei *length, GLchar *infoLog);
859    void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
860                            GLsizei *length, GLcharARB *sourceOut);
861    void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
862                         GLfloat *params);
863    void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
864                         GLint *params);
865    GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
866                                const GLcharARB *name);
867    GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
868    GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
869    void (*LinkProgram)(GLcontext *ctx, GLuint program);
870    void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
871    void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
872                    const GLvoid *values, GLenum type);
873    void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
874                          GLint location, GLsizei count,
875                          GLboolean transpose, const GLfloat *values);
876    void (*UseProgram)(GLcontext *ctx, GLuint program);
877    void (*ValidateProgram)(GLcontext *ctx, GLuint program);
878    /* XXX many more to come */
879    /*@}*/
880
881
882    /**
883     * \name Support for multiple T&L engines
884     */
885    /*@{*/
886
887    /**
888     * Bitmask of state changes that require the current T&L module to be
889     * validated, using ValidateTnlModule() below.
890     */
891    GLuint NeedValidate;
892
893    /**
894     * Validate the current T&L module. 
895     *
896     * This is called directly after UpdateState() when a state change that has
897     * occurred matches the dd_function_table::NeedValidate bitmask above.  This
898     * ensures all computed values are up to date, thus allowing the driver to
899     * decide if the current T&L module needs to be swapped out.
900     *
901     * This must be non-NULL if a driver installs a custom T&L module and sets
902     * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
903     */
904    void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
905
906
907 #define PRIM_OUTSIDE_BEGIN_END   (GL_POLYGON+1)
908 #define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
909 #define PRIM_UNKNOWN             (GL_POLYGON+3)
910
911    /**
912     * Set by the driver-supplied T&L engine.  
913     *
914     * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
915     */
916    GLuint CurrentExecPrimitive;
917
918    /**
919     * Current state of an in-progress compilation.  
920     *
921     * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END,
922     * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above.
923     */
924    GLuint CurrentSavePrimitive;
925
926
927 #define FLUSH_STORED_VERTICES 0x1
928 #define FLUSH_UPDATE_CURRENT  0x2
929    /**
930     * Set by the driver-supplied T&L engine whenever vertices are buffered
931     * between glBegin()/glEnd() objects or __GLcontextRec::Current is not
932     * updated.
933     *
934     * The dd_function_table::FlushVertices call below may be used to resolve
935     * these conditions.
936     */
937    GLuint NeedFlush;
938    GLuint SaveNeedFlush;
939
940
941    /* Called prior to any of the GLvertexformat functions being
942     * called.  Paired with Driver.FlushVertices().
943     */
944    void (*BeginVertices)( GLcontext *ctx );
945
946    /**
947     * If inside glBegin()/glEnd(), it should ASSERT(0).  Otherwise, if
948     * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
949     * vertices, if FLUSH_UPDATE_CURRENT bit is set updates
950     * __GLcontextRec::Current and gl_light_attrib::Material
951     *
952     * Note that the default T&L engine never clears the
953     * FLUSH_UPDATE_CURRENT bit, even after performing the update.
954     */
955    void (*FlushVertices)( GLcontext *ctx, GLuint flags );
956    void (*SaveFlushVertices)( GLcontext *ctx );
957
958    /**
959     * Give the driver the opportunity to hook in its own vtxfmt for
960     * compiling optimized display lists.  This is called on each valid
961     * glBegin() during list compilation.
962     */
963    GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode );
964
965    /**
966     * Notify driver that the special derived value _NeedEyeCoords has
967     * changed.
968     */
969    void (*LightingSpaceChange)( GLcontext *ctx );
970
971    /**
972     * Called by glNewList().
973     *
974     * Let the T&L component know what is going on with display lists
975     * in time to make changes to dispatch tables, etc.
976     */
977    void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
978    /**
979     * Called by glEndList().
980     *
981     * \sa dd_function_table::NewList.
982     */
983    void (*EndList)( GLcontext *ctx );
984
985    /**
986     * Called by glCallList(s).
987     *
988     * Notify the T&L component before and after calling a display list.
989     */
990    void (*BeginCallList)( GLcontext *ctx, 
991                           struct gl_display_list *dlist );
992    /**
993     * Called by glEndCallList().
994     *
995     * \sa dd_function_table::BeginCallList.
996     */
997    void (*EndCallList)( GLcontext *ctx );
998
999
1000 #if FEATURE_ARB_sync
1001    /**
1002     * \name GL_ARB_sync interfaces
1003     */
1004    /*@{*/
1005    struct gl_sync_object * (*NewSyncObject)(GLcontext *, GLenum);
1006    void (*FenceSync)(GLcontext *, struct gl_sync_object *, GLenum, GLbitfield);
1007    void (*DeleteSyncObject)(GLcontext *, struct gl_sync_object *);
1008    void (*CheckSync)(GLcontext *, struct gl_sync_object *);
1009    void (*ClientWaitSync)(GLcontext *, struct gl_sync_object *,
1010                           GLbitfield, GLuint64);
1011    void (*ServerWaitSync)(GLcontext *, struct gl_sync_object *,
1012                           GLbitfield, GLuint64);
1013    /*@}*/
1014 #endif
1015
1016    /** GL_NV_conditional_render */
1017    void (*BeginConditionalRender)(GLcontext *ctx, struct gl_query_object *q,
1018                                   GLenum mode);
1019    void (*EndConditionalRender)(GLcontext *ctx, struct gl_query_object *q);
1020
1021 #if FEATURE_OES_draw_texture
1022    /**
1023     * \name GL_OES_draw_texture interface
1024     */
1025    /*@{*/
1026    void (*DrawTex)(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
1027                    GLfloat width, GLfloat height);
1028    /*@}*/
1029 #endif
1030
1031 #if FEATURE_OES_EGL_image
1032    void (*EGLImageTargetTexture2D)(GLcontext *ctx, GLenum target,
1033                                    struct gl_texture_object *texObj,
1034                                    struct gl_texture_image *texImage,
1035                                    GLeglImageOES image_handle);
1036    void (*EGLImageTargetRenderbufferStorage)(GLcontext *ctx,
1037                                              struct gl_renderbuffer *rb,
1038                                              void *image_handle);
1039 #endif
1040
1041 };
1042
1043
1044 /**
1045  * Transform/Clip/Lighting interface
1046  *
1047  * Drivers present a reduced set of the functions possible in
1048  * glBegin()/glEnd() objects.  Core mesa provides translation stubs for the
1049  * remaining functions to map down to these entry points.
1050  *
1051  * These are the initial values to be installed into dispatch by
1052  * mesa.  If the T&L driver wants to modify the dispatch table
1053  * while installed, it must do so itself.  It would be possible for
1054  * the vertexformat to install its own initial values for these
1055  * functions, but this way there is an obvious list of what is
1056  * expected of the driver.
1057  *
1058  * If the driver wants to hook in entry points other than those
1059  * listed, it must restore them to their original values in
1060  * the disable() callback, below.
1061  */
1062 typedef struct {
1063    /**
1064     * \name Vertex
1065     */
1066    /*@{*/
1067    void (GLAPIENTRYP ArrayElement)( GLint );
1068    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
1069    void (GLAPIENTRYP Color3fv)( const GLfloat * );
1070    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1071    void (GLAPIENTRYP Color4fv)( const GLfloat * );
1072    void (GLAPIENTRYP EdgeFlag)( GLboolean );
1073    void (GLAPIENTRYP EvalCoord1f)( GLfloat );
1074    void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * );
1075    void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat );
1076    void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * );
1077    void (GLAPIENTRYP EvalPoint1)( GLint );
1078    void (GLAPIENTRYP EvalPoint2)( GLint, GLint );
1079    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
1080    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
1081    void (GLAPIENTRYP Indexf)( GLfloat );
1082    void (GLAPIENTRYP Indexfv)( const GLfloat * );
1083    void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * );
1084    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
1085    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
1086    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
1087    void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
1088    void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
1089    void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
1090    void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
1091    void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
1092    void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
1093    void (GLAPIENTRYP Normal3fv)( const GLfloat * );
1094    void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
1095    void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
1096    void (GLAPIENTRYP TexCoord1f)( GLfloat );
1097    void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
1098    void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
1099    void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
1100    void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
1101    void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
1102    void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1103    void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
1104    void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
1105    void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
1106    void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
1107    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
1108    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1109    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
1110    void (GLAPIENTRYP CallList)( GLuint );
1111    void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );
1112    void (GLAPIENTRYP Begin)( GLenum );
1113    void (GLAPIENTRYP End)( void );
1114    /* GL_NV_vertex_program */
1115    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
1116    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
1117    void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
1118    void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
1119    void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1120    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
1121    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1122    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
1123 #if FEATURE_ARB_vertex_program
1124    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
1125    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
1126    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
1127    void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
1128    void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1129    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
1130    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1131    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
1132 #endif
1133    /*@}*/
1134
1135    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
1136
1137    /**
1138     * \name Array
1139     */
1140    /*@{*/
1141    void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
1142    void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
1143                          const GLvoid *indices );
1144    void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
1145                               GLuint end, GLsizei count,
1146                               GLenum type, const GLvoid *indices );
1147    void (GLAPIENTRYP MultiDrawElementsEXT)( GLenum mode, const GLsizei *count,
1148                                             GLenum type,
1149                                             const GLvoid **indices,
1150                                             GLsizei primcount);
1151    void (GLAPIENTRYP DrawElementsBaseVertex)( GLenum mode, GLsizei count,
1152                                               GLenum type,
1153                                               const GLvoid *indices,
1154                                               GLint basevertex );
1155    void (GLAPIENTRYP DrawRangeElementsBaseVertex)( GLenum mode, GLuint start,
1156                                                    GLuint end, GLsizei count,
1157                                                    GLenum type,
1158                                                    const GLvoid *indices,
1159                                                    GLint basevertex);
1160    void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode,
1161                                                    const GLsizei *count,
1162                                                    GLenum type,
1163                                                    const GLvoid **indices,
1164                                                    GLsizei primcount,
1165                                                    const GLint *basevertex);
1166    void (GLAPIENTRYP DrawArraysInstanced)(GLenum mode, GLint first,
1167                                           GLsizei count, GLsizei primcount);
1168    void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count,
1169                                             GLenum type, const GLvoid *indices,
1170                                             GLsizei primcount);
1171    /*@}*/
1172
1173    /**
1174     * \name Eval
1175     *
1176     * If you don't support eval, fallback to the default vertex format
1177     * on receiving an eval call and use the pipeline mechanism to
1178     * provide partial T&L acceleration.
1179     *
1180     * Mesa will provide a set of helper functions to do eval within
1181     * accelerated vertex formats, eventually...
1182     */
1183    /*@{*/
1184    void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
1185    void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
1186    /*@}*/
1187
1188 } GLvertexformat;
1189
1190
1191 #endif /* DD_INCLUDED */