OSDN Git Service

ce5e158626616b0573671a76476775f22beec131
[android-x86/external-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     * pointer to an appropriate gl_texture_format.
186     */
187    const struct gl_texture_format *(*ChooseTextureFormat)( GLcontext *ctx,
188                       GLint internalFormat, 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     * Called to query number of bytes of storage needed to store the
480     * specified compressed texture.
481     */
482    GLuint (*CompressedTextureSize)( GLcontext *ctx, GLsizei width,
483                                     GLsizei height, GLsizei depth,
484                                     GLenum format );
485    /*@}*/
486
487    /**
488     * \name Texture object functions
489     */
490    /*@{*/
491
492    /**
493     * Called by glBindTexture().
494     */
495    void (*BindTexture)( GLcontext *ctx, GLenum target,
496                         struct gl_texture_object *tObj );
497
498    /**
499     * Called to allocate a new texture object.
500     * A new gl_texture_object should be returned.  The driver should
501     * attach to it any device-specific info it needs.
502     */
503    struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name,
504                                                    GLenum target );
505    /**
506     * Called when a texture object is about to be deallocated.  
507     *
508     * Driver should delete the gl_texture_object object and anything
509     * hanging off of it.
510     */
511    void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
512
513    /**
514     * Called to allocate a new texture image object.
515     */
516    struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx );
517
518    /** 
519     * Called to free tImage->Data.
520     */
521    void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
522
523    /** Map texture image data into user space */
524    void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
525    /** Unmap texture images from user space */
526    void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
527
528    /**
529     * Note: no context argument.  This function doesn't initially look
530     * like it belongs here, except that the driver is the only entity
531     * that knows for sure how the texture memory is allocated - via
532     * the above callbacks.  There is then an argument that the driver
533     * knows what memcpy paths might be fast.  Typically this is invoked with
534     * 
535     * to -- a pointer into texture memory allocated by NewTextureImage() above.
536     * from -- a pointer into client memory or a mesa temporary.
537     * sz -- nr bytes to copy.
538     */
539    void* (*TextureMemCpy)( void *to, const void *from, size_t sz );
540
541    /**
542     * Called by glAreTextureResident().
543     */
544    GLboolean (*IsTextureResident)( GLcontext *ctx,
545                                    struct gl_texture_object *t );
546
547    /**
548     * Called by glPrioritizeTextures().
549     */
550    void (*PrioritizeTexture)( GLcontext *ctx,  struct gl_texture_object *t,
551                               GLclampf priority );
552
553    /**
554     * Called by glActiveTextureARB() to set current texture unit.
555     */
556    void (*ActiveTexture)( GLcontext *ctx, GLuint texUnitNumber );
557
558    /**
559     * Called when the texture's color lookup table is changed.
560     * 
561     * If \p tObj is NULL then the shared texture palette
562     * gl_texture_object::Palette is to be updated.
563     */
564    void (*UpdateTexturePalette)( GLcontext *ctx,
565                                  struct gl_texture_object *tObj );
566    /*@}*/
567
568    
569    /**
570     * \name Imaging functionality
571     */
572    /*@{*/
573    void (*CopyColorTable)( GLcontext *ctx,
574                            GLenum target, GLenum internalformat,
575                            GLint x, GLint y, GLsizei width );
576
577    void (*CopyColorSubTable)( GLcontext *ctx,
578                               GLenum target, GLsizei start,
579                               GLint x, GLint y, GLsizei width );
580
581    void (*CopyConvolutionFilter1D)( GLcontext *ctx, GLenum target,
582                                     GLenum internalFormat,
583                                     GLint x, GLint y, GLsizei width );
584
585    void (*CopyConvolutionFilter2D)( GLcontext *ctx, GLenum target,
586                                     GLenum internalFormat,
587                                     GLint x, GLint y,
588                                     GLsizei width, GLsizei height );
589    /*@}*/
590
591
592    /**
593     * \name Vertex/fragment program functions
594     */
595    /*@{*/
596    /** Bind a vertex/fragment program */
597    void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog);
598    /** Allocate a new program */
599    struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
600    /** Delete a program */
601    void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog);   
602    /** Notify driver that a program string has been specified. */
603    void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 
604                                struct gl_program *prog);
605
606    /** Query if program can be loaded onto hardware */
607    GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 
608                                 struct gl_program *prog);
609    
610    /*@}*/
611
612
613    /**
614     * \name State-changing functions.
615     *
616     * \note drawing functions are above.
617     *
618     * These functions are called by their corresponding OpenGL API functions.
619     * They are \e also called by the gl_PopAttrib() function!!!
620     * May add more functions like these to the device driver in the future.
621     */
622    /*@{*/
623    /** Specify the alpha test function */
624    void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref);
625    /** Set the blend color */
626    void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
627    /** Set the blend equation */
628    void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA);
629    /** Specify pixel arithmetic */
630    void (*BlendFuncSeparate)(GLcontext *ctx,
631                              GLenum sfactorRGB, GLenum dfactorRGB,
632                              GLenum sfactorA, GLenum dfactorA);
633    /** Specify clear values for the color buffers */
634    void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]);
635    /** Specify the clear value for the depth buffer */
636    void (*ClearDepth)(GLcontext *ctx, GLclampd d);
637    /** Specify the clear value for the color index buffers */
638    void (*ClearIndex)(GLcontext *ctx, GLuint index);
639    /** Specify the clear value for the stencil buffer */
640    void (*ClearStencil)(GLcontext *ctx, GLint s);
641    /** Specify a plane against which all geometry is clipped */
642    void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation );
643    /** Enable and disable writing of frame buffer color components */
644    void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
645                      GLboolean bmask, GLboolean amask );
646    /** Cause a material color to track the current color */
647    void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode);
648    /** Specify whether front- or back-facing facets can be culled */
649    void (*CullFace)(GLcontext *ctx, GLenum mode);
650    /** Define front- and back-facing polygons */
651    void (*FrontFace)(GLcontext *ctx, GLenum mode);
652    /** Specify the value used for depth buffer comparisons */
653    void (*DepthFunc)(GLcontext *ctx, GLenum func);
654    /** Enable or disable writing into the depth buffer */
655    void (*DepthMask)(GLcontext *ctx, GLboolean flag);
656    /** Specify mapping of depth values from NDC to window coordinates */
657    void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval);
658    /** Specify the current buffer for writing */
659    void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
660    /** Specify the buffers for writing for fragment programs*/
661    void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
662    /** Enable or disable server-side gl capabilities */
663    void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state);
664    /** Specify fog parameters */
665    void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
666    /** Specify implementation-specific hints */
667    void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
668    /** Control the writing of individual bits in the color index buffers */
669    void (*IndexMask)(GLcontext *ctx, GLuint mask);
670    /** Set light source parameters.
671     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
672     * been transformed to eye-space.
673     */
674    void (*Lightfv)(GLcontext *ctx, GLenum light,
675                    GLenum pname, const GLfloat *params );
676    /** Set the lighting model parameters */
677    void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
678    /** Specify the line stipple pattern */
679    void (*LineStipple)(GLcontext *ctx, GLint factor, GLushort pattern );
680    /** Specify the width of rasterized lines */
681    void (*LineWidth)(GLcontext *ctx, GLfloat width);
682    /** Specify a logical pixel operation for color index rendering */
683    void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
684    void (*PointParameterfv)(GLcontext *ctx, GLenum pname,
685                             const GLfloat *params);
686    /** Specify the diameter of rasterized points */
687    void (*PointSize)(GLcontext *ctx, GLfloat size);
688    /** Select a polygon rasterization mode */
689    void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
690    /** Set the scale and units used to calculate depth values */
691    void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units);
692    /** Set the polygon stippling pattern */
693    void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
694    /* Specifies the current buffer for reading */
695    void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
696    /** Set rasterization mode */
697    void (*RenderMode)(GLcontext *ctx, GLenum mode );
698    /** Define the scissor box */
699    void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
700    /** Select flat or smooth shading */
701    void (*ShadeModel)(GLcontext *ctx, GLenum mode);
702    /** OpenGL 2.0 two-sided StencilFunc */
703    void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func,
704                                GLint ref, GLuint mask);
705    /** OpenGL 2.0 two-sided StencilMask */
706    void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask);
707    /** OpenGL 2.0 two-sided StencilOp */
708    void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail,
709                              GLenum zfail, GLenum zpass);
710    /** Control the generation of texture coordinates */
711    void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname,
712                   const GLfloat *params);
713    /** Set texture environment parameters */
714    void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname,
715                   const GLfloat *param);
716    /** Set texture parameters */
717    void (*TexParameter)(GLcontext *ctx, GLenum target,
718                         struct gl_texture_object *texObj,
719                         GLenum pname, const GLfloat *params);
720    void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat);
721    /** Set the viewport */
722    void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
723    /*@}*/
724
725
726    /**
727     * \name Vertex array functions
728     *
729     * Called by the corresponding OpenGL functions.
730     */
731    /*@{*/
732    void (*VertexPointer)(GLcontext *ctx, GLint size, GLenum type,
733                          GLsizei stride, const GLvoid *ptr);
734    void (*NormalPointer)(GLcontext *ctx, GLenum type,
735                          GLsizei stride, const GLvoid *ptr);
736    void (*ColorPointer)(GLcontext *ctx, GLint size, GLenum type,
737                         GLsizei stride, const GLvoid *ptr);
738    void (*FogCoordPointer)(GLcontext *ctx, GLenum type,
739                            GLsizei stride, const GLvoid *ptr);
740    void (*IndexPointer)(GLcontext *ctx, GLenum type,
741                         GLsizei stride, const GLvoid *ptr);
742    void (*SecondaryColorPointer)(GLcontext *ctx, GLint size, GLenum type,
743                                  GLsizei stride, const GLvoid *ptr);
744    void (*TexCoordPointer)(GLcontext *ctx, GLint size, GLenum type,
745                            GLsizei stride, const GLvoid *ptr);
746    void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr);
747    void (*VertexAttribPointer)(GLcontext *ctx, GLuint index, GLint size,
748                                GLenum type, GLsizei stride, const GLvoid *ptr);
749    void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count );
750    void (*UnlockArraysEXT)( GLcontext *ctx );
751    /*@}*/
752
753
754    /** 
755     * \name State-query functions
756     *
757     * Return GL_TRUE if query was completed, GL_FALSE otherwise.
758     */
759    /*@{*/
760    /** Return the value or values of a selected parameter */
761    GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result);
762    /** Return the value or values of a selected parameter */
763    GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result);
764    /** Return the value or values of a selected parameter */
765    GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result);
766    /** Return the value or values of a selected parameter */
767    GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result);
768    /** Return the value or values of a selected parameter */
769    GLboolean (*GetInteger64v)(GLcontext *ctx, GLenum pname, GLint64 *result);
770    /** Return the value or values of a selected parameter */
771    GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result);
772    /*@}*/
773    
774
775    /**
776     * \name Vertex/pixel buffer object functions
777     */
778 #if FEATURE_ARB_vertex_buffer_object
779    /*@{*/
780    void (*BindBuffer)( GLcontext *ctx, GLenum target,
781                        struct gl_buffer_object *obj );
782
783    struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer,
784                                                  GLenum target );
785    
786    void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
787
788    GLboolean (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
789                             const GLvoid *data, GLenum usage,
790                             struct gl_buffer_object *obj );
791
792    void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
793                           GLsizeiptrARB size, const GLvoid *data,
794                           struct gl_buffer_object *obj );
795
796    void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
797                              GLintptrARB offset, GLsizeiptrARB size,
798                              GLvoid *data, struct gl_buffer_object *obj );
799
800    void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
801                         struct gl_buffer_object *obj );
802
803    void (*CopyBufferSubData)( GLcontext *ctx,
804                               struct gl_buffer_object *src,
805                               struct gl_buffer_object *dst,
806                               GLintptr readOffset, GLintptr writeOffset,
807                               GLsizeiptr size );
808
809    /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
810     */
811    void * (*MapBufferRange)( GLcontext *ctx, GLenum target,
812                              GLintptr offset, GLsizeiptr length, GLbitfield access,
813                              struct gl_buffer_object *obj);
814
815    void (*FlushMappedBufferRange) (GLcontext *ctx, GLenum target, 
816                                    GLintptr offset, GLsizeiptr length,
817                                    struct gl_buffer_object *obj);
818
819    GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
820                              struct gl_buffer_object *obj );
821    /*@}*/
822 #endif
823
824    /**
825     * \name Functions for GL_EXT_framebuffer_object
826     */
827 #if FEATURE_EXT_framebuffer_object
828    /*@{*/
829    struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
830    struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
831    void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
832                            struct gl_framebuffer *fb, struct gl_framebuffer *fbread);
833    void (*FramebufferRenderbuffer)(GLcontext *ctx, 
834                                    struct gl_framebuffer *fb,
835                                    GLenum attachment,
836                                    struct gl_renderbuffer *rb);
837    void (*RenderTexture)(GLcontext *ctx,
838                          struct gl_framebuffer *fb,
839                          struct gl_renderbuffer_attachment *att);
840    void (*FinishRenderTexture)(GLcontext *ctx,
841                                struct gl_renderbuffer_attachment *att);
842    void (*ValidateFramebuffer)(GLcontext *ctx,
843                                struct gl_framebuffer *fb);
844    /*@}*/
845 #endif
846 #if FEATURE_EXT_framebuffer_blit
847    void (*BlitFramebuffer)(GLcontext *ctx,
848                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
849                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
850                            GLbitfield mask, GLenum filter);
851 #endif
852
853    /**
854     * \name Query objects
855     */
856    /*@{*/
857    struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
858    void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
859    void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
860    void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
861    void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
862    void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
863    /*@}*/
864
865
866    /**
867     * \name Vertex Array objects
868     */
869    /*@{*/
870    struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
871    void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
872    void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
873    /*@}*/
874
875    /**
876     * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
877     */
878    /*@{*/
879    void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
880    void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
881                               const GLcharARB *name);
882    void (*CompileShader)(GLcontext *ctx, GLuint shader);
883    GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
884    GLuint (*CreateProgram)(GLcontext *ctx);
885    void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
886    void (*DeleteShader)(GLcontext *ctx, GLuint shader);
887    void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
888    void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
889                            GLsizei maxLength, GLsizei * length, GLint * size,
890                            GLenum * type, GLcharARB * name);
891    void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
892                             GLsizei maxLength, GLsizei *length, GLint *size,
893                             GLenum *type, GLcharARB *name);
894    void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
895                               GLsizei *count, GLuint *obj);
896    GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
897                               const GLcharARB *name);
898    GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
899    void (*GetProgramiv)(GLcontext *ctx, GLuint program,
900                         GLenum pname, GLint *params);
901    void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
902                              GLsizei *length, GLchar *infoLog);
903    void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
904                        GLenum pname, GLint *params);
905    void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
906                             GLsizei *length, GLchar *infoLog);
907    void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
908                            GLsizei *length, GLcharARB *sourceOut);
909    void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
910                         GLfloat *params);
911    void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
912                         GLint *params);
913    GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
914                                const GLcharARB *name);
915    GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
916    GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
917    void (*LinkProgram)(GLcontext *ctx, GLuint program);
918    void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
919    void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
920                    const GLvoid *values, GLenum type);
921    void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
922                          GLint location, GLsizei count,
923                          GLboolean transpose, const GLfloat *values);
924    void (*UseProgram)(GLcontext *ctx, GLuint program);
925    void (*ValidateProgram)(GLcontext *ctx, GLuint program);
926    /* XXX many more to come */
927    /*@}*/
928
929
930    /**
931     * \name Support for multiple T&L engines
932     */
933    /*@{*/
934
935    /**
936     * Bitmask of state changes that require the current T&L module to be
937     * validated, using ValidateTnlModule() below.
938     */
939    GLuint NeedValidate;
940
941    /**
942     * Validate the current T&L module. 
943     *
944     * This is called directly after UpdateState() when a state change that has
945     * occurred matches the dd_function_table::NeedValidate bitmask above.  This
946     * ensures all computed values are up to date, thus allowing the driver to
947     * decide if the current T&L module needs to be swapped out.
948     *
949     * This must be non-NULL if a driver installs a custom T&L module and sets
950     * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
951     */
952    void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
953
954
955 #define PRIM_OUTSIDE_BEGIN_END   (GL_POLYGON+1)
956 #define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
957 #define PRIM_UNKNOWN             (GL_POLYGON+3)
958
959    /**
960     * Set by the driver-supplied T&L engine.  
961     *
962     * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
963     */
964    GLuint CurrentExecPrimitive;
965
966    /**
967     * Current state of an in-progress compilation.  
968     *
969     * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END,
970     * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above.
971     */
972    GLuint CurrentSavePrimitive;
973
974
975 #define FLUSH_STORED_VERTICES 0x1
976 #define FLUSH_UPDATE_CURRENT  0x2
977    /**
978     * Set by the driver-supplied T&L engine whenever vertices are buffered
979     * between glBegin()/glEnd() objects or __GLcontextRec::Current is not
980     * updated.
981     *
982     * The dd_function_table::FlushVertices call below may be used to resolve
983     * these conditions.
984     */
985    GLuint NeedFlush;
986    GLuint SaveNeedFlush;
987
988
989    /* Called prior to any of the GLvertexformat functions being
990     * called.  Paired with Driver.FlushVertices().
991     */
992    void (*BeginVertices)( GLcontext *ctx );
993
994    /**
995     * If inside glBegin()/glEnd(), it should ASSERT(0).  Otherwise, if
996     * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
997     * vertices, if FLUSH_UPDATE_CURRENT bit is set updates
998     * __GLcontextRec::Current and gl_light_attrib::Material
999     *
1000     * Note that the default T&L engine never clears the
1001     * FLUSH_UPDATE_CURRENT bit, even after performing the update.
1002     */
1003    void (*FlushVertices)( GLcontext *ctx, GLuint flags );
1004    void (*SaveFlushVertices)( GLcontext *ctx );
1005
1006    /**
1007     * Give the driver the opportunity to hook in its own vtxfmt for
1008     * compiling optimized display lists.  This is called on each valid
1009     * glBegin() during list compilation.
1010     */
1011    GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode );
1012
1013    /**
1014     * Notify driver that the special derived value _NeedEyeCoords has
1015     * changed.
1016     */
1017    void (*LightingSpaceChange)( GLcontext *ctx );
1018
1019    /**
1020     * Called by glNewList().
1021     *
1022     * Let the T&L component know what is going on with display lists
1023     * in time to make changes to dispatch tables, etc.
1024     */
1025    void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
1026    /**
1027     * Called by glEndList().
1028     *
1029     * \sa dd_function_table::NewList.
1030     */
1031    void (*EndList)( GLcontext *ctx );
1032
1033    /**
1034     * Called by glCallList(s).
1035     *
1036     * Notify the T&L component before and after calling a display list.
1037     */
1038    void (*BeginCallList)( GLcontext *ctx, 
1039                           struct gl_display_list *dlist );
1040    /**
1041     * Called by glEndCallList().
1042     *
1043     * \sa dd_function_table::BeginCallList.
1044     */
1045    void (*EndCallList)( GLcontext *ctx );
1046
1047
1048 #if FEATURE_ARB_sync
1049    /**
1050     * \name GL_ARB_sync interfaces
1051     */
1052    /*@{*/
1053    struct gl_sync_object * (*NewSyncObject)(GLcontext *, GLenum);
1054    void (*FenceSync)(GLcontext *, struct gl_sync_object *, GLenum, GLbitfield);
1055    void (*DeleteSyncObject)(GLcontext *, struct gl_sync_object *);
1056    void (*CheckSync)(GLcontext *, struct gl_sync_object *);
1057    void (*ClientWaitSync)(GLcontext *, struct gl_sync_object *,
1058                           GLbitfield, GLuint64);
1059    void (*ServerWaitSync)(GLcontext *, struct gl_sync_object *,
1060                           GLbitfield, GLuint64);
1061    /*@}*/
1062 #endif
1063 };
1064
1065
1066 /**
1067  * Transform/Clip/Lighting interface
1068  *
1069  * Drivers present a reduced set of the functions possible in
1070  * glBegin()/glEnd() objects.  Core mesa provides translation stubs for the
1071  * remaining functions to map down to these entry points.
1072  *
1073  * These are the initial values to be installed into dispatch by
1074  * mesa.  If the T&L driver wants to modify the dispatch table
1075  * while installed, it must do so itself.  It would be possible for
1076  * the vertexformat to install it's own initial values for these
1077  * functions, but this way there is an obvious list of what is
1078  * expected of the driver.
1079  *
1080  * If the driver wants to hook in entry points other than those
1081  * listed, it must restore them to their original values in
1082  * the disable() callback, below.
1083  */
1084 typedef struct {
1085    /**
1086     * \name Vertex
1087     */
1088    /*@{*/
1089    void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */
1090    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
1091    void (GLAPIENTRYP Color3fv)( const GLfloat * );
1092    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1093    void (GLAPIENTRYP Color4fv)( const GLfloat * );
1094    void (GLAPIENTRYP EdgeFlag)( GLboolean );
1095    void (GLAPIENTRYP EvalCoord1f)( GLfloat );          /* NOTE */
1096    void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
1097    void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
1098    void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */
1099    void (GLAPIENTRYP EvalPoint1)( GLint );             /* NOTE */
1100    void (GLAPIENTRYP EvalPoint2)( GLint, GLint );      /* NOTE */
1101    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
1102    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
1103    void (GLAPIENTRYP Indexf)( GLfloat );
1104    void (GLAPIENTRYP Indexfv)( const GLfloat * );
1105    void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
1106    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
1107    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
1108    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
1109    void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
1110    void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
1111    void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
1112    void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
1113    void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
1114    void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
1115    void (GLAPIENTRYP Normal3fv)( const GLfloat * );
1116    void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
1117    void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
1118    void (GLAPIENTRYP TexCoord1f)( GLfloat );
1119    void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
1120    void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
1121    void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
1122    void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
1123    void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
1124    void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1125    void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
1126    void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
1127    void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
1128    void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
1129    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
1130    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1131    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
1132    void (GLAPIENTRYP CallList)( GLuint );       /* NOTE */
1133    void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );     /* NOTE */
1134    void (GLAPIENTRYP Begin)( GLenum );
1135    void (GLAPIENTRYP End)( void );
1136    /* GL_NV_vertex_program */
1137    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
1138    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
1139    void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
1140    void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
1141    void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1142    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
1143    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1144    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
1145 #if FEATURE_ARB_vertex_program
1146    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
1147    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
1148    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
1149    void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
1150    void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1151    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
1152    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1153    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
1154 #endif
1155    /*@}*/
1156
1157    /*
1158     */
1159    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
1160
1161    /**
1162     * \name Array
1163     */
1164    /*@{*/
1165    void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
1166    void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
1167                          const GLvoid *indices );
1168    void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
1169                               GLuint end, GLsizei count,
1170                               GLenum type, const GLvoid *indices );
1171    void (GLAPIENTRYP MultiDrawElementsEXT)( GLenum mode, const GLsizei *count,
1172                                             GLenum type,
1173                                             const GLvoid **indices,
1174                                             GLsizei primcount);
1175    void (GLAPIENTRYP DrawElementsBaseVertex)( GLenum mode, GLsizei count,
1176                                               GLenum type,
1177                                               const GLvoid *indices,
1178                                               GLint basevertex );
1179    void (GLAPIENTRYP DrawRangeElementsBaseVertex)( GLenum mode, GLuint start,
1180                                                    GLuint end, GLsizei count,
1181                                                    GLenum type,
1182                                                    const GLvoid *indices,
1183                                                    GLint basevertex);
1184    void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode,
1185                                                    const GLsizei *count,
1186                                                    GLenum type,
1187                                                    const GLvoid **indices,
1188                                                    GLsizei primcount,
1189                                                    const GLint *basevertex);
1190    /*@}*/
1191
1192    /**
1193     * \name Eval
1194     *
1195     * If you don't support eval, fallback to the default vertex format
1196     * on receiving an eval call and use the pipeline mechanism to
1197     * provide partial T&L acceleration.
1198     *
1199     * Mesa will provide a set of helper functions to do eval within
1200     * accelerated vertex formats, eventually...
1201     */
1202    /*@{*/
1203    void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
1204    void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
1205    /*@}*/
1206
1207 } GLvertexformat;
1208
1209
1210 #endif /* DD_INCLUDED */