Home | History | Annotate | Download | only in main
      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