Merge remote branch 'origin/master' into pipe-video
[mesa.git] / src / mesa / main / dd.h
index e99e87d9059ce6251b88e4335b376cc4aed43021..c62969e9b7ecca0d14cc8b0cb76d1d3cb248c9c2 100644 (file)
 
 /* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
 
 
 /* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
 
-struct gl_pixelstore_attrib;
-struct gl_display_list;
+#include "glheader.h"
 
 
-#if FEATURE_ARB_vertex_buffer_object
+struct gl_buffer_object;
+struct gl_context;
+struct gl_display_list;
+struct gl_framebuffer;
+struct gl_pixelstore_attrib;
+struct gl_program;
+struct gl_renderbuffer;
+struct gl_renderbuffer_attachment;
+struct gl_shader;
+struct gl_shader_program;
+struct gl_texture_image;
+struct gl_texture_object;
+
+/* GL_ARB_vertex_buffer_object */
 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
  * NULL) if buffer is unavailable for immediate mapping.
  *
 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
  * NULL) if buffer is unavailable for immediate mapping.
  *
@@ -49,7 +61,6 @@ struct gl_display_list;
  * respect the contents of already referenced data.
  */
 #define MESA_MAP_NOWAIT_BIT       0x0040
  * respect the contents of already referenced data.
  */
 #define MESA_MAP_NOWAIT_BIT       0x0040
-#endif
 
 
 /**
 
 
 /**
@@ -71,7 +82,7 @@ struct dd_function_table {
     * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
     * returned.
     */
     * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
     * returned.
     */
-   const GLubyte * (*GetString)( GLcontext *ctx, GLenum name );
+   const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name );
 
    /**
     * Notify the driver after Mesa has made some internal state changes.  
 
    /**
     * Notify the driver after Mesa has made some internal state changes.  
@@ -79,7 +90,7 @@ struct dd_function_table {
     * This is in addition to any state change callbacks Mesa may already have
     * made.
     */
     * This is in addition to any state change callbacks Mesa may already have
     * made.
     */
-   void (*UpdateState)( GLcontext *ctx, GLbitfield new_state );
+   void (*UpdateState)( struct gl_context *ctx, GLbitfield new_state );
 
    /**
     * Get the width and height of the named buffer/window.
 
    /**
     * Get the width and height of the named buffer/window.
@@ -87,49 +98,49 @@ struct dd_function_table {
     * Mesa uses this to determine when the driver's window size has changed.
     * XXX OBSOLETE: this function will be removed in the future.
     */
     * Mesa uses this to determine when the driver's window size has changed.
     * XXX OBSOLETE: this function will be removed in the future.
     */
-   void (*GetBufferSize)( GLframebuffer *buffer,
+   void (*GetBufferSize)( struct gl_framebuffer *buffer,
                           GLuint *width, GLuint *height );
 
    /**
     * Resize the given framebuffer to the given size.
     * XXX OBSOLETE: this function will be removed in the future.
     */
                           GLuint *width, GLuint *height );
 
    /**
     * Resize the given framebuffer to the given size.
     * XXX OBSOLETE: this function will be removed in the future.
     */
-   void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb,
+   void (*ResizeBuffers)( struct gl_context *ctx, struct gl_framebuffer *fb,
                           GLuint width, GLuint height);
 
    /**
     * Called whenever an error is generated.  
                           GLuint width, GLuint height);
 
    /**
     * Called whenever an error is generated.  
-    * __GLcontextRec::ErrorValue contains the error value.
+    * __struct gl_contextRec::ErrorValue contains the error value.
     */
     */
-   void (*Error)( GLcontext *ctx );
+   void (*Error)( struct gl_context *ctx );
 
    /**
     * This is called whenever glFinish() is called.
     */
 
    /**
     * This is called whenever glFinish() is called.
     */
-   void (*Finish)( GLcontext *ctx );
+   void (*Finish)( struct gl_context *ctx );
 
    /**
     * This is called whenever glFlush() is called.
     */
 
    /**
     * This is called whenever glFlush() is called.
     */
-   void (*Flush)( GLcontext *ctx );
+   void (*Flush)( struct gl_context *ctx );
 
    /**
     * Clear the color/depth/stencil/accum buffer(s).
     * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
     *                 renderbuffers need to be cleared.
     */
 
    /**
     * Clear the color/depth/stencil/accum buffer(s).
     * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
     *                 renderbuffers need to be cleared.
     */
-   void (*Clear)( GLcontext *ctx, GLbitfield buffers );
+   void (*Clear)( struct gl_context *ctx, GLbitfield buffers );
 
    /**
     * Execute glAccum command.
     */
 
    /**
     * Execute glAccum command.
     */
-   void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value );
+   void (*Accum)( struct gl_context *ctx, GLenum op, GLfloat value );
 
 
    /**
     * Execute glRasterPos, updating the ctx->Current.Raster fields
     */
 
 
    /**
     * Execute glRasterPos, updating the ctx->Current.Raster fields
     */
-   void (*RasterPos)( GLcontext *ctx, const GLfloat v[4] );
+   void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] );
 
    /**
     * \name Image-related functions
 
    /**
     * \name Image-related functions
@@ -140,7 +151,7 @@ struct dd_function_table {
     * Called by glDrawPixels().
     * \p unpack describes how to unpack the source image data.
     */
     * Called by glDrawPixels().
     * \p unpack describes how to unpack the source image data.
     */
-   void (*DrawPixels)( GLcontext *ctx,
+   void (*DrawPixels)( struct gl_context *ctx,
                       GLint x, GLint y, GLsizei width, GLsizei height,
                       GLenum format, GLenum type,
                       const struct gl_pixelstore_attrib *unpack,
                       GLint x, GLint y, GLsizei width, GLsizei height,
                       GLenum format, GLenum type,
                       const struct gl_pixelstore_attrib *unpack,
@@ -149,7 +160,7 @@ struct dd_function_table {
    /**
     * Called by glReadPixels().
     */
    /**
     * Called by glReadPixels().
     */
-   void (*ReadPixels)( GLcontext *ctx,
+   void (*ReadPixels)( struct gl_context *ctx,
                       GLint x, GLint y, GLsizei width, GLsizei height,
                       GLenum format, GLenum type,
                       const struct gl_pixelstore_attrib *unpack,
                       GLint x, GLint y, GLsizei width, GLsizei height,
                       GLenum format, GLenum type,
                       const struct gl_pixelstore_attrib *unpack,
@@ -158,14 +169,14 @@ struct dd_function_table {
    /**
     * Called by glCopyPixels().  
     */
    /**
     * Called by glCopyPixels().  
     */
-   void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy,
+   void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy,
                        GLsizei width, GLsizei height,
                        GLint dstx, GLint dsty, GLenum type );
 
    /**
     * Called by glBitmap().  
     */
                        GLsizei width, GLsizei height,
                        GLint dstx, GLint dsty, GLenum type );
 
    /**
     * Called by glBitmap().  
     */
-   void (*Bitmap)( GLcontext *ctx,
+   void (*Bitmap)( struct gl_context *ctx,
                   GLint x, GLint y, GLsizei width, GLsizei height,
                   const struct gl_pixelstore_attrib *unpack,
                   const GLubyte *bitmap );
                   GLint x, GLint y, GLsizei width, GLsizei height,
                   const struct gl_pixelstore_attrib *unpack,
                   const GLubyte *bitmap );
@@ -184,7 +195,7 @@ struct dd_function_table {
     * functions.  The driver should examine \p internalFormat and return a
     * gl_format value.
     */
     * functions.  The driver should examine \p internalFormat and return a
     * gl_format value.
     */
-   GLuint (*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat,
+   GLuint (*ChooseTextureFormat)( struct gl_context *ctx, GLint internalFormat,
                                      GLenum srcFormat, GLenum srcType );
 
    /**
                                      GLenum srcFormat, GLenum srcType );
 
    /**
@@ -204,7 +215,7 @@ struct dd_function_table {
     *
     * Drivers should call a fallback routine from texstore.c if needed.
     */
     *
     * Drivers should call a fallback routine from texstore.c if needed.
     */
-   void (*TexImage1D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexImage1D)( struct gl_context *ctx, GLenum target, GLint level,
                        GLint internalFormat,
                        GLint width, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
                        GLint internalFormat,
                        GLint width, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
@@ -217,7 +228,7 @@ struct dd_function_table {
     * 
     * \sa dd_function_table::TexImage1D.
     */
     * 
     * \sa dd_function_table::TexImage1D.
     */
-   void (*TexImage2D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexImage2D)( struct gl_context *ctx, GLenum target, GLint level,
                        GLint internalFormat,
                        GLint width, GLint height, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
                        GLint internalFormat,
                        GLint width, GLint height, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
@@ -230,7 +241,7 @@ struct dd_function_table {
     * 
     * \sa dd_function_table::TexImage1D.
     */
     * 
     * \sa dd_function_table::TexImage1D.
     */
-   void (*TexImage3D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexImage3D)( struct gl_context *ctx, GLenum target, GLint level,
                        GLint internalFormat,
                        GLint width, GLint height, GLint depth, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
                        GLint internalFormat,
                        GLint width, GLint height, GLint depth, GLint border,
                        GLenum format, GLenum type, const GLvoid *pixels,
@@ -259,7 +270,7 @@ struct dd_function_table {
     *
     * The driver should use a fallback routine from texstore.c if needed.
     */
     *
     * The driver should use a fallback routine from texstore.c if needed.
     */
-   void (*TexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level,
                           GLint xoffset, GLsizei width,
                           GLenum format, GLenum type,
                           const GLvoid *pixels,
                           GLint xoffset, GLsizei width,
                           GLenum format, GLenum type,
                           const GLvoid *pixels,
@@ -272,7 +283,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::TexSubImage1D.
     */
     *
     * \sa dd_function_table::TexSubImage1D.
     */
-   void (*TexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexSubImage2D)( struct gl_context *ctx, GLenum target, GLint level,
                           GLint xoffset, GLint yoffset,
                           GLsizei width, GLsizei height,
                           GLenum format, GLenum type,
                           GLint xoffset, GLint yoffset,
                           GLsizei width, GLsizei height,
                           GLenum format, GLenum type,
@@ -286,7 +297,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::TexSubImage1D.
     */
     *
     * \sa dd_function_table::TexSubImage1D.
     */
-   void (*TexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*TexSubImage3D)( struct gl_context *ctx, GLenum target, GLint level,
                           GLint xoffset, GLint yoffset, GLint zoffset,
                           GLsizei width, GLsizei height, GLint depth,
                           GLenum format, GLenum type,
                           GLint xoffset, GLint yoffset, GLint zoffset,
                           GLsizei width, GLsizei height, GLint depth,
                           GLenum format, GLenum type,
@@ -298,7 +309,7 @@ struct dd_function_table {
    /**
     * Called by glGetTexImage().
     */
    /**
     * Called by glGetTexImage().
     */
-   void (*GetTexImage)( GLcontext *ctx, GLenum target, GLint level,
+   void (*GetTexImage)( struct gl_context *ctx, GLenum target, GLint level,
                         GLenum format, GLenum type, GLvoid *pixels,
                         struct gl_texture_object *texObj,
                         struct gl_texture_image *texImage );
                         GLenum format, GLenum type, GLvoid *pixels,
                         struct gl_texture_object *texObj,
                         struct gl_texture_image *texImage );
@@ -308,7 +319,7 @@ struct dd_function_table {
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
-   void (*CopyTexImage1D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*CopyTexImage1D)( struct gl_context *ctx, GLenum target, GLint level,
                            GLenum internalFormat, GLint x, GLint y,
                            GLsizei width, GLint border );
 
                            GLenum internalFormat, GLint x, GLint y,
                            GLsizei width, GLint border );
 
@@ -317,7 +328,7 @@ struct dd_function_table {
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
-   void (*CopyTexImage2D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*CopyTexImage2D)( struct gl_context *ctx, GLenum target, GLint level,
                            GLenum internalFormat, GLint x, GLint y,
                            GLsizei width, GLsizei height, GLint border );
 
                            GLenum internalFormat, GLint x, GLint y,
                            GLsizei width, GLsizei height, GLint border );
 
@@ -326,7 +337,7 @@ struct dd_function_table {
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
-   void (*CopyTexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*CopyTexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level,
                               GLint xoffset,
                               GLint x, GLint y, GLsizei width );
    /**
                               GLint xoffset,
                               GLint x, GLint y, GLsizei width );
    /**
@@ -334,7 +345,7 @@ struct dd_function_table {
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
-   void (*CopyTexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*CopyTexSubImage2D)( struct gl_context *ctx, GLenum target, GLint level,
                               GLint xoffset, GLint yoffset,
                               GLint x, GLint y,
                               GLsizei width, GLsizei height );
                               GLint xoffset, GLint yoffset,
                               GLint x, GLint y,
                               GLsizei width, GLsizei height );
@@ -343,7 +354,7 @@ struct dd_function_table {
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
     * 
     * Drivers should use a fallback routine from texstore.c if needed.
     */
-   void (*CopyTexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
+   void (*CopyTexSubImage3D)( struct gl_context *ctx, GLenum target, GLint level,
                               GLint xoffset, GLint yoffset, GLint zoffset,
                               GLint x, GLint y,
                               GLsizei width, GLsizei height );
                               GLint xoffset, GLint yoffset, GLint zoffset,
                               GLint x, GLint y,
                               GLsizei width, GLsizei height );
@@ -351,7 +362,7 @@ struct dd_function_table {
    /**
     * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
     */
    /**
     * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
     */
-   void (*GenerateMipmap)(GLcontext *ctx, GLenum target,
+   void (*GenerateMipmap)(struct gl_context *ctx, GLenum target,
                           struct gl_texture_object *texObj);
 
    /**
                           struct gl_texture_object *texObj);
 
    /**
@@ -360,7 +371,7 @@ struct dd_function_table {
     *
     * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails.
     */
     *
     * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails.
     */
-   GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target,
+   GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target,
                                   GLint level, GLint internalFormat,
                                   GLenum format, GLenum type,
                                   GLint width, GLint height,
                                   GLint level, GLint internalFormat,
                                   GLenum format, GLenum type,
                                   GLint width, GLint height,
@@ -388,7 +399,7 @@ struct dd_function_table {
     * \a retainInternalCopy is returned by this function and indicates whether
     * core Mesa should keep an internal copy of the texture image.
     */
     * \a retainInternalCopy is returned by this function and indicates whether
     * core Mesa should keep an internal copy of the texture image.
     */
-   void (*CompressedTexImage1D)( GLcontext *ctx, GLenum target,
+   void (*CompressedTexImage1D)( struct gl_context *ctx, GLenum target,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLint border,
                                  GLsizei imageSize, const GLvoid *data,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLint border,
                                  GLsizei imageSize, const GLvoid *data,
@@ -399,7 +410,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::CompressedTexImage1D.
     */
     *
     * \sa dd_function_table::CompressedTexImage1D.
     */
-   void (*CompressedTexImage2D)( GLcontext *ctx, GLenum target,
+   void (*CompressedTexImage2D)( struct gl_context *ctx, GLenum target,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLsizei height, GLint border,
                                  GLsizei imageSize, const GLvoid *data,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLsizei height, GLint border,
                                  GLsizei imageSize, const GLvoid *data,
@@ -410,7 +421,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
-   void (*CompressedTexImage3D)( GLcontext *ctx, GLenum target,
+   void (*CompressedTexImage3D)( struct gl_context *ctx, GLenum target,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLsizei height, GLsizei depth,
                                  GLint border,
                                  GLint level, GLint internalFormat,
                                  GLsizei width, GLsizei height, GLsizei depth,
                                  GLint border,
@@ -435,7 +446,7 @@ struct dd_function_table {
     * \param texImage is the target texture image.  It will have the texture \p
     * width, \p height, \p depth, \p border and \p internalFormat information.
     */
     * \param texImage is the target texture image.  It will have the texture \p
     * width, \p height, \p depth, \p border and \p internalFormat information.
     */
-   void (*CompressedTexSubImage1D)(GLcontext *ctx, GLenum target, GLint level,
+   void (*CompressedTexSubImage1D)(struct gl_context *ctx, GLenum target, GLint level,
                                    GLint xoffset, GLsizei width,
                                    GLenum format,
                                    GLsizei imageSize, const GLvoid *data,
                                    GLint xoffset, GLsizei width,
                                    GLenum format,
                                    GLsizei imageSize, const GLvoid *data,
@@ -446,7 +457,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
-   void (*CompressedTexSubImage2D)(GLcontext *ctx, GLenum target, GLint level,
+   void (*CompressedTexSubImage2D)(struct gl_context *ctx, GLenum target, GLint level,
                                    GLint xoffset, GLint yoffset,
                                    GLsizei width, GLint height,
                                    GLenum format,
                                    GLint xoffset, GLint yoffset,
                                    GLsizei width, GLint height,
                                    GLenum format,
@@ -458,7 +469,7 @@ struct dd_function_table {
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
     *
     * \sa dd_function_table::CompressedTexImage3D.
     */
-   void (*CompressedTexSubImage3D)(GLcontext *ctx, GLenum target, GLint level,
+   void (*CompressedTexSubImage3D)(struct gl_context *ctx, GLenum target, GLint level,
                                    GLint xoffset, GLint yoffset, GLint zoffset,
                                    GLsizei width, GLint height, GLint depth,
                                    GLenum format,
                                    GLint xoffset, GLint yoffset, GLint zoffset,
                                    GLsizei width, GLint height, GLint depth,
                                    GLenum format,
@@ -470,7 +481,7 @@ struct dd_function_table {
    /**
     * Called by glGetCompressedTexImage.
     */
    /**
     * Called by glGetCompressedTexImage.
     */
-   void (*GetCompressedTexImage)(GLcontext *ctx, GLenum target, GLint level,
+   void (*GetCompressedTexImage)(struct gl_context *ctx, GLenum target, GLint level,
                                  GLvoid *img,
                                  struct gl_texture_object *texObj,
                                  struct gl_texture_image *texImage);
                                  GLvoid *img,
                                  struct gl_texture_object *texObj,
                                  struct gl_texture_image *texImage);
@@ -485,7 +496,7 @@ struct dd_function_table {
    /**
     * Called by glBindTexture().
     */
    /**
     * Called by glBindTexture().
     */
-   void (*BindTexture)( GLcontext *ctx, GLenum target,
+   void (*BindTexture)( struct gl_context *ctx, GLenum target,
                         struct gl_texture_object *tObj );
 
    /**
                         struct gl_texture_object *tObj );
 
    /**
@@ -493,7 +504,7 @@ struct dd_function_table {
     * A new gl_texture_object should be returned.  The driver should
     * attach to it any device-specific info it needs.
     */
     * A new gl_texture_object should be returned.  The driver should
     * attach to it any device-specific info it needs.
     */
-   struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name,
+   struct gl_texture_object * (*NewTextureObject)( struct gl_context *ctx, GLuint name,
                                                    GLenum target );
    /**
     * Called when a texture object is about to be deallocated.  
                                                    GLenum target );
    /**
     * Called when a texture object is about to be deallocated.  
@@ -501,22 +512,22 @@ struct dd_function_table {
     * Driver should delete the gl_texture_object object and anything
     * hanging off of it.
     */
     * Driver should delete the gl_texture_object object and anything
     * hanging off of it.
     */
-   void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+   void (*DeleteTexture)( struct gl_context *ctx, struct gl_texture_object *tObj );
 
    /**
     * Called to allocate a new texture image object.
     */
 
    /**
     * Called to allocate a new texture image object.
     */
-   struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx );
+   struct gl_texture_image * (*NewTextureImage)( struct gl_context *ctx );
 
    /** 
     * Called to free tImage->Data.
     */
 
    /** 
     * Called to free tImage->Data.
     */
-   void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
+   void (*FreeTexImageData)( struct gl_context *ctx, struct gl_texture_image *tImage );
 
    /** Map texture image data into user space */
 
    /** Map texture image data into user space */
-   void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+   void (*MapTexture)( struct gl_context *ctx, struct gl_texture_object *tObj );
    /** Unmap texture images from user space */
    /** Unmap texture images from user space */
-   void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+   void (*UnmapTexture)( struct gl_context *ctx, struct gl_texture_object *tObj );
 
    /**
     * Note: no context argument.  This function doesn't initially look
 
    /**
     * Note: no context argument.  This function doesn't initially look
@@ -534,7 +545,7 @@ struct dd_function_table {
    /**
     * Called by glAreTextureResident().
     */
    /**
     * Called by glAreTextureResident().
     */
-   GLboolean (*IsTextureResident)( GLcontext *ctx,
+   GLboolean (*IsTextureResident)( struct gl_context *ctx,
                                    struct gl_texture_object *t );
 
    /**
                                    struct gl_texture_object *t );
 
    /**
@@ -543,7 +554,7 @@ struct dd_function_table {
     * If \p tObj is NULL then the shared texture palette
     * gl_texture_object::Palette is to be updated.
     */
     * If \p tObj is NULL then the shared texture palette
     * gl_texture_object::Palette is to be updated.
     */
-   void (*UpdateTexturePalette)( GLcontext *ctx,
+   void (*UpdateTexturePalette)( struct gl_context *ctx,
                                  struct gl_texture_object *tObj );
    /*@}*/
 
                                  struct gl_texture_object *tObj );
    /*@}*/
 
@@ -552,22 +563,13 @@ struct dd_function_table {
     * \name Imaging functionality
     */
    /*@{*/
     * \name Imaging functionality
     */
    /*@{*/
-   void (*CopyColorTable)( GLcontext *ctx,
+   void (*CopyColorTable)( struct gl_context *ctx,
                           GLenum target, GLenum internalformat,
                           GLint x, GLint y, GLsizei width );
 
                           GLenum target, GLenum internalformat,
                           GLint x, GLint y, GLsizei width );
 
-   void (*CopyColorSubTable)( GLcontext *ctx,
+   void (*CopyColorSubTable)( struct gl_context *ctx,
                              GLenum target, GLsizei start,
                              GLint x, GLint y, GLsizei width );
                              GLenum target, GLsizei start,
                              GLint x, GLint y, GLsizei width );
-
-   void (*CopyConvolutionFilter1D)( GLcontext *ctx, GLenum target,
-                                   GLenum internalFormat,
-                                   GLint x, GLint y, GLsizei width );
-
-   void (*CopyConvolutionFilter2D)( GLcontext *ctx, GLenum target,
-                                   GLenum internalFormat,
-                                   GLint x, GLint y,
-                                   GLsizei width, GLsizei height );
    /*@}*/
 
 
    /*@}*/
 
 
@@ -576,21 +578,46 @@ struct dd_function_table {
     */
    /*@{*/
    /** Bind a vertex/fragment program */
     */
    /*@{*/
    /** Bind a vertex/fragment program */
-   void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog);
+   void (*BindProgram)(struct gl_context *ctx, GLenum target, struct gl_program *prog);
    /** Allocate a new program */
    /** Allocate a new program */
-   struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
+   struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, GLuint id);
    /** Delete a program */
    /** Delete a program */
-   void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog);   
-   /** Notify driver that a program string has been specified. */
-   void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 
-                              struct gl_program *prog);
+   void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);   
+   /**
+    * Notify driver that a program string (and GPU code) has been specified
+    * or modified.  Return GL_TRUE or GL_FALSE to indicate if the program is
+    * supported by the driver.
+    */
+   GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target, 
+                                    struct gl_program *prog);
 
    /** Query if program can be loaded onto hardware */
 
    /** Query if program can be loaded onto hardware */
-   GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 
+   GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target, 
                                struct gl_program *prog);
    
    /*@}*/
 
                                struct gl_program *prog);
    
    /*@}*/
 
+   /**
+    * \name GLSL shader/program functions.
+    */
+   /*@{*/
+   /**
+    * Called when a shader is compiled.
+    *
+    * Note that not all shader objects get ShaderCompile called on
+    * them.  Notably, the shaders containing builtin functions do not
+    * have CompileShader() called, so if lowering passes are done they
+    * need to also be performed in LinkShader().
+    */
+   GLboolean (*CompileShader)(struct gl_context *ctx, struct gl_shader *shader);
+   /**
+    * Called when a shader program is linked.
+    *
+    * This gives drivers an opportunity to clone the IR and make their
+    * own transformations on it for the purposes of code generation.
+    */
+   GLboolean (*LinkShader)(struct gl_context *ctx, struct gl_shader_program *shader);
+   /*@}*/
 
    /**
     * \name State-changing functions.
 
    /**
     * \name State-changing functions.
@@ -603,159 +630,133 @@ struct dd_function_table {
     */
    /*@{*/
    /** Specify the alpha test function */
     */
    /*@{*/
    /** Specify the alpha test function */
-   void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref);
+   void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref);
    /** Set the blend color */
    /** Set the blend color */
-   void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
+   void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]);
    /** Set the blend equation */
    /** Set the blend equation */
-   void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA);
+   void (*BlendEquationSeparate)(struct gl_context *ctx, GLenum modeRGB, GLenum modeA);
    /** Specify pixel arithmetic */
    /** Specify pixel arithmetic */
-   void (*BlendFuncSeparate)(GLcontext *ctx,
+   void (*BlendFuncSeparate)(struct gl_context *ctx,
                              GLenum sfactorRGB, GLenum dfactorRGB,
                              GLenum sfactorA, GLenum dfactorA);
    /** Specify clear values for the color buffers */
                              GLenum sfactorRGB, GLenum dfactorRGB,
                              GLenum sfactorA, GLenum dfactorA);
    /** Specify clear values for the color buffers */
-   void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]);
+   void (*ClearColor)(struct gl_context *ctx, const GLfloat color[4]);
    /** Specify the clear value for the depth buffer */
    /** Specify the clear value for the depth buffer */
-   void (*ClearDepth)(GLcontext *ctx, GLclampd d);
-   /** Specify the clear value for the color index buffers */
-   void (*ClearIndex)(GLcontext *ctx, GLuint index);
+   void (*ClearDepth)(struct gl_context *ctx, GLclampd d);
    /** Specify the clear value for the stencil buffer */
    /** Specify the clear value for the stencil buffer */
-   void (*ClearStencil)(GLcontext *ctx, GLint s);
+   void (*ClearStencil)(struct gl_context *ctx, GLint s);
    /** Specify a plane against which all geometry is clipped */
    /** Specify a plane against which all geometry is clipped */
-   void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation );
+   void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *equation );
    /** Enable and disable writing of frame buffer color components */
    /** Enable and disable writing of frame buffer color components */
-   void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask,
+   void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask,
                      GLboolean bmask, GLboolean amask );
                      GLboolean bmask, GLboolean amask );
-   void (*ColorMaskIndexed)(GLcontext *ctx, GLuint buf, GLboolean rmask,
+   void (*ColorMaskIndexed)(struct gl_context *ctx, GLuint buf, GLboolean rmask,
                             GLboolean gmask, GLboolean bmask, GLboolean amask);
    /** Cause a material color to track the current color */
                             GLboolean gmask, GLboolean bmask, GLboolean amask);
    /** Cause a material color to track the current color */
-   void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode);
+   void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode);
    /** Specify whether front- or back-facing facets can be culled */
    /** Specify whether front- or back-facing facets can be culled */
-   void (*CullFace)(GLcontext *ctx, GLenum mode);
+   void (*CullFace)(struct gl_context *ctx, GLenum mode);
    /** Define front- and back-facing polygons */
    /** Define front- and back-facing polygons */
-   void (*FrontFace)(GLcontext *ctx, GLenum mode);
+   void (*FrontFace)(struct gl_context *ctx, GLenum mode);
    /** Specify the value used for depth buffer comparisons */
    /** Specify the value used for depth buffer comparisons */
-   void (*DepthFunc)(GLcontext *ctx, GLenum func);
+   void (*DepthFunc)(struct gl_context *ctx, GLenum func);
    /** Enable or disable writing into the depth buffer */
    /** Enable or disable writing into the depth buffer */
-   void (*DepthMask)(GLcontext *ctx, GLboolean flag);
+   void (*DepthMask)(struct gl_context *ctx, GLboolean flag);
    /** Specify mapping of depth values from NDC to window coordinates */
    /** Specify mapping of depth values from NDC to window coordinates */
-   void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval);
+   void (*DepthRange)(struct gl_context *ctx, GLclampd nearval, GLclampd farval);
    /** Specify the current buffer for writing */
    /** Specify the current buffer for writing */
-   void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
+   void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
    /** Specify the buffers for writing for fragment programs*/
    /** Specify the buffers for writing for fragment programs*/
-   void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
+   void (*DrawBuffers)( struct gl_context *ctx, GLsizei n, const GLenum *buffers );
    /** Enable or disable server-side gl capabilities */
    /** Enable or disable server-side gl capabilities */
-   void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state);
+   void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
    /** Specify fog parameters */
    /** Specify fog parameters */
-   void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
+   void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params);
    /** Specify implementation-specific hints */
    /** Specify implementation-specific hints */
-   void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
-   /** Control the writing of individual bits in the color index buffers */
-   void (*IndexMask)(GLcontext *ctx, GLuint mask);
+   void (*Hint)(struct gl_context *ctx, GLenum target, GLenum mode);
    /** Set light source parameters.
     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
     * been transformed to eye-space.
     */
    /** Set light source parameters.
     * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
     * been transformed to eye-space.
     */
-   void (*Lightfv)(GLcontext *ctx, GLenum light,
+   void (*Lightfv)(struct gl_context *ctx, GLenum light,
                   GLenum pname, const GLfloat *params );
    /** Set the lighting model parameters */
                   GLenum pname, const GLfloat *params );
    /** Set the lighting model parameters */
-   void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
+   void (*LightModelfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params);
    /** Specify the line stipple pattern */
    /** Specify the line stipple pattern */
-   void (*LineStipple)(GLcontext *ctx, GLint factor, GLushort pattern );
+   void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern );
    /** Specify the width of rasterized lines */
    /** Specify the width of rasterized lines */
-   void (*LineWidth)(GLcontext *ctx, GLfloat width);
+   void (*LineWidth)(struct gl_context *ctx, GLfloat width);
    /** Specify a logical pixel operation for color index rendering */
    /** Specify a logical pixel operation for color index rendering */
-   void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
-   void (*PointParameterfv)(GLcontext *ctx, GLenum pname,
+   void (*LogicOpcode)(struct gl_context *ctx, GLenum opcode);
+   void (*PointParameterfv)(struct gl_context *ctx, GLenum pname,
                             const GLfloat *params);
    /** Specify the diameter of rasterized points */
                             const GLfloat *params);
    /** Specify the diameter of rasterized points */
-   void (*PointSize)(GLcontext *ctx, GLfloat size);
+   void (*PointSize)(struct gl_context *ctx, GLfloat size);
    /** Select a polygon rasterization mode */
    /** Select a polygon rasterization mode */
-   void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
+   void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode);
    /** Set the scale and units used to calculate depth values */
    /** Set the scale and units used to calculate depth values */
-   void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units);
+   void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units);
    /** Set the polygon stippling pattern */
    /** Set the polygon stippling pattern */
-   void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
+   void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask );
    /* Specifies the current buffer for reading */
    /* Specifies the current buffer for reading */
-   void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
+   void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer );
    /** Set rasterization mode */
    /** Set rasterization mode */
-   void (*RenderMode)(GLcontext *ctx, GLenum mode );
+   void (*RenderMode)(struct gl_context *ctx, GLenum mode );
    /** Define the scissor box */
    /** Define the scissor box */
-   void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
+   void (*Scissor)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
    /** Select flat or smooth shading */
    /** Select flat or smooth shading */
-   void (*ShadeModel)(GLcontext *ctx, GLenum mode);
+   void (*ShadeModel)(struct gl_context *ctx, GLenum mode);
    /** OpenGL 2.0 two-sided StencilFunc */
    /** OpenGL 2.0 two-sided StencilFunc */
-   void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func,
+   void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func,
                                GLint ref, GLuint mask);
    /** OpenGL 2.0 two-sided StencilMask */
                                GLint ref, GLuint mask);
    /** OpenGL 2.0 two-sided StencilMask */
-   void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask);
+   void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask);
    /** OpenGL 2.0 two-sided StencilOp */
    /** OpenGL 2.0 two-sided StencilOp */
-   void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail,
+   void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail,
                              GLenum zfail, GLenum zpass);
    /** Control the generation of texture coordinates */
                              GLenum zfail, GLenum zpass);
    /** Control the generation of texture coordinates */
-   void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname,
+   void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname,
                  const GLfloat *params);
    /** Set texture environment parameters */
                  const GLfloat *params);
    /** Set texture environment parameters */
-   void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname,
+   void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname,
                   const GLfloat *param);
    /** Set texture parameters */
                   const GLfloat *param);
    /** Set texture parameters */
-   void (*TexParameter)(GLcontext *ctx, GLenum target,
+   void (*TexParameter)(struct gl_context *ctx, GLenum target,
                         struct gl_texture_object *texObj,
                         GLenum pname, const GLfloat *params);
    /** Set the viewport */
                         struct gl_texture_object *texObj,
                         GLenum pname, const GLfloat *params);
    /** Set the viewport */
-   void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
+   void (*Viewport)(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
    /*@}*/
 
 
    /*@}*/
 
 
-   /** 
-    * \name State-query functions
-    *
-    * Return GL_TRUE if query was completed, GL_FALSE otherwise.
-    */
-   /*@{*/
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result);
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result);
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result);
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result);
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetInteger64v)(GLcontext *ctx, GLenum pname, GLint64 *result);
-   /** Return the value or values of a selected parameter */
-   GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result);
-   /*@}*/
-   
-
    /**
     * \name Vertex/pixel buffer object functions
     */
    /**
     * \name Vertex/pixel buffer object functions
     */
-#if FEATURE_ARB_vertex_buffer_object
    /*@{*/
    /*@{*/
-   void (*BindBuffer)( GLcontext *ctx, GLenum target,
+   void (*BindBuffer)( struct gl_context *ctx, GLenum target,
                       struct gl_buffer_object *obj );
 
                       struct gl_buffer_object *obj );
 
-   struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer,
+   struct gl_buffer_object * (*NewBufferObject)( struct gl_context *ctx, GLuint buffer,
                                                 GLenum target );
    
                                                 GLenum target );
    
-   void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
+   void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj );
 
 
-   GLboolean (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
+   GLboolean (*BufferData)( struct gl_context *ctx, GLenum target, GLsizeiptrARB size,
                             const GLvoid *data, GLenum usage,
                             struct gl_buffer_object *obj );
 
                             const GLvoid *data, GLenum usage,
                             struct gl_buffer_object *obj );
 
-   void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
+   void (*BufferSubData)( struct gl_context *ctx, GLenum target, GLintptrARB offset,
                          GLsizeiptrARB size, const GLvoid *data,
                          struct gl_buffer_object *obj );
 
                          GLsizeiptrARB size, const GLvoid *data,
                          struct gl_buffer_object *obj );
 
-   void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
+   void (*GetBufferSubData)( struct gl_context *ctx, GLenum target,
                             GLintptrARB offset, GLsizeiptrARB size,
                             GLvoid *data, struct gl_buffer_object *obj );
 
                             GLintptrARB offset, GLsizeiptrARB size,
                             GLvoid *data, struct gl_buffer_object *obj );
 
-   void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
+   void * (*MapBuffer)( struct gl_context *ctx, GLenum target, GLenum access,
                        struct gl_buffer_object *obj );
 
                        struct gl_buffer_object *obj );
 
-   void (*CopyBufferSubData)( GLcontext *ctx,
+   void (*CopyBufferSubData)( struct gl_context *ctx,
                               struct gl_buffer_object *src,
                               struct gl_buffer_object *dst,
                               GLintptr readOffset, GLintptr writeOffset,
                               struct gl_buffer_object *src,
                               struct gl_buffer_object *dst,
                               GLintptr readOffset, GLintptr writeOffset,
@@ -763,59 +764,69 @@ struct dd_function_table {
 
    /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
     */
 
    /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
     */
-   void * (*MapBufferRange)( GLcontext *ctx, GLenum target, GLintptr offset,
+   void * (*MapBufferRange)( struct gl_context *ctx, GLenum target, GLintptr offset,
                              GLsizeiptr length, GLbitfield access,
                              struct gl_buffer_object *obj);
 
                              GLsizeiptr length, GLbitfield access,
                              struct gl_buffer_object *obj);
 
-   void (*FlushMappedBufferRange)(GLcontext *ctx, GLenum target, 
+   void (*FlushMappedBufferRange)(struct gl_context *ctx, GLenum target, 
                                   GLintptr offset, GLsizeiptr length,
                                   struct gl_buffer_object *obj);
 
                                   GLintptr offset, GLsizeiptr length,
                                   struct gl_buffer_object *obj);
 
-   GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
+   GLboolean (*UnmapBuffer)( struct gl_context *ctx, GLenum target,
                             struct gl_buffer_object *obj );
    /*@}*/
                             struct gl_buffer_object *obj );
    /*@}*/
-#endif
 
    /**
 
    /**
-    * \name Functions for GL_EXT_framebuffer_object
+    * \name Functions for GL_APPLE_object_purgeable
+    */
+   /*@{*/
+   /* variations on ObjectPurgeable */
+   GLenum (*BufferObjectPurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option );
+   GLenum (*RenderObjectPurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option );
+   GLenum (*TextureObjectPurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option );
+
+   /* variations on ObjectUnpurgeable */
+   GLenum (*BufferObjectUnpurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option );
+   GLenum (*RenderObjectUnpurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option );
+   GLenum (*TextureObjectUnpurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option );
+   /*@}*/
+
+   /**
+    * \name Functions for GL_EXT_framebuffer_{object,blit}.
     */
     */
-#if FEATURE_EXT_framebuffer_object
    /*@{*/
    /*@{*/
-   struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
-   struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
-   void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
+   struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, GLuint name);
+   struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, GLuint name);
+   void (*BindFramebuffer)(struct gl_context *ctx, GLenum target,
                            struct gl_framebuffer *drawFb,
                            struct gl_framebuffer *readFb);
                            struct gl_framebuffer *drawFb,
                            struct gl_framebuffer *readFb);
-   void (*FramebufferRenderbuffer)(GLcontext *ctx, 
+   void (*FramebufferRenderbuffer)(struct gl_context *ctx, 
                                    struct gl_framebuffer *fb,
                                    GLenum attachment,
                                    struct gl_renderbuffer *rb);
                                    struct gl_framebuffer *fb,
                                    GLenum attachment,
                                    struct gl_renderbuffer *rb);
-   void (*RenderTexture)(GLcontext *ctx,
+   void (*RenderTexture)(struct gl_context *ctx,
                          struct gl_framebuffer *fb,
                          struct gl_renderbuffer_attachment *att);
                          struct gl_framebuffer *fb,
                          struct gl_renderbuffer_attachment *att);
-   void (*FinishRenderTexture)(GLcontext *ctx,
+   void (*FinishRenderTexture)(struct gl_context *ctx,
                                struct gl_renderbuffer_attachment *att);
                                struct gl_renderbuffer_attachment *att);
-   void (*ValidateFramebuffer)(GLcontext *ctx,
+   void (*ValidateFramebuffer)(struct gl_context *ctx,
                                struct gl_framebuffer *fb);
    /*@}*/
                                struct gl_framebuffer *fb);
    /*@}*/
-#endif
-#if FEATURE_EXT_framebuffer_blit
-   void (*BlitFramebuffer)(GLcontext *ctx,
+   void (*BlitFramebuffer)(struct gl_context *ctx,
                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                            GLbitfield mask, GLenum filter);
                            GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                            GLbitfield mask, GLenum filter);
-#endif
 
    /**
     * \name Query objects
     */
    /*@{*/
 
    /**
     * \name Query objects
     */
    /*@{*/
-   struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
-   void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
-   void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
-   void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
-   void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
-   void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
+   struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id);
+   void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q);
+   void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q);
+   void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q);
+   void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q);
+   void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q);
    /*@}*/
 
 
    /*@}*/
 
 
@@ -823,63 +834,21 @@ struct dd_function_table {
     * \name Vertex Array objects
     */
    /*@{*/
     * \name Vertex Array objects
     */
    /*@{*/
-   struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
-   void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
-   void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
+   struct gl_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id);
+   void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_array_object *obj);
+   void (*BindArrayObject)(struct gl_context *ctx, struct gl_array_object *obj);
    /*@}*/
 
    /**
     * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
     */
    /*@{*/
    /*@}*/
 
    /**
     * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
     */
    /*@{*/
-   void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
-   void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
-                              const GLcharARB *name);
-   void (*CompileShader)(GLcontext *ctx, GLuint shader);
-   GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
-   GLuint (*CreateProgram)(GLcontext *ctx);
-   void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
-   void (*DeleteShader)(GLcontext *ctx, GLuint shader);
-   void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
-   void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
-                           GLsizei maxLength, GLsizei * length, GLint * size,
-                           GLenum * type, GLcharARB * name);
-   void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
-                            GLsizei maxLength, GLsizei *length, GLint *size,
-                            GLenum *type, GLcharARB *name);
-   void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
-                              GLsizei *count, GLuint *obj);
-   GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
-                              const GLcharARB *name);
-   GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
-   void (*GetProgramiv)(GLcontext *ctx, GLuint program,
-                        GLenum pname, GLint *params);
-   void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
-                             GLsizei *length, GLchar *infoLog);
-   void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
-                       GLenum pname, GLint *params);
-   void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
-                            GLsizei *length, GLchar *infoLog);
-   void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
-                           GLsizei *length, GLcharARB *sourceOut);
-   void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
-                        GLfloat *params);
-   void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
-                        GLint *params);
-   GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
-                               const GLcharARB *name);
-   GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
-   GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
-   void (*LinkProgram)(GLcontext *ctx, GLuint program);
-   void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
-   void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
-                   const GLvoid *values, GLenum type);
-   void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
-                         GLint location, GLsizei count,
-                         GLboolean transpose, const GLfloat *values);
-   void (*UseProgram)(GLcontext *ctx, GLuint program);
-   void (*ValidateProgram)(GLcontext *ctx, GLuint program);
-   /* XXX many more to come */
+   struct gl_shader *(*NewShader)(struct gl_context *ctx, GLuint name, GLenum type);
+   void (*DeleteShader)(struct gl_context *ctx, struct gl_shader *shader);
+   struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, GLuint name);
+   void (*DeleteShaderProgram)(struct gl_context *ctx,
+                               struct gl_shader_program *shProg);
+   void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg);
    /*@}*/
 
 
    /*@}*/
 
 
@@ -905,7 +874,7 @@ struct dd_function_table {
     * This must be non-NULL if a driver installs a custom T&L module and sets
     * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
     */
     * This must be non-NULL if a driver installs a custom T&L module and sets
     * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
     */
-   void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
+   void (*ValidateTnlModule)( struct gl_context *ctx, GLuint new_state );
 
 
 #define PRIM_OUTSIDE_BEGIN_END   (GL_POLYGON+1)
 
 
 #define PRIM_OUTSIDE_BEGIN_END   (GL_POLYGON+1)
@@ -932,7 +901,7 @@ struct dd_function_table {
 #define FLUSH_UPDATE_CURRENT  0x2
    /**
     * Set by the driver-supplied T&L engine whenever vertices are buffered
 #define FLUSH_UPDATE_CURRENT  0x2
    /**
     * Set by the driver-supplied T&L engine whenever vertices are buffered
-    * between glBegin()/glEnd() objects or __GLcontextRec::Current is not
+    * between glBegin()/glEnd() objects or __struct gl_contextRec::Current is not
     * updated.
     *
     * The dd_function_table::FlushVertices call below may be used to resolve
     * updated.
     *
     * The dd_function_table::FlushVertices call below may be used to resolve
@@ -945,32 +914,32 @@ struct dd_function_table {
    /* Called prior to any of the GLvertexformat functions being
     * called.  Paired with Driver.FlushVertices().
     */
    /* Called prior to any of the GLvertexformat functions being
     * called.  Paired with Driver.FlushVertices().
     */
-   void (*BeginVertices)( GLcontext *ctx );
+   void (*BeginVertices)( struct gl_context *ctx );
 
    /**
     * If inside glBegin()/glEnd(), it should ASSERT(0).  Otherwise, if
     * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
     * vertices, if FLUSH_UPDATE_CURRENT bit is set updates
 
    /**
     * If inside glBegin()/glEnd(), it should ASSERT(0).  Otherwise, if
     * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
     * vertices, if FLUSH_UPDATE_CURRENT bit is set updates
-    * __GLcontextRec::Current and gl_light_attrib::Material
+    * __struct gl_contextRec::Current and gl_light_attrib::Material
     *
     * Note that the default T&L engine never clears the
     * FLUSH_UPDATE_CURRENT bit, even after performing the update.
     */
     *
     * Note that the default T&L engine never clears the
     * FLUSH_UPDATE_CURRENT bit, even after performing the update.
     */
-   void (*FlushVertices)( GLcontext *ctx, GLuint flags );
-   void (*SaveFlushVertices)( GLcontext *ctx );
+   void (*FlushVertices)( struct gl_context *ctx, GLuint flags );
+   void (*SaveFlushVertices)( struct gl_context *ctx );
 
    /**
     * Give the driver the opportunity to hook in its own vtxfmt for
     * compiling optimized display lists.  This is called on each valid
     * glBegin() during list compilation.
     */
 
    /**
     * Give the driver the opportunity to hook in its own vtxfmt for
     * compiling optimized display lists.  This is called on each valid
     * glBegin() during list compilation.
     */
-   GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode );
+   GLboolean (*NotifySaveBegin)( struct gl_context *ctx, GLenum mode );
 
    /**
     * Notify driver that the special derived value _NeedEyeCoords has
     * changed.
     */
 
    /**
     * Notify driver that the special derived value _NeedEyeCoords has
     * changed.
     */
-   void (*LightingSpaceChange)( GLcontext *ctx );
+   void (*LightingSpaceChange)( struct gl_context *ctx );
 
    /**
     * Called by glNewList().
 
    /**
     * Called by glNewList().
@@ -978,49 +947,84 @@ struct dd_function_table {
     * Let the T&L component know what is going on with display lists
     * in time to make changes to dispatch tables, etc.
     */
     * Let the T&L component know what is going on with display lists
     * in time to make changes to dispatch tables, etc.
     */
-   void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
+   void (*NewList)( struct gl_context *ctx, GLuint list, GLenum mode );
    /**
     * Called by glEndList().
     *
     * \sa dd_function_table::NewList.
     */
    /**
     * Called by glEndList().
     *
     * \sa dd_function_table::NewList.
     */
-   void (*EndList)( GLcontext *ctx );
+   void (*EndList)( struct gl_context *ctx );
 
    /**
     * Called by glCallList(s).
     *
     * Notify the T&L component before and after calling a display list.
     */
 
    /**
     * Called by glCallList(s).
     *
     * Notify the T&L component before and after calling a display list.
     */
-   void (*BeginCallList)( GLcontext *ctx, 
+   void (*BeginCallList)( struct gl_context *ctx, 
                          struct gl_display_list *dlist );
    /**
     * Called by glEndCallList().
     *
     * \sa dd_function_table::BeginCallList.
     */
                          struct gl_display_list *dlist );
    /**
     * Called by glEndCallList().
     *
     * \sa dd_function_table::BeginCallList.
     */
-   void (*EndCallList)( GLcontext *ctx );
+   void (*EndCallList)( struct gl_context *ctx );
 
 
 
 
-#if FEATURE_ARB_sync
    /**
     * \name GL_ARB_sync interfaces
     */
    /*@{*/
    /**
     * \name GL_ARB_sync interfaces
     */
    /*@{*/
-   struct gl_sync_object * (*NewSyncObject)(GLcontext *, GLenum);
-   void (*FenceSync)(GLcontext *, struct gl_sync_object *, GLenum, GLbitfield);
-   void (*DeleteSyncObject)(GLcontext *, struct gl_sync_object *);
-   void (*CheckSync)(GLcontext *, struct gl_sync_object *);
-   void (*ClientWaitSync)(GLcontext *, struct gl_sync_object *,
+   struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum);
+   void (*FenceSync)(struct gl_context *, struct gl_sync_object *, GLenum, GLbitfield);
+   void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *);
+   void (*CheckSync)(struct gl_context *, struct gl_sync_object *);
+   void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *,
                          GLbitfield, GLuint64);
                          GLbitfield, GLuint64);
-   void (*ServerWaitSync)(GLcontext *, struct gl_sync_object *,
+   void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *,
                          GLbitfield, GLuint64);
    /*@}*/
                          GLbitfield, GLuint64);
    /*@}*/
-#endif
 
    /** GL_NV_conditional_render */
 
    /** GL_NV_conditional_render */
-   void (*BeginConditionalRender)(GLcontext *ctx, struct gl_query_object *q,
+   void (*BeginConditionalRender)(struct gl_context *ctx, struct gl_query_object *q,
                                   GLenum mode);
                                   GLenum mode);
-   void (*EndConditionalRender)(GLcontext *ctx, struct gl_query_object *q);
+   void (*EndConditionalRender)(struct gl_context *ctx, struct gl_query_object *q);
+
+   /**
+    * \name GL_OES_draw_texture interface
+    */
+   /*@{*/
+   void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
+                   GLfloat width, GLfloat height);
+   /*@}*/
+
+   /**
+    * \name GL_OES_EGL_image interface
+    */
+   void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target,
+                                  struct gl_texture_object *texObj,
+                                  struct gl_texture_image *texImage,
+                                  GLeglImageOES image_handle);
+   void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx,
+                                            struct gl_renderbuffer *rb,
+                                            void *image_handle);
+
+   /**
+    * \name GL_EXT_transform_feedback interface
+    */
+   struct gl_transform_feedback_object *
+        (*NewTransformFeedback)(struct gl_context *ctx, GLuint name);
+   void (*DeleteTransformFeedback)(struct gl_context *ctx,
+                                   struct gl_transform_feedback_object *obj);
+   void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode,
+                                  struct gl_transform_feedback_object *obj);
+   void (*EndTransformFeedback)(struct gl_context *ctx,
+                                struct gl_transform_feedback_object *obj);
+   void (*PauseTransformFeedback)(struct gl_context *ctx,
+                                  struct gl_transform_feedback_object *obj);
+   void (*ResumeTransformFeedback)(struct gl_context *ctx,
+                                   struct gl_transform_feedback_object *obj);
+   void (*DrawTransformFeedback)(struct gl_context *ctx, GLenum mode,
+                                 struct gl_transform_feedback_object *obj);
 };
 
 
 };
 
 
@@ -1034,7 +1038,7 @@ struct dd_function_table {
  * These are the initial values to be installed into dispatch by
  * mesa.  If the T&L driver wants to modify the dispatch table
  * while installed, it must do so itself.  It would be possible for
  * These are the initial values to be installed into dispatch by
  * mesa.  If the T&L driver wants to modify the dispatch table
  * while installed, it must do so itself.  It would be possible for
- * the vertexformat to install it's own initial values for these
+ * the vertexformat to install its own initial values for these
  * functions, but this way there is an obvious list of what is
  * expected of the driver.
  *
  * functions, but this way there is an obvious list of what is
  * expected of the driver.
  *
@@ -1047,23 +1051,23 @@ typedef struct {
     * \name Vertex
     */
    /*@{*/
     * \name Vertex
     */
    /*@{*/
-   void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */
+   void (GLAPIENTRYP ArrayElement)( GLint );
    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Color3fv)( const GLfloat * );
    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Color4fv)( const GLfloat * );
    void (GLAPIENTRYP EdgeFlag)( GLboolean );
    void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Color3fv)( const GLfloat * );
    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Color4fv)( const GLfloat * );
    void (GLAPIENTRYP EdgeFlag)( GLboolean );
-   void (GLAPIENTRYP EvalCoord1f)( GLfloat );          /* NOTE */
-   void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
-   void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
-   void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */
-   void (GLAPIENTRYP EvalPoint1)( GLint );             /* NOTE */
-   void (GLAPIENTRYP EvalPoint2)( GLint, GLint );      /* NOTE */
+   void (GLAPIENTRYP EvalCoord1f)( GLfloat );
+   void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * );
+   void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat );
+   void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * );
+   void (GLAPIENTRYP EvalPoint1)( GLint );
+   void (GLAPIENTRYP EvalPoint2)( GLint, GLint );
    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
    void (GLAPIENTRYP Indexf)( GLfloat );
    void (GLAPIENTRYP Indexfv)( const GLfloat * );
    void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
    void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
    void (GLAPIENTRYP Indexf)( GLfloat );
    void (GLAPIENTRYP Indexfv)( const GLfloat * );
-   void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
+   void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * );
    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
    void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
    void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
    void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
@@ -1090,10 +1094,11 @@ typedef struct {
    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
    void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
    void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
-   void (GLAPIENTRYP CallList)( GLuint );      /* NOTE */
-   void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );    /* NOTE */
+   void (GLAPIENTRYP CallList)( GLuint );
+   void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );
    void (GLAPIENTRYP Begin)( GLenum );
    void (GLAPIENTRYP End)( void );
    void (GLAPIENTRYP Begin)( GLenum );
    void (GLAPIENTRYP End)( void );
+   void (GLAPIENTRYP PrimitiveRestartNV)( void );
    /* GL_NV_vertex_program */
    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
    /* GL_NV_vertex_program */
    void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
    void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
@@ -1103,7 +1108,7 @@ typedef struct {
    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
    void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
-#if FEATURE_ARB_vertex_program
+   /* GL_ARB_vertex_program */
    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
    void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
    void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
@@ -1112,11 +1117,26 @@ typedef struct {
    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
-#endif
+
+   /* GL_EXT_gpu_shader4 / GL 3.0 */
+   void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x);
+   void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y);
+   void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z);
+   void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w);
+   void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v);
+   void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v);
+   void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v);
+
+   void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x);
+   void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y);
+   void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z);
+   void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+   void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v);
+   void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v);
+   void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v);
+
    /*@}*/
 
    /*@}*/
 
-   /*
-    */
    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
 
    /**
    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
 
    /**
@@ -1148,6 +1168,11 @@ typedef struct {
                                                   const GLvoid **indices,
                                                   GLsizei primcount,
                                                   const GLint *basevertex);
                                                   const GLvoid **indices,
                                                   GLsizei primcount,
                                                   const GLint *basevertex);
+   void (GLAPIENTRYP DrawArraysInstanced)(GLenum mode, GLint first,
+                                          GLsizei count, GLsizei primcount);
+   void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count,
+                                            GLenum type, const GLvoid *indices,
+                                            GLsizei primcount);
    /*@}*/
 
    /**
    /*@}*/
 
    /**