OSDN Git Service

Merge branch 'master' into opengl-es-v2
[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     * 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    /** Notify driver that a program string has been specified. */
585    void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 
586                                struct gl_program *prog);
587
588    /** Query if program can be loaded onto hardware */
589    GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 
590                                 struct gl_program *prog);
591    
592    /*@}*/
593
594
595    /**
596     * \name State-changing functions.
597     *
598     * \note drawing functions are above.
599     *
600     * These functions are called by their corresponding OpenGL API functions.
601     * They are \e also called by the gl_PopAttrib() function!!!
602     * May add more functions like these to the device driver in the future.
603     */
604    /*@{*/
605    /** Specify the alpha test function */
606    void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref);
607    /** Set the blend color */
608    void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
609    /** Set the blend equation */
610    void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA);
611    /** Specify pixel arithmetic */
612    void (*BlendFuncSeparate)(GLcontext *ctx,
613                              GLenum sfactorRGB, GLenum dfactorRGB,
614                              GLenum sfactorA, GLenum dfactorA);
615    /** Specify clear values for the color buffers */
616    void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]);
617    /** Specify the clear value for the depth buffer */
618    void (*ClearDepth)(GLcontext *ctx, GLclampd d);
619    /** Specify the clear value for the color index buffers */
620    void (*ClearIndex)(GLcontext *ctx, GLuint index);
621    /** Specify the clear value for the stencil buffer */
622    void (*ClearStencil)(GLcontext *ctx, GLint s);
623    /** Specify a plane against which all geometry is clipped */
624    void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation );
625    /** Enable and disable writing of frame buffer color components */
626    void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
627                      GLboolean bmask, GLboolean amask );
628    void (*ColorMaskIndexed)(GLcontext *ctx, GLuint buf, GLboolean rmask,
629                             GLboolean gmask, GLboolean bmask, GLboolean amask);
630    /** Cause a material color to track the current color */
631    void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode);
632    /** Specify whether front- or back-facing facets can be culled */
633    void (*CullFace)(GLcontext *ctx, GLenum mode);
634    /** Define front- and back-facing polygons */
635    void (*FrontFace)(GLcontext *ctx, GLenum mode);
636    /** Specify the value used for depth buffer comparisons */
637    void (*DepthFunc)(GLcontext *ctx, GLenum func);
638    /** Enable or disable writing into the depth buffer */
639    void (*DepthMask)(GLcontext *ctx, GLboolean flag);
640    /** Specify mapping of depth values from NDC to window coordinates */
641    void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval);
642    /** Specify the current buffer for writing */
643    void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
644    /** Specify the buffers for writing for fragment programs*/
645    void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
646    /** Enable or disable server-side gl capabilities */
647    void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state);
648    /** Specify fog parameters */
649    void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
650    /** Specify implementation-specific hints */
651    void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
652    /** Control the writing of individual bits in the color index buffers */
653    void (*IndexMask)(GLcontext *ctx, GLuint mask);
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 State-query functions
711     *
712     * Return GL_TRUE if query was completed, GL_FALSE otherwise.
713     */
714    /*@{*/
715    /** Return the value or values of a selected parameter */
716    GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result);
717    /** Return the value or values of a selected parameter */
718    GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result);
719    /** Return the value or values of a selected parameter */
720    GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result);
721    /** Return the value or values of a selected parameter */
722    GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result);
723    /** Return the value or values of a selected parameter */
724    GLboolean (*GetInteger64v)(GLcontext *ctx, GLenum pname, GLint64 *result);
725    /** Return the value or values of a selected parameter */
726    GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result);
727    /*@}*/
728    
729
730    /**
731     * \name Vertex/pixel buffer object functions
732     */
733 #if FEATURE_ARB_vertex_buffer_object
734    /*@{*/
735    void (*BindBuffer)( GLcontext *ctx, GLenum target,
736                        struct gl_buffer_object *obj );
737
738    struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer,
739                                                  GLenum target );
740    
741    void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
742
743    GLboolean (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
744                             const GLvoid *data, GLenum usage,
745                             struct gl_buffer_object *obj );
746
747    void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
748                           GLsizeiptrARB size, const GLvoid *data,
749                           struct gl_buffer_object *obj );
750
751    void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
752                              GLintptrARB offset, GLsizeiptrARB size,
753                              GLvoid *data, struct gl_buffer_object *obj );
754
755    void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
756                         struct gl_buffer_object *obj );
757
758    void (*CopyBufferSubData)( GLcontext *ctx,
759                               struct gl_buffer_object *src,
760                               struct gl_buffer_object *dst,
761                               GLintptr readOffset, GLintptr writeOffset,
762                               GLsizeiptr size );
763
764    /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
765     */
766    void * (*MapBufferRange)( GLcontext *ctx, GLenum target, GLintptr offset,
767                              GLsizeiptr length, GLbitfield access,
768                              struct gl_buffer_object *obj);
769
770    void (*FlushMappedBufferRange)(GLcontext *ctx, GLenum target, 
771                                   GLintptr offset, GLsizeiptr length,
772                                   struct gl_buffer_object *obj);
773
774    GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
775                              struct gl_buffer_object *obj );
776    /*@}*/
777 #endif
778
779    /**
780     * \name Functions for GL_EXT_framebuffer_object
781     */
782 #if FEATURE_EXT_framebuffer_object
783    /*@{*/
784    struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
785    struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
786    void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
787                            struct gl_framebuffer *drawFb,
788                            struct gl_framebuffer *readFb);
789    void (*FramebufferRenderbuffer)(GLcontext *ctx, 
790                                    struct gl_framebuffer *fb,
791                                    GLenum attachment,
792                                    struct gl_renderbuffer *rb);
793    void (*RenderTexture)(GLcontext *ctx,
794                          struct gl_framebuffer *fb,
795                          struct gl_renderbuffer_attachment *att);
796    void (*FinishRenderTexture)(GLcontext *ctx,
797                                struct gl_renderbuffer_attachment *att);
798    void (*ValidateFramebuffer)(GLcontext *ctx,
799                                struct gl_framebuffer *fb);
800    /*@}*/
801 #endif
802 #if FEATURE_EXT_framebuffer_blit
803    void (*BlitFramebuffer)(GLcontext *ctx,
804                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
805                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
806                            GLbitfield mask, GLenum filter);
807 #endif
808
809    /**
810     * \name Query objects
811     */
812    /*@{*/
813    struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
814    void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
815    void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
816    void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
817    void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
818    void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
819    /*@}*/
820
821
822    /**
823     * \name Vertex Array objects
824     */
825    /*@{*/
826    struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
827    void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
828    void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
829    /*@}*/
830
831    /**
832     * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
833     */
834    /*@{*/
835    void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
836    void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
837                               const GLcharARB *name);
838    void (*CompileShader)(GLcontext *ctx, GLuint shader);
839    GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
840    GLuint (*CreateProgram)(GLcontext *ctx);
841    void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
842    void (*DeleteShader)(GLcontext *ctx, GLuint shader);
843    void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
844    void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
845                            GLsizei maxLength, GLsizei * length, GLint * size,
846                            GLenum * type, GLcharARB * name);
847    void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
848                             GLsizei maxLength, GLsizei *length, GLint *size,
849                             GLenum *type, GLcharARB *name);
850    void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
851                               GLsizei *count, GLuint *obj);
852    GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
853                               const GLcharARB *name);
854    GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
855    void (*GetProgramiv)(GLcontext *ctx, GLuint program,
856                         GLenum pname, GLint *params);
857    void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
858                              GLsizei *length, GLchar *infoLog);
859    void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
860                        GLenum pname, GLint *params);
861    void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
862                             GLsizei *length, GLchar *infoLog);
863    void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
864                            GLsizei *length, GLcharARB *sourceOut);
865    void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
866                         GLfloat *params);
867    void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
868                         GLint *params);
869    GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
870                                const GLcharARB *name);
871    GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
872    GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
873    void (*LinkProgram)(GLcontext *ctx, GLuint program);
874    void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
875    void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
876                    const GLvoid *values, GLenum type);
877    void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
878                          GLint location, GLsizei count,
879                          GLboolean transpose, const GLfloat *values);
880    void (*UseProgram)(GLcontext *ctx, GLuint program);
881    void (*ValidateProgram)(GLcontext *ctx, GLuint program);
882    /* XXX many more to come */
883    /*@}*/
884
885
886    /**
887     * \name Support for multiple T&L engines
888     */
889    /*@{*/
890
891    /**
892     * Bitmask of state changes that require the current T&L module to be
893     * validated, using ValidateTnlModule() below.
894     */
895    GLuint NeedValidate;
896
897    /**
898     * Validate the current T&L module. 
899     *
900     * This is called directly after UpdateState() when a state change that has
901     * occurred matches the dd_function_table::NeedValidate bitmask above.  This
902     * ensures all computed values are up to date, thus allowing the driver to
903     * decide if the current T&L module needs to be swapped out.
904     *
905     * This must be non-NULL if a driver installs a custom T&L module and sets
906     * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
907     */
908    void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
909
910
911 #define PRIM_OUTSIDE_BEGIN_END   (GL_POLYGON+1)
912 #define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
913 #define PRIM_UNKNOWN             (GL_POLYGON+3)
914
915    /**
916     * Set by the driver-supplied T&L engine.  
917     *
918     * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
919     */
920    GLuint CurrentExecPrimitive;
921
922    /**
923     * Current state of an in-progress compilation.  
924     *
925     * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END,
926     * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above.
927     */
928    GLuint CurrentSavePrimitive;
929
930
931 #define FLUSH_STORED_VERTICES 0x1
932 #define FLUSH_UPDATE_CURRENT  0x2
933    /**
934     * Set by the driver-supplied T&L engine whenever vertices are buffered
935     * between glBegin()/glEnd() objects or __GLcontextRec::Current is not
936     * updated.
937     *
938     * The dd_function_table::FlushVertices call below may be used to resolve
939     * these conditions.
940     */
941    GLuint NeedFlush;
942    GLuint SaveNeedFlush;
943
944
945    /* Called prior to any of the GLvertexformat functions being
946     * called.  Paired with Driver.FlushVertices().
947     */
948    void (*BeginVertices)( GLcontext *ctx );
949
950    /**
951     * If inside glBegin()/glEnd(), it should ASSERT(0).  Otherwise, if
952     * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
953     * vertices, if FLUSH_UPDATE_CURRENT bit is set updates
954     * __GLcontextRec::Current and gl_light_attrib::Material
955     *
956     * Note that the default T&L engine never clears the
957     * FLUSH_UPDATE_CURRENT bit, even after performing the update.
958     */
959    void (*FlushVertices)( GLcontext *ctx, GLuint flags );
960    void (*SaveFlushVertices)( GLcontext *ctx );
961
962    /**
963     * Give the driver the opportunity to hook in its own vtxfmt for
964     * compiling optimized display lists.  This is called on each valid
965     * glBegin() during list compilation.
966     */
967    GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode );
968
969    /**
970     * Notify driver that the special derived value _NeedEyeCoords has
971     * changed.
972     */
973    void (*LightingSpaceChange)( GLcontext *ctx );
974
975    /**
976     * Called by glNewList().
977     *
978     * Let the T&L component know what is going on with display lists
979     * in time to make changes to dispatch tables, etc.
980     */
981    void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
982    /**
983     * Called by glEndList().
984     *
985     * \sa dd_function_table::NewList.
986     */
987    void (*EndList)( GLcontext *ctx );
988
989    /**
990     * Called by glCallList(s).
991     *
992     * Notify the T&L component before and after calling a display list.
993     */
994    void (*BeginCallList)( GLcontext *ctx, 
995                           struct gl_display_list *dlist );
996    /**
997     * Called by glEndCallList().
998     *
999     * \sa dd_function_table::BeginCallList.
1000     */
1001    void (*EndCallList)( GLcontext *ctx );
1002
1003
1004 #if FEATURE_ARB_sync
1005    /**
1006     * \name GL_ARB_sync interfaces
1007     */
1008    /*@{*/
1009    struct gl_sync_object * (*NewSyncObject)(GLcontext *, GLenum);
1010    void (*FenceSync)(GLcontext *, struct gl_sync_object *, GLenum, GLbitfield);
1011    void (*DeleteSyncObject)(GLcontext *, struct gl_sync_object *);
1012    void (*CheckSync)(GLcontext *, struct gl_sync_object *);
1013    void (*ClientWaitSync)(GLcontext *, struct gl_sync_object *,
1014                           GLbitfield, GLuint64);
1015    void (*ServerWaitSync)(GLcontext *, struct gl_sync_object *,
1016                           GLbitfield, GLuint64);
1017    /*@}*/
1018 #endif
1019
1020    /** GL_NV_conditional_render */
1021    void (*BeginConditionalRender)(GLcontext *ctx, struct gl_query_object *q,
1022                                   GLenum mode);
1023    void (*EndConditionalRender)(GLcontext *ctx, struct gl_query_object *q);
1024
1025 #if FEATURE_OES_draw_texture
1026    /**
1027     * \name GL_OES_draw_texture interface
1028     */
1029    /*@{*/
1030    void (*DrawTex)(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
1031                    GLfloat width, GLfloat height);
1032    /*@}*/
1033 #endif
1034 };
1035
1036
1037 /**
1038  * Transform/Clip/Lighting interface
1039  *
1040  * Drivers present a reduced set of the functions possible in
1041  * glBegin()/glEnd() objects.  Core mesa provides translation stubs for the
1042  * remaining functions to map down to these entry points.
1043  *
1044  * These are the initial values to be installed into dispatch by
1045  * mesa.  If the T&L driver wants to modify the dispatch table
1046  * while installed, it must do so itself.  It would be possible for
1047  * the vertexformat to install it's own initial values for these
1048  * functions, but this way there is an obvious list of what is
1049  * expected of the driver.
1050  *
1051  * If the driver wants to hook in entry points other than those
1052  * listed, it must restore them to their original values in
1053  * the disable() callback, below.
1054  */
1055 typedef struct {
1056    /**
1057     * \name Vertex
1058     */
1059    /*@{*/
1060    void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */
1061    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
1062    void (GLAPIENTRYP Color3fv)( const GLfloat * );
1063    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1064    void (GLAPIENTRYP Color4fv)( const GLfloat * );
1065    void (GLAPIENTRYP EdgeFlag)( GLboolean );
1066    void (GLAPIENTRYP EvalCoord1f)( GLfloat );          /* NOTE */
1067    void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
1068    void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
1069    void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */
1070    void (GLAPIENTRYP EvalPoint1)( GLint );             /* NOTE */
1071    void (GLAPIENTRYP EvalPoint2)( GLint, GLint );      /* NOTE */
1072    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
1073    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
1074    void (GLAPIENTRYP Indexf)( GLfloat );
1075    void (GLAPIENTRYP Indexfv)( const GLfloat * );
1076    void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
1077    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
1078    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
1079    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
1080    void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
1081    void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
1082    void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
1083    void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
1084    void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
1085    void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
1086    void (GLAPIENTRYP Normal3fv)( const GLfloat * );
1087    void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
1088    void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
1089    void (GLAPIENTRYP TexCoord1f)( GLfloat );
1090    void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
1091    void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
1092    void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
1093    void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
1094    void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
1095    void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1096    void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
1097    void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
1098    void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
1099    void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
1100    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
1101    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1102    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
1103    void (GLAPIENTRYP CallList)( GLuint );       /* NOTE */
1104    void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );     /* NOTE */
1105    void (GLAPIENTRYP Begin)( GLenum );
1106    void (GLAPIENTRYP End)( void );
1107    /* GL_NV_vertex_program */
1108    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
1109    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
1110    void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
1111    void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
1112    void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1113    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
1114    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1115    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
1116 #if FEATURE_ARB_vertex_program
1117    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
1118    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
1119    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
1120    void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
1121    void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1122    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
1123    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1124    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
1125 #endif
1126    /*@}*/
1127
1128    /*
1129     */
1130    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
1131
1132    /**
1133     * \name Array
1134     */
1135    /*@{*/
1136    void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
1137    void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
1138                          const GLvoid *indices );
1139    void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
1140                               GLuint end, GLsizei count,
1141                               GLenum type, const GLvoid *indices );
1142    void (GLAPIENTRYP MultiDrawElementsEXT)( GLenum mode, const GLsizei *count,
1143                                             GLenum type,
1144                                             const GLvoid **indices,
1145                                             GLsizei primcount);
1146    void (GLAPIENTRYP DrawElementsBaseVertex)( GLenum mode, GLsizei count,
1147                                               GLenum type,
1148                                               const GLvoid *indices,
1149                                               GLint basevertex );
1150    void (GLAPIENTRYP DrawRangeElementsBaseVertex)( GLenum mode, GLuint start,
1151                                                    GLuint end, GLsizei count,
1152                                                    GLenum type,
1153                                                    const GLvoid *indices,
1154                                                    GLint basevertex);
1155    void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode,
1156                                                    const GLsizei *count,
1157                                                    GLenum type,
1158                                                    const GLvoid **indices,
1159                                                    GLsizei primcount,
1160                                                    const GLint *basevertex);
1161    /*@}*/
1162
1163    /**
1164     * \name Eval
1165     *
1166     * If you don't support eval, fallback to the default vertex format
1167     * on receiving an eval call and use the pipeline mechanism to
1168     * provide partial T&L acceleration.
1169     *
1170     * Mesa will provide a set of helper functions to do eval within
1171     * accelerated vertex formats, eventually...
1172     */
1173    /*@{*/
1174    void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
1175    void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
1176    /*@}*/
1177
1178 } GLvertexformat;
1179
1180
1181 #endif /* DD_INCLUDED */