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