• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * \file dd.h
3  * Device driver interfaces.
4  */
5 
6 /*
7  * Mesa 3-D graphics library
8  *
9  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a
12  * copy of this software and associated documentation files (the "Software"),
13  * to deal in the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  * and/or sell copies of the Software, and to permit persons to whom the
16  * Software is furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included
19  * in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
24  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
25  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27  * 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 #include "glheader.h"
37 
38 struct gl_bitmap_atlas;
39 struct gl_buffer_object;
40 struct gl_context;
41 struct gl_display_list;
42 struct gl_framebuffer;
43 struct gl_image_unit;
44 struct gl_pixelstore_attrib;
45 struct gl_program;
46 struct gl_renderbuffer;
47 struct gl_renderbuffer_attachment;
48 struct gl_shader;
49 struct gl_shader_program;
50 struct gl_texture_image;
51 struct gl_texture_object;
52 struct gl_memory_info;
53 struct util_queue_monitoring;
54 
55 /* GL_ARB_vertex_buffer_object */
56 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
57  * NULL) if buffer is unavailable for immediate mapping.
58  *
59  * Does GL_MAP_INVALIDATE_RANGE_BIT do this?  It seems so, but it
60  * would require more book-keeping in the driver than seems necessary
61  * at this point.
62  *
63  * Does GL_MAP_INVALDIATE_BUFFER_BIT do this?  Not really -- we don't
64  * want to provoke the driver to throw away the old storage, we will
65  * respect the contents of already referenced data.
66  */
67 #define MESA_MAP_NOWAIT_BIT       0x4000
68 
69 
70 /**
71  * Device driver function table.
72  * Core Mesa uses these function pointers to call into device drivers.
73  * Most of these functions directly correspond to OpenGL state commands.
74  * Core Mesa will call these functions after error checking has been done
75  * so that the drivers don't have to worry about error testing.
76  *
77  * Vertex transformation/clipping/lighting is patched into the T&L module.
78  * Rasterization functions are patched into the swrast module.
79  *
80  * Note: when new functions are added here, the drivers/common/driverfuncs.c
81  * file should be updated too!!!
82  */
83 struct dd_function_table {
84    /**
85     * Return a string as needed by glGetString().
86     * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
87     * returned.
88     */
89    const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name );
90 
91    /**
92     * Notify the driver after Mesa has made some internal state changes.
93     *
94     * This is in addition to any state change callbacks Mesa may already have
95     * made.
96     */
97    void (*UpdateState)(struct gl_context *ctx);
98 
99    /**
100     * This is called whenever glFinish() is called.
101     */
102    void (*Finish)( struct gl_context *ctx );
103 
104    /**
105     * This is called whenever glFlush() is called.
106     */
107    void (*Flush)( struct gl_context *ctx );
108 
109    /**
110     * Clear the color/depth/stencil/accum buffer(s).
111     * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
112     *                 renderbuffers need to be cleared.
113     */
114    void (*Clear)( struct gl_context *ctx, GLbitfield buffers );
115 
116    /**
117     * Execute glRasterPos, updating the ctx->Current.Raster fields
118     */
119    void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] );
120 
121    /**
122     * \name Image-related functions
123     */
124    /*@{*/
125 
126    /**
127     * Called by glDrawPixels().
128     * \p unpack describes how to unpack the source image data.
129     */
130    void (*DrawPixels)( struct gl_context *ctx,
131 		       GLint x, GLint y, GLsizei width, GLsizei height,
132 		       GLenum format, GLenum type,
133 		       const struct gl_pixelstore_attrib *unpack,
134 		       const GLvoid *pixels );
135 
136    /**
137     * Called by glReadPixels().
138     */
139    void (*ReadPixels)( struct gl_context *ctx,
140 		       GLint x, GLint y, GLsizei width, GLsizei height,
141 		       GLenum format, GLenum type,
142 		       const struct gl_pixelstore_attrib *unpack,
143 		       GLvoid *dest );
144 
145    /**
146     * Called by glCopyPixels().
147     */
148    void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy,
149                        GLsizei width, GLsizei height,
150                        GLint dstx, GLint dsty, GLenum type );
151 
152    /**
153     * Called by glBitmap().
154     */
155    void (*Bitmap)( struct gl_context *ctx,
156 		   GLint x, GLint y, GLsizei width, GLsizei height,
157 		   const struct gl_pixelstore_attrib *unpack,
158 		   const GLubyte *bitmap );
159 
160    /**
161     * Called by display list code for optimized glCallLists/glBitmap rendering
162     * The driver must support texture rectangles of width 1024 or more.
163     */
164    void (*DrawAtlasBitmaps)(struct gl_context *ctx,
165                             const struct gl_bitmap_atlas *atlas,
166                             GLuint count, const GLubyte *ids);
167    /*@}*/
168 
169 
170    /**
171     * \name Texture image functions
172     */
173    /*@{*/
174 
175    /**
176     * Choose actual hardware texture format given the texture target, the
177     * user-provided source image format and type and the desired internal
178     * format.  In some cases, srcFormat and srcType can be GL_NONE.
179     * Note:  target may be GL_TEXTURE_CUBE_MAP, but never
180     * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ].
181     * Called by glTexImage(), etc.
182     */
183    mesa_format (*ChooseTextureFormat)(struct gl_context *ctx,
184                                       GLenum target, GLint internalFormat,
185                                       GLenum srcFormat, GLenum srcType );
186 
187    /**
188     * Queries different driver parameters for a particular target and format.
189     * Since ARB_internalformat_query2 introduced several new query parameters
190     * over ARB_internalformat_query, having one driver hook for each parameter
191     * is no longer feasible. So this is the generic entry-point for calls
192     * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has
193     * checked errors and default values.
194     *
195     * \param ctx            GL context
196     * \param target         GL target enum
197     * \param internalFormat GL format enum
198     * \param pname          GL enum that specifies the info to query.
199     * \param params         Buffer to hold the result of the query.
200     */
201    void (*QueryInternalFormat)(struct gl_context *ctx,
202                                GLenum target,
203                                GLenum internalFormat,
204                                GLenum pname,
205                                GLint *params);
206 
207    /**
208     * Called by glTexImage[123]D() and glCopyTexImage[12]D()
209     * Allocate texture memory and copy the user's image to the buffer.
210     * The gl_texture_image fields, etc. will be fully initialized.
211     * The parameters are the same as glTexImage3D(), plus:
212     * \param dims  1, 2, or 3 indicating glTexImage1/2/3D()
213     * \param packing describes how to unpack the source data.
214     * \param texImage is the destination texture image.
215     */
216    void (*TexImage)(struct gl_context *ctx, GLuint dims,
217                     struct gl_texture_image *texImage,
218                     GLenum format, GLenum type, const GLvoid *pixels,
219                     const struct gl_pixelstore_attrib *packing);
220 
221    /**
222     * Called by glTexSubImage[123]D().
223     * Replace a subset of the target texture with new texel data.
224     */
225    void (*TexSubImage)(struct gl_context *ctx, GLuint dims,
226                        struct gl_texture_image *texImage,
227                        GLint xoffset, GLint yoffset, GLint zoffset,
228                        GLsizei width, GLsizei height, GLint depth,
229                        GLenum format, GLenum type,
230                        const GLvoid *pixels,
231                        const struct gl_pixelstore_attrib *packing);
232 
233 
234    /**
235     * Called by glGetTexImage(), glGetTextureSubImage().
236     */
237    void (*GetTexSubImage)(struct gl_context *ctx,
238                           GLint xoffset, GLint yoffset, GLint zoffset,
239                           GLsizei width, GLsizei height, GLsizei depth,
240                           GLenum format, GLenum type, GLvoid *pixels,
241                           struct gl_texture_image *texImage);
242 
243    /**
244     * Called by glClearTex[Sub]Image
245     *
246     * Clears a rectangular region of the image to a given value. The
247     * clearValue argument is either NULL or points to a single texel to use as
248     * the clear value in the same internal format as the texture image. If it
249     * is NULL then the texture should be cleared to zeroes.
250     */
251    void (*ClearTexSubImage)(struct gl_context *ctx,
252                             struct gl_texture_image *texImage,
253                             GLint xoffset, GLint yoffset, GLint zoffset,
254                             GLsizei width, GLsizei height, GLsizei depth,
255                             const GLvoid *clearValue);
256 
257    /**
258     * Called by glCopyTex[Sub]Image[123]D().
259     *
260     * This function should copy a rectangular region in the rb to a single
261     * destination slice, specified by @slice.  In the case of 1D array
262     * textures (where one GL call can potentially affect multiple destination
263     * slices), core mesa takes care of calling this function multiple times,
264     * once for each scanline to be copied.
265     */
266    void (*CopyTexSubImage)(struct gl_context *ctx, GLuint dims,
267                            struct gl_texture_image *texImage,
268                            GLint xoffset, GLint yoffset, GLint slice,
269                            struct gl_renderbuffer *rb,
270                            GLint x, GLint y,
271                            GLsizei width, GLsizei height);
272    /**
273     * Called by glCopyImageSubData().
274     *
275     * This function should copy one 2-D slice from src_teximage or
276     * src_renderbuffer to dst_teximage or dst_renderbuffer.  Either the
277     * teximage or renderbuffer pointer will be non-null to indicate which
278     * is the real src/dst.
279     *
280     * If one of the textures is 3-D or is a 1-D or 2-D array
281     * texture, this function will be called multiple times: once for each
282     * slice.  If one of the textures is a cube map, this function will be
283     * called once for each face to be copied.
284     */
285    void (*CopyImageSubData)(struct gl_context *ctx,
286                             struct gl_texture_image *src_teximage,
287                             struct gl_renderbuffer *src_renderbuffer,
288                             int src_x, int src_y, int src_z,
289                             struct gl_texture_image *dst_teximage,
290                             struct gl_renderbuffer *dst_renderbuffer,
291                             int dst_x, int dst_y, int dst_z,
292                             int src_width, int src_height);
293 
294    /**
295     * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
296     * Note that if the texture is a cube map, the <target> parameter will
297     * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z).
298     * texObj->BaseLevel is the level from which to generate the remaining
299     * mipmap levels.
300     */
301    void (*GenerateMipmap)(struct gl_context *ctx, GLenum target,
302                           struct gl_texture_object *texObj);
303 
304    /**
305     * Called by glTexImage, glCompressedTexImage, glCopyTexImage
306     * and glTexStorage to check if the dimensions of the texture image
307     * are too large.
308     * \param target  any GL_PROXY_TEXTURE_x target
309     * \return GL_TRUE if the image is OK, GL_FALSE if too large
310     */
311    GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target,
312                                   GLuint numLevels, GLint level,
313                                   mesa_format format, GLuint numSamples,
314                                   GLint width, GLint height,
315                                   GLint depth);
316    /*@}*/
317 
318 
319    /**
320     * \name Compressed texture functions
321     */
322    /*@{*/
323 
324    /**
325     * Called by glCompressedTexImage[123]D().
326     */
327    void (*CompressedTexImage)(struct gl_context *ctx, GLuint dims,
328                               struct gl_texture_image *texImage,
329                               GLsizei imageSize, const GLvoid *data);
330 
331    /**
332     * Called by glCompressedTexSubImage[123]D().
333     */
334    void (*CompressedTexSubImage)(struct gl_context *ctx, GLuint dims,
335                                  struct gl_texture_image *texImage,
336                                  GLint xoffset, GLint yoffset, GLint zoffset,
337                                  GLsizei width, GLsizei height, GLsizei depth,
338                                  GLenum format,
339                                  GLsizei imageSize, const GLvoid *data);
340    /*@}*/
341 
342    /**
343     * \name Texture object / image functions
344     */
345    /*@{*/
346 
347    /**
348     * Called by glBindTexture() and glBindTextures().
349     */
350    void (*BindTexture)( struct gl_context *ctx, GLuint texUnit,
351                         GLenum target, struct gl_texture_object *tObj );
352 
353    /**
354     * Called to allocate a new texture object.  Drivers will usually
355     * allocate/return a subclass of gl_texture_object.
356     */
357    struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx,
358                                                   GLuint name, GLenum target);
359    /**
360     * Called to delete/free a texture object.  Drivers should free the
361     * object and any image data it contains.
362     */
363    void (*DeleteTexture)(struct gl_context *ctx,
364                          struct gl_texture_object *texObj);
365 
366    /** Called to allocate a new texture image object. */
367    struct gl_texture_image * (*NewTextureImage)(struct gl_context *ctx);
368 
369    /** Called to free a texture image object returned by NewTextureImage() */
370    void (*DeleteTextureImage)(struct gl_context *ctx,
371                               struct gl_texture_image *);
372 
373    /** Called to allocate memory for a single texture image */
374    GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx,
375                                         struct gl_texture_image *texImage);
376 
377    /** Free the memory for a single texture image */
378    void (*FreeTextureImageBuffer)(struct gl_context *ctx,
379                                   struct gl_texture_image *texImage);
380 
381    /** Map a slice of a texture image into user space.
382     * Note: for GL_TEXTURE_1D_ARRAY, height must be 1, y must be 0 and slice
383     * indicates the 1D array index.
384     * \param texImage  the texture image
385     * \param slice  the 3D image slice or array texture slice
386     * \param x, y, w, h  region of interest
387     * \param mode  bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and
388     *              GL_MAP_INVALIDATE_RANGE_BIT (if writing)
389     * \param mapOut  returns start of mapping of region of interest
390     * \param rowStrideOut returns row stride (in bytes).  In the case of a
391     * compressed texture, this is the byte stride between one row of blocks
392     * and another.
393     */
394    void (*MapTextureImage)(struct gl_context *ctx,
395 			   struct gl_texture_image *texImage,
396 			   GLuint slice,
397 			   GLuint x, GLuint y, GLuint w, GLuint h,
398 			   GLbitfield mode,
399 			   GLubyte **mapOut, GLint *rowStrideOut);
400 
401    void (*UnmapTextureImage)(struct gl_context *ctx,
402 			     struct gl_texture_image *texImage,
403 			     GLuint slice);
404 
405    /** For GL_ARB_texture_storage.  Allocate memory for whole mipmap stack.
406     * All the gl_texture_images in the texture object will have their
407     * dimensions, format, etc. initialized already.
408     */
409    GLboolean (*AllocTextureStorage)(struct gl_context *ctx,
410                                     struct gl_texture_object *texObj,
411                                     GLsizei levels, GLsizei width,
412                                     GLsizei height, GLsizei depth);
413 
414    /** Called as part of glTextureView to add views to origTexObj */
415    GLboolean (*TextureView)(struct gl_context *ctx,
416                             struct gl_texture_object *texObj,
417                             struct gl_texture_object *origTexObj);
418 
419    /**
420     * Map a renderbuffer into user space.
421     * \param mode  bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and
422     *              GL_MAP_INVALIDATE_RANGE_BIT (if writing)
423     */
424    void (*MapRenderbuffer)(struct gl_context *ctx,
425 			   struct gl_renderbuffer *rb,
426 			   GLuint x, GLuint y, GLuint w, GLuint h,
427 			   GLbitfield mode,
428 			   GLubyte **mapOut, GLint *rowStrideOut);
429 
430    void (*UnmapRenderbuffer)(struct gl_context *ctx,
431 			     struct gl_renderbuffer *rb);
432 
433    /**
434     * Optional driver entrypoint that binds a non-texture renderbuffer's
435     * contents to a texture image.
436     */
437    GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx,
438                                          struct gl_renderbuffer *rb,
439                                          struct gl_texture_image *texImage);
440    /*@}*/
441 
442 
443    /**
444     * \name Vertex/fragment program functions
445     */
446    /*@{*/
447    /** Allocate a new program */
448    struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target,
449                                      GLuint id, bool is_arb_asm);
450    /** Delete a program */
451    void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);
452    /**
453     * Allocate a program to associate with the new ATI fragment shader (optional)
454     */
455    struct gl_program * (*NewATIfs)(struct gl_context *ctx,
456                                    struct ati_fragment_shader *curProg);
457    /**
458     * Notify driver that a program string (and GPU code) has been specified
459     * or modified.  Return GL_TRUE or GL_FALSE to indicate if the program is
460     * supported by the driver.
461     */
462    GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target,
463                                     struct gl_program *prog);
464 
465    /**
466     * Notify driver that the sampler uniforms for the current program have
467     * changed.  On some drivers, this may require shader recompiles.
468     */
469    void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target,
470                                 struct gl_program *prog);
471 
472    /** Query if program can be loaded onto hardware */
473    GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target,
474 				struct gl_program *prog);
475 
476    /*@}*/
477 
478    /**
479     * \name GLSL shader/program functions.
480     */
481    /*@{*/
482    /**
483     * Called when a shader program is linked.
484     *
485     * This gives drivers an opportunity to clone the IR and make their
486     * own transformations on it for the purposes of code generation.
487     */
488    GLboolean (*LinkShader)(struct gl_context *ctx,
489                            struct gl_shader_program *shader);
490    /*@}*/
491 
492    /**
493     * \name State-changing functions.
494     *
495     * \note drawing functions are above.
496     *
497     * These functions are called by their corresponding OpenGL API functions.
498     * They are \e also called by the gl_PopAttrib() function!!!
499     * May add more functions like these to the device driver in the future.
500     */
501    /*@{*/
502    /** Specify the alpha test function */
503    void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref);
504    /** Set the blend color */
505    void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]);
506    /** Set the blend equation */
507    void (*BlendEquationSeparate)(struct gl_context *ctx,
508                                  GLenum modeRGB, GLenum modeA);
509    /** Specify pixel arithmetic */
510    void (*BlendFuncSeparate)(struct gl_context *ctx,
511                              GLenum sfactorRGB, GLenum dfactorRGB,
512                              GLenum sfactorA, GLenum dfactorA);
513    /** Specify a plane against which all geometry is clipped */
514    void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq);
515    /** Enable and disable writing of frame buffer color components */
516    void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask,
517                      GLboolean bmask, GLboolean amask );
518    /** Cause a material color to track the current color */
519    void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode);
520    /** Specify whether front- or back-facing facets can be culled */
521    void (*CullFace)(struct gl_context *ctx, GLenum mode);
522    /** Define front- and back-facing polygons */
523    void (*FrontFace)(struct gl_context *ctx, GLenum mode);
524    /** Specify the value used for depth buffer comparisons */
525    void (*DepthFunc)(struct gl_context *ctx, GLenum func);
526    /** Enable or disable writing into the depth buffer */
527    void (*DepthMask)(struct gl_context *ctx, GLboolean flag);
528    /** Specify mapping of depth values from NDC to window coordinates */
529    void (*DepthRange)(struct gl_context *ctx);
530    /** Specify the current buffer for writing */
531    void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
532    /** Specify the buffers for writing for fragment programs*/
533    void (*DrawBuffers)(struct gl_context *ctx, GLsizei n, const GLenum *buffers);
534    /** Enable or disable server-side gl capabilities */
535    void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
536    /** Specify fog parameters */
537    void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params);
538    /** Set light source parameters.
539     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
540     * been transformed to eye-space.
541     */
542    void (*Lightfv)(struct gl_context *ctx, GLenum light,
543 		   GLenum pname, const GLfloat *params );
544    /** Set the lighting model parameters */
545    void (*LightModelfv)(struct gl_context *ctx, GLenum pname,
546                         const GLfloat *params);
547    /** Specify the line stipple pattern */
548    void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern );
549    /** Specify the width of rasterized lines */
550    void (*LineWidth)(struct gl_context *ctx, GLfloat width);
551    /** Specify a logical pixel operation for color index rendering */
552    void (*LogicOpcode)(struct gl_context *ctx, GLenum opcode);
553    void (*PointParameterfv)(struct gl_context *ctx, GLenum pname,
554                             const GLfloat *params);
555    /** Specify the diameter of rasterized points */
556    void (*PointSize)(struct gl_context *ctx, GLfloat size);
557    /** Select a polygon rasterization mode */
558    void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode);
559    /** Set the scale and units used to calculate depth values */
560    void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp);
561    /** Set the polygon stippling pattern */
562    void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask );
563    /* Specifies the current buffer for reading */
564    void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer );
565    /** Set rasterization mode */
566    void (*RenderMode)(struct gl_context *ctx, GLenum mode );
567    /** Define the scissor box */
568    void (*Scissor)(struct gl_context *ctx);
569    /** Select flat or smooth shading */
570    void (*ShadeModel)(struct gl_context *ctx, GLenum mode);
571    /** OpenGL 2.0 two-sided StencilFunc */
572    void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func,
573                                GLint ref, GLuint mask);
574    /** OpenGL 2.0 two-sided StencilMask */
575    void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask);
576    /** OpenGL 2.0 two-sided StencilOp */
577    void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail,
578                              GLenum zfail, GLenum zpass);
579    /** Control the generation of texture coordinates */
580    void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname,
581 		  const GLfloat *params);
582    /** Set texture environment parameters */
583    void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname,
584                   const GLfloat *param);
585    /** Set texture parameter (callee gets param value from the texObj) */
586    void (*TexParameter)(struct gl_context *ctx,
587                         struct gl_texture_object *texObj, GLenum pname);
588    /** Set the viewport */
589    void (*Viewport)(struct gl_context *ctx);
590    /*@}*/
591 
592 
593    /**
594     * \name Vertex/pixel buffer object functions
595     */
596    /*@{*/
597    struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx,
598                                                 GLuint buffer);
599 
600    void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj );
601 
602    GLboolean (*BufferData)(struct gl_context *ctx, GLenum target,
603                            GLsizeiptrARB size, const GLvoid *data, GLenum usage,
604                            GLenum storageFlags, struct gl_buffer_object *obj);
605 
606    void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset,
607 			  GLsizeiptrARB size, const GLvoid *data,
608 			  struct gl_buffer_object *obj );
609 
610    void (*GetBufferSubData)( struct gl_context *ctx,
611 			     GLintptrARB offset, GLsizeiptrARB size,
612 			     GLvoid *data, struct gl_buffer_object *obj );
613 
614    void (*ClearBufferSubData)( struct gl_context *ctx,
615                                GLintptr offset, GLsizeiptr size,
616                                const GLvoid *clearValue,
617                                GLsizeiptr clearValueSize,
618                                struct gl_buffer_object *obj );
619 
620    void (*CopyBufferSubData)( struct gl_context *ctx,
621                               struct gl_buffer_object *src,
622                               struct gl_buffer_object *dst,
623                               GLintptr readOffset, GLintptr writeOffset,
624                               GLsizeiptr size );
625 
626    void (*InvalidateBufferSubData)( struct gl_context *ctx,
627                                     struct gl_buffer_object *obj,
628                                     GLintptr offset,
629                                     GLsizeiptr length );
630 
631    /* Returns pointer to the start of the mapped range.
632     * May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
633     */
634    void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset,
635                              GLsizeiptr length, GLbitfield access,
636                              struct gl_buffer_object *obj,
637                              gl_map_buffer_index index);
638 
639    void (*FlushMappedBufferRange)(struct gl_context *ctx,
640                                   GLintptr offset, GLsizeiptr length,
641                                   struct gl_buffer_object *obj,
642                                   gl_map_buffer_index index);
643 
644    GLboolean (*UnmapBuffer)( struct gl_context *ctx,
645 			     struct gl_buffer_object *obj,
646                              gl_map_buffer_index index);
647    /*@}*/
648 
649    /**
650     * \name Functions for GL_APPLE_object_purgeable
651     */
652    /*@{*/
653    /* variations on ObjectPurgeable */
654    GLenum (*BufferObjectPurgeable)(struct gl_context *ctx,
655                                    struct gl_buffer_object *obj, GLenum option);
656    GLenum (*RenderObjectPurgeable)(struct gl_context *ctx,
657                                    struct gl_renderbuffer *obj, GLenum option);
658    GLenum (*TextureObjectPurgeable)(struct gl_context *ctx,
659                                     struct gl_texture_object *obj,
660                                     GLenum option);
661 
662    /* variations on ObjectUnpurgeable */
663    GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx,
664                                      struct gl_buffer_object *obj,
665                                      GLenum option);
666    GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx,
667                                      struct gl_renderbuffer *obj,
668                                      GLenum option);
669    GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx,
670                                       struct gl_texture_object *obj,
671                                       GLenum option);
672    /*@}*/
673 
674    /**
675     * \name Functions for GL_EXT_framebuffer_{object,blit,discard}.
676     */
677    /*@{*/
678    struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx,
679                                              GLuint name);
680    struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx,
681                                                GLuint name);
682    void (*BindFramebuffer)(struct gl_context *ctx, GLenum target,
683                            struct gl_framebuffer *drawFb,
684                            struct gl_framebuffer *readFb);
685    void (*FramebufferRenderbuffer)(struct gl_context *ctx,
686                                    struct gl_framebuffer *fb,
687                                    GLenum attachment,
688                                    struct gl_renderbuffer *rb);
689    void (*RenderTexture)(struct gl_context *ctx,
690                          struct gl_framebuffer *fb,
691                          struct gl_renderbuffer_attachment *att);
692    void (*FinishRenderTexture)(struct gl_context *ctx,
693                                struct gl_renderbuffer *rb);
694    void (*ValidateFramebuffer)(struct gl_context *ctx,
695                                struct gl_framebuffer *fb);
696    /*@}*/
697    void (*BlitFramebuffer)(struct gl_context *ctx,
698                            struct gl_framebuffer *readFb,
699                            struct gl_framebuffer *drawFb,
700                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
701                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
702                            GLbitfield mask, GLenum filter);
703    void (*DiscardFramebuffer)(struct gl_context *ctx,
704                               GLenum target, GLsizei numAttachments,
705                               const GLenum *attachments);
706 
707    /**
708     * \name Query objects
709     */
710    /*@{*/
711    struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id);
712    void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q);
713    void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q);
714    void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q);
715    void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q);
716    void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q);
717    void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q);
718    /*
719     * \pname the value requested to be written (GL_QUERY_RESULT, etc)
720     * \ptype the type of the value requested to be written:
721     *    GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB,
722     *    GL_INT, GL_INT64_ARB
723     */
724    void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q,
725                             struct gl_buffer_object *buf, intptr_t offset,
726                             GLenum pname, GLenum ptype);
727    /*@}*/
728 
729    /**
730     * \name Performance monitors
731     */
732    /*@{*/
733    void (*InitPerfMonitorGroups)(struct gl_context *ctx);
734    struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx);
735    void (*DeletePerfMonitor)(struct gl_context *ctx,
736                              struct gl_perf_monitor_object *m);
737    GLboolean (*BeginPerfMonitor)(struct gl_context *ctx,
738                                  struct gl_perf_monitor_object *m);
739 
740    /** Stop an active performance monitor, discarding results. */
741    void (*ResetPerfMonitor)(struct gl_context *ctx,
742                             struct gl_perf_monitor_object *m);
743    void (*EndPerfMonitor)(struct gl_context *ctx,
744                           struct gl_perf_monitor_object *m);
745    GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx,
746                                              struct gl_perf_monitor_object *m);
747    void (*GetPerfMonitorResult)(struct gl_context *ctx,
748                                 struct gl_perf_monitor_object *m,
749                                 GLsizei dataSize,
750                                 GLuint *data,
751                                 GLint *bytesWritten);
752    /*@}*/
753 
754    /**
755     * \name Performance Query objects
756     */
757    /*@{*/
758    unsigned (*InitPerfQueryInfo)(struct gl_context *ctx);
759    void (*GetPerfQueryInfo)(struct gl_context *ctx,
760                             unsigned queryIndex,
761                             const char **name,
762                             GLuint *dataSize,
763                             GLuint *numCounters,
764                             GLuint *numActive);
765    void (*GetPerfCounterInfo)(struct gl_context *ctx,
766                               unsigned queryIndex,
767                               unsigned counterIndex,
768                               const char **name,
769                               const char **desc,
770                               GLuint *offset,
771                               GLuint *data_size,
772                               GLuint *type_enum,
773                               GLuint *data_type_enum,
774                               GLuint64 *raw_max);
775    struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx,
776                                                        unsigned queryIndex);
777    void (*DeletePerfQuery)(struct gl_context *ctx,
778                            struct gl_perf_query_object *obj);
779    bool (*BeginPerfQuery)(struct gl_context *ctx,
780                           struct gl_perf_query_object *obj);
781    void (*EndPerfQuery)(struct gl_context *ctx,
782                         struct gl_perf_query_object *obj);
783    void (*WaitPerfQuery)(struct gl_context *ctx,
784                          struct gl_perf_query_object *obj);
785    bool (*IsPerfQueryReady)(struct gl_context *ctx,
786                             struct gl_perf_query_object *obj);
787    void (*GetPerfQueryData)(struct gl_context *ctx,
788                             struct gl_perf_query_object *obj,
789                             GLsizei dataSize,
790                             GLuint *data,
791                             GLuint *bytesWritten);
792    /*@}*/
793 
794 
795    /**
796     * \name GREMEDY debug/marker functions
797     */
798    /*@{*/
799    void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len);
800    /*@}*/
801 
802    /**
803     * \name Support for multiple T&L engines
804     */
805    /*@{*/
806 
807    /**
808     * Set by the driver-supplied T&L engine.
809     *
810     * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
811     */
812    GLuint CurrentExecPrimitive;
813 
814    /**
815     * Current glBegin state of an in-progress compilation.  May be
816     * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
817     * or PRIM_UNKNOWN.
818     */
819    GLuint CurrentSavePrimitive;
820 
821 
822 #define FLUSH_STORED_VERTICES 0x1
823 #define FLUSH_UPDATE_CURRENT  0x2
824    /**
825     * Set by the driver-supplied T&L engine whenever vertices are buffered
826     * between glBegin()/glEnd() objects or __struct gl_contextRec::Current
827     * is not updated.  A bitmask of the FLUSH_x values above.
828     *
829     * The dd_function_table::FlushVertices call below may be used to resolve
830     * these conditions.
831     */
832    GLbitfield NeedFlush;
833 
834    /** Need to call vbo_save_SaveFlushVertices() upon state change? */
835    GLboolean SaveNeedFlush;
836 
837    /**
838     * Notify driver that the special derived value _NeedEyeCoords has
839     * changed.
840     */
841    void (*LightingSpaceChange)( struct gl_context *ctx );
842 
843    /**@}*/
844 
845    /**
846     * \name GL_ARB_sync interfaces
847     */
848    /*@{*/
849    struct gl_sync_object * (*NewSyncObject)(struct gl_context *);
850    void (*FenceSync)(struct gl_context *, struct gl_sync_object *,
851                      GLenum, GLbitfield);
852    void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *);
853    void (*CheckSync)(struct gl_context *, struct gl_sync_object *);
854    void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *,
855 			  GLbitfield, GLuint64);
856    void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *,
857 			  GLbitfield, GLuint64);
858    /*@}*/
859 
860    /** GL_NV_conditional_render */
861    void (*BeginConditionalRender)(struct gl_context *ctx,
862                                   struct gl_query_object *q,
863                                   GLenum mode);
864    void (*EndConditionalRender)(struct gl_context *ctx,
865                                 struct gl_query_object *q);
866 
867    /**
868     * \name GL_OES_draw_texture interface
869     */
870    /*@{*/
871    void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
872                    GLfloat width, GLfloat height);
873    /*@}*/
874 
875    /**
876     * \name GL_OES_EGL_image interface
877     */
878    void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target,
879 				   struct gl_texture_object *texObj,
880 				   struct gl_texture_image *texImage,
881 				   GLeglImageOES image_handle);
882    void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx,
883 					     struct gl_renderbuffer *rb,
884 					     void *image_handle);
885 
886    /**
887     * \name GL_EXT_transform_feedback interface
888     */
889    struct gl_transform_feedback_object *
890         (*NewTransformFeedback)(struct gl_context *ctx, GLuint name);
891    void (*DeleteTransformFeedback)(struct gl_context *ctx,
892                                    struct gl_transform_feedback_object *obj);
893    void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode,
894                                   struct gl_transform_feedback_object *obj);
895    void (*EndTransformFeedback)(struct gl_context *ctx,
896                                 struct gl_transform_feedback_object *obj);
897    void (*PauseTransformFeedback)(struct gl_context *ctx,
898                                   struct gl_transform_feedback_object *obj);
899    void (*ResumeTransformFeedback)(struct gl_context *ctx,
900                                    struct gl_transform_feedback_object *obj);
901 
902    /**
903     * Return the number of vertices written to a stream during the last
904     * Begin/EndTransformFeedback block.
905     */
906    GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx,
907                                        struct gl_transform_feedback_object *obj,
908                                        GLuint stream);
909 
910    /**
911     * \name GL_NV_texture_barrier interface
912     */
913    void (*TextureBarrier)(struct gl_context *ctx);
914 
915    /**
916     * \name GL_ARB_sampler_objects
917     */
918    struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx,
919                                                   GLuint name);
920 
921    /**
922     * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query.
923     * This should be equivalent to glGetInteger64v(GL_TIMESTAMP);
924     */
925    uint64_t (*GetTimestamp)(struct gl_context *ctx);
926 
927    /**
928     * \name GL_ARB_texture_multisample
929     */
930    void (*GetSamplePosition)(struct gl_context *ctx,
931                              struct gl_framebuffer *fb,
932                              GLuint index,
933                              GLfloat *outValue);
934 
935    /**
936     * \name NV_vdpau_interop interface
937     */
938    void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target,
939                            GLenum access, GLboolean output,
940                            struct gl_texture_object *texObj,
941                            struct gl_texture_image *texImage,
942                            const GLvoid *vdpSurface, GLuint index);
943    void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target,
944                              GLenum access, GLboolean output,
945                              struct gl_texture_object *texObj,
946                              struct gl_texture_image *texImage,
947                              const GLvoid *vdpSurface, GLuint index);
948 
949    /**
950     * Query reset status for GL_ARB_robustness
951     *
952     * Per \c glGetGraphicsResetStatusARB, this function should return a
953     * non-zero value once after a reset.  If a reset is non-atomic, the
954     * non-zero status should be returned for the duration of the reset.
955     */
956    GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx);
957 
958    /**
959     * \name GL_ARB_shader_image_load_store interface.
960     */
961    /** @{ */
962    void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers);
963    /** @} */
964 
965    /**
966     * GL_MESA_shader_framebuffer_fetch_non_coherent rendering barrier.
967     *
968     * On return from this function any framebuffer contents written by
969     * previous draw commands are guaranteed to be visible from subsequent
970     * fragment shader invocations using the
971     * MESA_shader_framebuffer_fetch_non_coherent interface.
972     */
973    /** @{ */
974    void (*BlendBarrier)(struct gl_context *ctx);
975    /** @} */
976 
977    /**
978     * \name GL_ARB_compute_shader interface
979     */
980    /*@{*/
981    void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups);
982    void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect);
983    /*@}*/
984 
985    /**
986     * \name GL_ARB_compute_variable_group_size interface
987     */
988    /*@{*/
989    void (*DispatchComputeGroupSize)(struct gl_context *ctx,
990                                     const GLuint *num_groups,
991                                     const GLuint *group_size);
992    /*@}*/
993 
994    /**
995     * Query information about memory. Device memory is e.g. VRAM. Staging
996     * memory is e.g. GART. All sizes are in kilobytes.
997     */
998    void (*QueryMemoryInfo)(struct gl_context *ctx,
999                            struct gl_memory_info *info);
1000 
1001    /**
1002     * Indicate that this thread is being used by Mesa as a background drawing
1003     * thread for the given GL context.
1004     *
1005     * If this function is called more than once from any given thread, each
1006     * subsequent call overrides the context that was passed in the previous
1007     * call.  Mesa takes advantage of this to re-use a background thread to
1008     * perform drawing on behalf of multiple contexts.
1009     *
1010     * Mesa may sometimes call this function from a non-background thread
1011     * (i.e. a thread that has already been bound to a context using
1012     * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to
1013     * the context that is bound to this thread.
1014     *
1015     * Mesa will only call this function if GL multithreading is enabled.
1016     */
1017    void (*SetBackgroundContext)(struct gl_context *ctx,
1018                                 struct util_queue_monitoring *queue_info);
1019 
1020    /**
1021     * \name GL_ARB_sparse_buffer interface
1022     */
1023    /*@{*/
1024    void (*BufferPageCommitment)(struct gl_context *ctx,
1025                                 struct gl_buffer_object *bufferObj,
1026                                 GLintptr offset, GLsizeiptr size,
1027                                 GLboolean commit);
1028    /*@}*/
1029 
1030    /**
1031     * \name GL_ARB_bindless_texture interface
1032     */
1033    /*@{*/
1034    GLuint64 (*NewTextureHandle)(struct gl_context *ctx,
1035                                 struct gl_texture_object *texObj,
1036                                 struct gl_sampler_object *sampObj);
1037    void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle);
1038    void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle,
1039                                      bool resident);
1040    GLuint64 (*NewImageHandle)(struct gl_context *ctx,
1041                               struct gl_image_unit *imgObj);
1042    void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle);
1043    void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle,
1044                                    GLenum access, bool resident);
1045    /*@}*/
1046 
1047 
1048    /**
1049     * \name GL_EXT_external_objects interface
1050     */
1051    /*@{*/
1052   /**
1053     * Called to allocate a new memory object.  Drivers will usually
1054     * allocate/return a subclass of gl_memory_object.
1055     */
1056    struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx,
1057                                                 GLuint name);
1058    /**
1059     * Called to delete/free a memory object.  Drivers should free the
1060     * object and any image data it contains.
1061     */
1062    void (*DeleteMemoryObject)(struct gl_context *ctx,
1063                               struct gl_memory_object *memObj);
1064 
1065    /**
1066     * Set the given memory object as the texture's storage.
1067     */
1068    GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx,
1069                                                  struct gl_texture_object *tex_obj,
1070                                                  struct gl_memory_object *mem_obj,
1071                                                  GLsizei levels, GLsizei width,
1072                                                  GLsizei height, GLsizei depth,
1073                                                  GLuint64 offset);
1074 
1075    /**
1076     * Use a memory object as the backing data for a buffer object
1077     */
1078    GLboolean (*BufferDataMem)(struct gl_context *ctx,
1079                               GLenum target,
1080                               GLsizeiptrARB size,
1081                               struct gl_memory_object *memObj,
1082                               GLuint64 offset,
1083                               GLenum usage,
1084                               struct gl_buffer_object *bufObj);
1085 
1086    /**
1087     * Fill uuid with an unique identifier for this driver
1088     *
1089     * uuid must point to GL_UUID_SIZE_EXT bytes of available memory
1090     */
1091    void (*GetDriverUuid)(struct gl_context *ctx, char *uuid);
1092 
1093    /**
1094     * Fill uuid with an unique identifier for the device associated
1095     * to this driver
1096     *
1097     * uuid must point to GL_UUID_SIZE_EXT bytes of available memory
1098     */
1099    void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid);
1100 
1101    /*@}*/
1102 
1103    /**
1104     * \name GL_EXT_external_objects_fd interface
1105     */
1106    /*@{*/
1107    /**
1108     * Called to import a memory object. The caller relinquishes ownership
1109     * of fd after the call returns.
1110     *
1111     * Accessing fd after ImportMemoryObjectFd returns results in undefined
1112     * behaviour. This is consistent with EXT_external_object_fd.
1113     */
1114    void (*ImportMemoryObjectFd)(struct gl_context *ctx,
1115                                 struct gl_memory_object *memObj,
1116                                 GLuint64 size,
1117                                 int fd);
1118    /*@}*/
1119 
1120    /**
1121     * \name GL_ARB_get_program_binary
1122     */
1123    /*@{*/
1124    /**
1125     * Calls to retrieve/store a binary serialized copy of the current program.
1126     */
1127    void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1);
1128 
1129    void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx,
1130                                             struct gl_program *prog);
1131 
1132    void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx,
1133                                               struct gl_shader_program *shProg,
1134                                               struct gl_program *prog);
1135    /*@}*/
1136 };
1137 
1138 
1139 /**
1140  * Per-vertex functions.
1141  *
1142  * These are the functions which can appear between glBegin and glEnd.
1143  * Depending on whether we're inside or outside a glBegin/End pair
1144  * and whether we're in immediate mode or building a display list, these
1145  * functions behave differently.  This structure allows us to switch
1146  * between those modes more easily.
1147  *
1148  * Generally, these pointers point to functions in the VBO module.
1149  */
1150 typedef struct {
1151    void (GLAPIENTRYP ArrayElement)( GLint );
1152    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
1153    void (GLAPIENTRYP Color3fv)( const GLfloat * );
1154    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1155    void (GLAPIENTRYP Color4fv)( const GLfloat * );
1156    void (GLAPIENTRYP EdgeFlag)( GLboolean );
1157    void (GLAPIENTRYP EvalCoord1f)( GLfloat );
1158    void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * );
1159    void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat );
1160    void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * );
1161    void (GLAPIENTRYP EvalPoint1)( GLint );
1162    void (GLAPIENTRYP EvalPoint2)( GLint, GLint );
1163    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
1164    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
1165    void (GLAPIENTRYP Indexf)( GLfloat );
1166    void (GLAPIENTRYP Indexfv)( const GLfloat * );
1167    void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * );
1168    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
1169    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
1170    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
1171    void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
1172    void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
1173    void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
1174    void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
1175    void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
1176    void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
1177    void (GLAPIENTRYP Normal3fv)( const GLfloat * );
1178    void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
1179    void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
1180    void (GLAPIENTRYP TexCoord1f)( GLfloat );
1181    void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
1182    void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
1183    void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
1184    void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
1185    void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
1186    void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1187    void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
1188    void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
1189    void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
1190    void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
1191    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
1192    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
1193    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
1194    void (GLAPIENTRYP CallList)( GLuint );
1195    void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );
1196    void (GLAPIENTRYP Begin)( GLenum );
1197    void (GLAPIENTRYP End)( void );
1198    void (GLAPIENTRYP PrimitiveRestartNV)( void );
1199    /* Originally for GL_NV_vertex_program, now used only dlist.c and friends */
1200    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
1201    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
1202    void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
1203    void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
1204    void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1205    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
1206    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1207    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
1208    /* GL_ARB_vertex_program */
1209    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
1210    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
1211    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
1212    void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
1213    void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
1214    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
1215    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
1216    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
1217 
1218    /* GL_EXT_gpu_shader4 / GL 3.0 */
1219    void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x);
1220    void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y);
1221    void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z);
1222    void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w);
1223    void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v);
1224    void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v);
1225    void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v);
1226 
1227    void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x);
1228    void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y);
1229    void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z);
1230    void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
1231    void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v);
1232    void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v);
1233    void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v);
1234 
1235    /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */
1236    void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value );
1237    void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value);
1238 
1239    void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value );
1240    void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value);
1241 
1242    void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value );
1243    void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value);
1244 
1245    void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords );
1246    void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords );
1247 
1248    void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords );
1249    void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords );
1250 
1251    void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords );
1252    void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords );
1253 
1254    void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords );
1255    void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords );
1256 
1257    void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords );
1258    void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords );
1259    void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords );
1260    void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords );
1261    void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords );
1262    void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords );
1263    void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords );
1264    void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords );
1265 
1266    void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords );
1267    void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords );
1268 
1269    void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color );
1270    void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color );
1271 
1272    void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color );
1273    void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color );
1274 
1275    void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color );
1276    void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color );
1277 
1278    void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type,
1279 					GLboolean normalized, GLuint value);
1280    void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type,
1281 					GLboolean normalized, GLuint value);
1282    void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type,
1283 					GLboolean normalized, GLuint value);
1284    void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type,
1285 					GLboolean normalized, GLuint value);
1286    void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type,
1287 					GLboolean normalized,
1288 					 const GLuint *value);
1289    void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type,
1290 					GLboolean normalized,
1291 					 const GLuint *value);
1292    void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type,
1293 					GLboolean normalized,
1294 					 const GLuint *value);
1295    void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type,
1296 					 GLboolean normalized,
1297 					 const GLuint *value);
1298 
1299    /* GL_ARB_vertex_attrib_64bit / GL 4.1 */
1300    void (GLAPIENTRYP VertexAttribL1d)( GLuint index, GLdouble x);
1301    void (GLAPIENTRYP VertexAttribL2d)( GLuint index, GLdouble x, GLdouble y);
1302    void (GLAPIENTRYP VertexAttribL3d)( GLuint index, GLdouble x, GLdouble y, GLdouble z);
1303    void (GLAPIENTRYP VertexAttribL4d)( GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
1304 
1305 
1306    void (GLAPIENTRYP VertexAttribL1dv)( GLuint index, const GLdouble *v);
1307    void (GLAPIENTRYP VertexAttribL2dv)( GLuint index, const GLdouble *v);
1308    void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v);
1309    void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v);
1310 
1311    void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x);
1312    void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v);
1313 } GLvertexformat;
1314 
1315 
1316 #endif /* DD_INCLUDED */
1317