dd.h revision 01e04c3f
17117f1b4Smrg/**
27117f1b4Smrg * \file dd.h
37117f1b4Smrg * Device driver interfaces.
47117f1b4Smrg */
57117f1b4Smrg
67117f1b4Smrg/*
77117f1b4Smrg * Mesa 3-D graphics library
87117f1b4Smrg *
97117f1b4Smrg * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
107117f1b4Smrg *
117117f1b4Smrg * Permission is hereby granted, free of charge, to any person obtaining a
127117f1b4Smrg * copy of this software and associated documentation files (the "Software"),
137117f1b4Smrg * to deal in the Software without restriction, including without limitation
147117f1b4Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
157117f1b4Smrg * and/or sell copies of the Software, and to permit persons to whom the
167117f1b4Smrg * Software is furnished to do so, subject to the following conditions:
177117f1b4Smrg *
187117f1b4Smrg * The above copyright notice and this permission notice shall be included
197117f1b4Smrg * in all copies or substantial portions of the Software.
207117f1b4Smrg *
217117f1b4Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
227117f1b4Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
237117f1b4Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
24af69d88dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
25af69d88dSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26af69d88dSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27af69d88dSmrg * OTHER DEALINGS IN THE SOFTWARE.
287117f1b4Smrg */
297117f1b4Smrg
307117f1b4Smrg
317117f1b4Smrg#ifndef DD_INCLUDED
327117f1b4Smrg#define DD_INCLUDED
337117f1b4Smrg
343464ebd5Sriastradh#include "glheader.h"
3501e04c3fSmrg#include "formats.h"
3601e04c3fSmrg#include "menums.h"
374a49301eSmrg
3801e04c3fSmrgstruct gl_bitmap_atlas;
393464ebd5Sriastradhstruct gl_buffer_object;
403464ebd5Sriastradhstruct gl_context;
413464ebd5Sriastradhstruct gl_display_list;
423464ebd5Sriastradhstruct gl_framebuffer;
43af69d88dSmrgstruct gl_image_unit;
443464ebd5Sriastradhstruct gl_pixelstore_attrib;
453464ebd5Sriastradhstruct gl_program;
463464ebd5Sriastradhstruct gl_renderbuffer;
473464ebd5Sriastradhstruct gl_renderbuffer_attachment;
483464ebd5Sriastradhstruct gl_shader;
493464ebd5Sriastradhstruct gl_shader_program;
503464ebd5Sriastradhstruct gl_texture_image;
513464ebd5Sriastradhstruct gl_texture_object;
5201e04c3fSmrgstruct gl_memory_info;
5301e04c3fSmrgstruct gl_transform_feedback_object;
5401e04c3fSmrgstruct ati_fragment_shader;
5501e04c3fSmrgstruct util_queue_monitoring;
5601e04c3fSmrgstruct _mesa_prim;
5701e04c3fSmrgstruct _mesa_index_buffer;
583464ebd5Sriastradh
593464ebd5Sriastradh/* GL_ARB_vertex_buffer_object */
604a49301eSmrg/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
614a49301eSmrg * NULL) if buffer is unavailable for immediate mapping.
624a49301eSmrg *
634a49301eSmrg * Does GL_MAP_INVALIDATE_RANGE_BIT do this?  It seems so, but it
644a49301eSmrg * would require more book-keeping in the driver than seems necessary
654a49301eSmrg * at this point.
664a49301eSmrg *
674a49301eSmrg * Does GL_MAP_INVALDIATE_BUFFER_BIT do this?  Not really -- we don't
684a49301eSmrg * want to provoke the driver to throw away the old storage, we will
694a49301eSmrg * respect the contents of already referenced data.
704a49301eSmrg */
7101e04c3fSmrg#define MESA_MAP_NOWAIT_BIT       0x4000
724a49301eSmrg
737117f1b4Smrg
747117f1b4Smrg/**
757117f1b4Smrg * Device driver function table.
767117f1b4Smrg * Core Mesa uses these function pointers to call into device drivers.
777117f1b4Smrg * Most of these functions directly correspond to OpenGL state commands.
787117f1b4Smrg * Core Mesa will call these functions after error checking has been done
797117f1b4Smrg * so that the drivers don't have to worry about error testing.
807117f1b4Smrg *
817117f1b4Smrg * Vertex transformation/clipping/lighting is patched into the T&L module.
827117f1b4Smrg * Rasterization functions are patched into the swrast module.
837117f1b4Smrg *
847117f1b4Smrg * Note: when new functions are added here, the drivers/common/driverfuncs.c
857117f1b4Smrg * file should be updated too!!!
867117f1b4Smrg */
877117f1b4Smrgstruct dd_function_table {
887117f1b4Smrg   /**
897117f1b4Smrg    * Return a string as needed by glGetString().
907117f1b4Smrg    * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
917117f1b4Smrg    * returned.
927117f1b4Smrg    */
933464ebd5Sriastradh   const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name );
947117f1b4Smrg
957117f1b4Smrg   /**
967117f1b4Smrg    * Notify the driver after Mesa has made some internal state changes.
977117f1b4Smrg    *
987117f1b4Smrg    * This is in addition to any state change callbacks Mesa may already have
997117f1b4Smrg    * made.
1007117f1b4Smrg    */
10101e04c3fSmrg   void (*UpdateState)(struct gl_context *ctx);
1027117f1b4Smrg
1037117f1b4Smrg   /**
1047117f1b4Smrg    * This is called whenever glFinish() is called.
1057117f1b4Smrg    */
1063464ebd5Sriastradh   void (*Finish)( struct gl_context *ctx );
1077117f1b4Smrg
1087117f1b4Smrg   /**
1097117f1b4Smrg    * This is called whenever glFlush() is called.
1107117f1b4Smrg    */
1113464ebd5Sriastradh   void (*Flush)( struct gl_context *ctx );
1127117f1b4Smrg
1137117f1b4Smrg   /**
1147117f1b4Smrg    * Clear the color/depth/stencil/accum buffer(s).
1157117f1b4Smrg    * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
1167117f1b4Smrg    *                 renderbuffers need to be cleared.
1177117f1b4Smrg    */
1183464ebd5Sriastradh   void (*Clear)( struct gl_context *ctx, GLbitfield buffers );
1197117f1b4Smrg
120c1f859d4Smrg   /**
121c1f859d4Smrg    * Execute glRasterPos, updating the ctx->Current.Raster fields
122c1f859d4Smrg    */
1233464ebd5Sriastradh   void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] );
124c1f859d4Smrg
1257117f1b4Smrg   /**
1267117f1b4Smrg    * \name Image-related functions
1277117f1b4Smrg    */
1287117f1b4Smrg   /*@{*/
1297117f1b4Smrg
1307117f1b4Smrg   /**
1317117f1b4Smrg    * Called by glDrawPixels().
1327117f1b4Smrg    * \p unpack describes how to unpack the source image data.
1337117f1b4Smrg    */
1343464ebd5Sriastradh   void (*DrawPixels)( struct gl_context *ctx,
1357117f1b4Smrg		       GLint x, GLint y, GLsizei width, GLsizei height,
1367117f1b4Smrg		       GLenum format, GLenum type,
1377117f1b4Smrg		       const struct gl_pixelstore_attrib *unpack,
1387117f1b4Smrg		       const GLvoid *pixels );
1397117f1b4Smrg
1407117f1b4Smrg   /**
1417117f1b4Smrg    * Called by glReadPixels().
1427117f1b4Smrg    */
1433464ebd5Sriastradh   void (*ReadPixels)( struct gl_context *ctx,
1447117f1b4Smrg		       GLint x, GLint y, GLsizei width, GLsizei height,
1457117f1b4Smrg		       GLenum format, GLenum type,
1467117f1b4Smrg		       const struct gl_pixelstore_attrib *unpack,
1477117f1b4Smrg		       GLvoid *dest );
1487117f1b4Smrg
1497117f1b4Smrg   /**
1507117f1b4Smrg    * Called by glCopyPixels().
1517117f1b4Smrg    */
1523464ebd5Sriastradh   void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy,
1537117f1b4Smrg                       GLsizei width, GLsizei height,
1547117f1b4Smrg                       GLint dstx, GLint dsty, GLenum type );
1557117f1b4Smrg
1567117f1b4Smrg   /**
1577117f1b4Smrg    * Called by glBitmap().
1587117f1b4Smrg    */
1593464ebd5Sriastradh   void (*Bitmap)( struct gl_context *ctx,
1607117f1b4Smrg		   GLint x, GLint y, GLsizei width, GLsizei height,
1617117f1b4Smrg		   const struct gl_pixelstore_attrib *unpack,
1627117f1b4Smrg		   const GLubyte *bitmap );
16301e04c3fSmrg
16401e04c3fSmrg   /**
16501e04c3fSmrg    * Called by display list code for optimized glCallLists/glBitmap rendering
16601e04c3fSmrg    * The driver must support texture rectangles of width 1024 or more.
16701e04c3fSmrg    */
16801e04c3fSmrg   void (*DrawAtlasBitmaps)(struct gl_context *ctx,
16901e04c3fSmrg                            const struct gl_bitmap_atlas *atlas,
17001e04c3fSmrg                            GLuint count, const GLubyte *ids);
1717117f1b4Smrg   /*@}*/
1727117f1b4Smrg
1737117f1b4Smrg
1747117f1b4Smrg   /**
1757117f1b4Smrg    * \name Texture image functions
1767117f1b4Smrg    */
1777117f1b4Smrg   /*@{*/
1787117f1b4Smrg
1797117f1b4Smrg   /**
180af69d88dSmrg    * Choose actual hardware texture format given the texture target, the
181af69d88dSmrg    * user-provided source image format and type and the desired internal
182af69d88dSmrg    * format.  In some cases, srcFormat and srcType can be GL_NONE.
183af69d88dSmrg    * Note:  target may be GL_TEXTURE_CUBE_MAP, but never
184af69d88dSmrg    * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ].
185af69d88dSmrg    * Called by glTexImage(), etc.
1867117f1b4Smrg    */
187af69d88dSmrg   mesa_format (*ChooseTextureFormat)(struct gl_context *ctx,
188af69d88dSmrg                                      GLenum target, GLint internalFormat,
189af69d88dSmrg                                      GLenum srcFormat, GLenum srcType );
1907117f1b4Smrg
1917117f1b4Smrg   /**
19201e04c3fSmrg    * Queries different driver parameters for a particular target and format.
19301e04c3fSmrg    * Since ARB_internalformat_query2 introduced several new query parameters
19401e04c3fSmrg    * over ARB_internalformat_query, having one driver hook for each parameter
19501e04c3fSmrg    * is no longer feasible. So this is the generic entry-point for calls
19601e04c3fSmrg    * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has
19701e04c3fSmrg    * checked errors and default values.
1987117f1b4Smrg    *
199af69d88dSmrg    * \param ctx            GL context
200af69d88dSmrg    * \param target         GL target enum
201af69d88dSmrg    * \param internalFormat GL format enum
20201e04c3fSmrg    * \param pname          GL enum that specifies the info to query.
20301e04c3fSmrg    * \param params         Buffer to hold the result of the query.
204af69d88dSmrg    */
20501e04c3fSmrg   void (*QueryInternalFormat)(struct gl_context *ctx,
20601e04c3fSmrg                               GLenum target,
20701e04c3fSmrg                               GLenum internalFormat,
20801e04c3fSmrg                               GLenum pname,
20901e04c3fSmrg                               GLint *params);
210af69d88dSmrg
2117117f1b4Smrg   /**
212af69d88dSmrg    * Called by glTexImage[123]D() and glCopyTexImage[12]D()
213af69d88dSmrg    * Allocate texture memory and copy the user's image to the buffer.
214af69d88dSmrg    * The gl_texture_image fields, etc. will be fully initialized.
215af69d88dSmrg    * The parameters are the same as glTexImage3D(), plus:
216af69d88dSmrg    * \param dims  1, 2, or 3 indicating glTexImage1/2/3D()
217af69d88dSmrg    * \param packing describes how to unpack the source data.
218af69d88dSmrg    * \param texImage is the destination texture image.
219af69d88dSmrg    */
220af69d88dSmrg   void (*TexImage)(struct gl_context *ctx, GLuint dims,
221af69d88dSmrg                    struct gl_texture_image *texImage,
222af69d88dSmrg                    GLenum format, GLenum type, const GLvoid *pixels,
223af69d88dSmrg                    const struct gl_pixelstore_attrib *packing);
224af69d88dSmrg
2257117f1b4Smrg   /**
226af69d88dSmrg    * Called by glTexSubImage[123]D().
227af69d88dSmrg    * Replace a subset of the target texture with new texel data.
2287117f1b4Smrg    */
229af69d88dSmrg   void (*TexSubImage)(struct gl_context *ctx, GLuint dims,
230af69d88dSmrg                       struct gl_texture_image *texImage,
231af69d88dSmrg                       GLint xoffset, GLint yoffset, GLint zoffset,
232af69d88dSmrg                       GLsizei width, GLsizei height, GLint depth,
233af69d88dSmrg                       GLenum format, GLenum type,
234af69d88dSmrg                       const GLvoid *pixels,
235af69d88dSmrg                       const struct gl_pixelstore_attrib *packing);
236af69d88dSmrg
2377117f1b4Smrg
2387117f1b4Smrg   /**
23901e04c3fSmrg    * Called by glGetTexImage(), glGetTextureSubImage().
2407117f1b4Smrg    */
24101e04c3fSmrg   void (*GetTexSubImage)(struct gl_context *ctx,
24201e04c3fSmrg                          GLint xoffset, GLint yoffset, GLint zoffset,
24301e04c3fSmrg                          GLsizei width, GLsizei height, GLsizei depth,
24401e04c3fSmrg                          GLenum format, GLenum type, GLvoid *pixels,
24501e04c3fSmrg                          struct gl_texture_image *texImage);
2467117f1b4Smrg
2477117f1b4Smrg   /**
248af69d88dSmrg    * Called by glClearTex[Sub]Image
249af69d88dSmrg    *
250af69d88dSmrg    * Clears a rectangular region of the image to a given value. The
251af69d88dSmrg    * clearValue argument is either NULL or points to a single texel to use as
252af69d88dSmrg    * the clear value in the same internal format as the texture image. If it
253af69d88dSmrg    * is NULL then the texture should be cleared to zeroes.
2547117f1b4Smrg    */
255af69d88dSmrg   void (*ClearTexSubImage)(struct gl_context *ctx,
256af69d88dSmrg                            struct gl_texture_image *texImage,
257af69d88dSmrg                            GLint xoffset, GLint yoffset, GLint zoffset,
258af69d88dSmrg                            GLsizei width, GLsizei height, GLsizei depth,
259af69d88dSmrg                            const GLvoid *clearValue);
2607117f1b4Smrg
2617117f1b4Smrg   /**
262af69d88dSmrg    * Called by glCopyTex[Sub]Image[123]D().
263af69d88dSmrg    *
264af69d88dSmrg    * This function should copy a rectangular region in the rb to a single
265af69d88dSmrg    * destination slice, specified by @slice.  In the case of 1D array
266af69d88dSmrg    * textures (where one GL call can potentially affect multiple destination
267af69d88dSmrg    * slices), core mesa takes care of calling this function multiple times,
268af69d88dSmrg    * once for each scanline to be copied.
2697117f1b4Smrg    */
270af69d88dSmrg   void (*CopyTexSubImage)(struct gl_context *ctx, GLuint dims,
271af69d88dSmrg                           struct gl_texture_image *texImage,
272af69d88dSmrg                           GLint xoffset, GLint yoffset, GLint slice,
273af69d88dSmrg                           struct gl_renderbuffer *rb,
274af69d88dSmrg                           GLint x, GLint y,
275af69d88dSmrg                           GLsizei width, GLsizei height);
2767117f1b4Smrg   /**
277af69d88dSmrg    * Called by glCopyImageSubData().
278af69d88dSmrg    *
27901e04c3fSmrg    * This function should copy one 2-D slice from src_teximage or
28001e04c3fSmrg    * src_renderbuffer to dst_teximage or dst_renderbuffer.  Either the
28101e04c3fSmrg    * teximage or renderbuffer pointer will be non-null to indicate which
28201e04c3fSmrg    * is the real src/dst.
28301e04c3fSmrg    *
28401e04c3fSmrg    * If one of the textures is 3-D or is a 1-D or 2-D array
285af69d88dSmrg    * texture, this function will be called multiple times: once for each
286af69d88dSmrg    * slice.  If one of the textures is a cube map, this function will be
287af69d88dSmrg    * called once for each face to be copied.
2887117f1b4Smrg    */
289af69d88dSmrg   void (*CopyImageSubData)(struct gl_context *ctx,
29001e04c3fSmrg                            struct gl_texture_image *src_teximage,
29101e04c3fSmrg                            struct gl_renderbuffer *src_renderbuffer,
292af69d88dSmrg                            int src_x, int src_y, int src_z,
29301e04c3fSmrg                            struct gl_texture_image *dst_teximage,
29401e04c3fSmrg                            struct gl_renderbuffer *dst_renderbuffer,
295af69d88dSmrg                            int dst_x, int dst_y, int dst_z,
296af69d88dSmrg                            int src_width, int src_height);
2977117f1b4Smrg
298c1f859d4Smrg   /**
299c1f859d4Smrg    * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
300af69d88dSmrg    * Note that if the texture is a cube map, the <target> parameter will
301af69d88dSmrg    * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z).
302af69d88dSmrg    * texObj->BaseLevel is the level from which to generate the remaining
303af69d88dSmrg    * mipmap levels.
304c1f859d4Smrg    */
3053464ebd5Sriastradh   void (*GenerateMipmap)(struct gl_context *ctx, GLenum target,
306c1f859d4Smrg                          struct gl_texture_object *texObj);
307c1f859d4Smrg
3087117f1b4Smrg   /**
309af69d88dSmrg    * Called by glTexImage, glCompressedTexImage, glCopyTexImage
310af69d88dSmrg    * and glTexStorage to check if the dimensions of the texture image
311af69d88dSmrg    * are too large.
312af69d88dSmrg    * \param target  any GL_PROXY_TEXTURE_x target
313af69d88dSmrg    * \return GL_TRUE if the image is OK, GL_FALSE if too large
3147117f1b4Smrg    */
3153464ebd5Sriastradh   GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target,
31601e04c3fSmrg                                  GLuint numLevels, GLint level,
31701e04c3fSmrg                                  mesa_format format, GLuint numSamples,
3187117f1b4Smrg                                  GLint width, GLint height,
31901e04c3fSmrg                                  GLint depth);
3207117f1b4Smrg   /*@}*/
3217117f1b4Smrg
3227117f1b4Smrg
3237117f1b4Smrg   /**
3247117f1b4Smrg    * \name Compressed texture functions
3257117f1b4Smrg    */
3267117f1b4Smrg   /*@{*/
3277117f1b4Smrg
3287117f1b4Smrg   /**
329af69d88dSmrg    * Called by glCompressedTexImage[123]D().
3307117f1b4Smrg    */
331af69d88dSmrg   void (*CompressedTexImage)(struct gl_context *ctx, GLuint dims,
332af69d88dSmrg                              struct gl_texture_image *texImage,
333af69d88dSmrg                              GLsizei imageSize, const GLvoid *data);
334af69d88dSmrg
3357117f1b4Smrg   /**
336af69d88dSmrg    * Called by glCompressedTexSubImage[123]D().
3377117f1b4Smrg    */
338af69d88dSmrg   void (*CompressedTexSubImage)(struct gl_context *ctx, GLuint dims,
339af69d88dSmrg                                 struct gl_texture_image *texImage,
340af69d88dSmrg                                 GLint xoffset, GLint yoffset, GLint zoffset,
34101e04c3fSmrg                                 GLsizei width, GLsizei height, GLsizei depth,
342af69d88dSmrg                                 GLenum format,
343af69d88dSmrg                                 GLsizei imageSize, const GLvoid *data);
3447117f1b4Smrg   /*@}*/
3457117f1b4Smrg
3467117f1b4Smrg   /**
347af69d88dSmrg    * \name Texture object / image functions
3487117f1b4Smrg    */
3497117f1b4Smrg   /*@{*/
3507117f1b4Smrg
3517117f1b4Smrg   /**
352af69d88dSmrg    * Called by glBindTexture() and glBindTextures().
3537117f1b4Smrg    */
354af69d88dSmrg   void (*BindTexture)( struct gl_context *ctx, GLuint texUnit,
355af69d88dSmrg                        GLenum target, struct gl_texture_object *tObj );
3567117f1b4Smrg
3577117f1b4Smrg   /**
358af69d88dSmrg    * Called to allocate a new texture object.  Drivers will usually
359af69d88dSmrg    * allocate/return a subclass of gl_texture_object.
3607117f1b4Smrg    */
361af69d88dSmrg   struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx,
362af69d88dSmrg                                                  GLuint name, GLenum target);
3637117f1b4Smrg   /**
364af69d88dSmrg    * Called to delete/free a texture object.  Drivers should free the
365af69d88dSmrg    * object and any image data it contains.
3667117f1b4Smrg    */
367af69d88dSmrg   void (*DeleteTexture)(struct gl_context *ctx,
368af69d88dSmrg                         struct gl_texture_object *texObj);
3697117f1b4Smrg
370af69d88dSmrg   /** Called to allocate a new texture image object. */
371af69d88dSmrg   struct gl_texture_image * (*NewTextureImage)(struct gl_context *ctx);
3727117f1b4Smrg
373af69d88dSmrg   /** Called to free a texture image object returned by NewTextureImage() */
374af69d88dSmrg   void (*DeleteTextureImage)(struct gl_context *ctx,
375af69d88dSmrg                              struct gl_texture_image *);
3767117f1b4Smrg
377af69d88dSmrg   /** Called to allocate memory for a single texture image */
378af69d88dSmrg   GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx,
379af69d88dSmrg                                        struct gl_texture_image *texImage);
3807117f1b4Smrg
381af69d88dSmrg   /** Free the memory for a single texture image */
382af69d88dSmrg   void (*FreeTextureImageBuffer)(struct gl_context *ctx,
383af69d88dSmrg                                  struct gl_texture_image *texImage);
384af69d88dSmrg
385af69d88dSmrg   /** Map a slice of a texture image into user space.
386af69d88dSmrg    * Note: for GL_TEXTURE_1D_ARRAY, height must be 1, y must be 0 and slice
387af69d88dSmrg    * indicates the 1D array index.
388af69d88dSmrg    * \param texImage  the texture image
389af69d88dSmrg    * \param slice  the 3D image slice or array texture slice
390af69d88dSmrg    * \param x, y, w, h  region of interest
391af69d88dSmrg    * \param mode  bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and
392af69d88dSmrg    *              GL_MAP_INVALIDATE_RANGE_BIT (if writing)
393af69d88dSmrg    * \param mapOut  returns start of mapping of region of interest
394af69d88dSmrg    * \param rowStrideOut returns row stride (in bytes).  In the case of a
395af69d88dSmrg    * compressed texture, this is the byte stride between one row of blocks
396af69d88dSmrg    * and another.
3977117f1b4Smrg    */
398af69d88dSmrg   void (*MapTextureImage)(struct gl_context *ctx,
399af69d88dSmrg			   struct gl_texture_image *texImage,
400af69d88dSmrg			   GLuint slice,
401af69d88dSmrg			   GLuint x, GLuint y, GLuint w, GLuint h,
402af69d88dSmrg			   GLbitfield mode,
403af69d88dSmrg			   GLubyte **mapOut, GLint *rowStrideOut);
4047117f1b4Smrg
405af69d88dSmrg   void (*UnmapTextureImage)(struct gl_context *ctx,
406af69d88dSmrg			     struct gl_texture_image *texImage,
407af69d88dSmrg			     GLuint slice);
408af69d88dSmrg
409af69d88dSmrg   /** For GL_ARB_texture_storage.  Allocate memory for whole mipmap stack.
410af69d88dSmrg    * All the gl_texture_images in the texture object will have their
411af69d88dSmrg    * dimensions, format, etc. initialized already.
4127117f1b4Smrg    */
413af69d88dSmrg   GLboolean (*AllocTextureStorage)(struct gl_context *ctx,
414af69d88dSmrg                                    struct gl_texture_object *texObj,
415af69d88dSmrg                                    GLsizei levels, GLsizei width,
416af69d88dSmrg                                    GLsizei height, GLsizei depth);
417af69d88dSmrg
418af69d88dSmrg   /** Called as part of glTextureView to add views to origTexObj */
419af69d88dSmrg   GLboolean (*TextureView)(struct gl_context *ctx,
420af69d88dSmrg                            struct gl_texture_object *texObj,
421af69d88dSmrg                            struct gl_texture_object *origTexObj);
4227117f1b4Smrg
4237117f1b4Smrg   /**
424af69d88dSmrg    * Map a renderbuffer into user space.
425af69d88dSmrg    * \param mode  bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and
426af69d88dSmrg    *              GL_MAP_INVALIDATE_RANGE_BIT (if writing)
4277117f1b4Smrg    */
428af69d88dSmrg   void (*MapRenderbuffer)(struct gl_context *ctx,
429af69d88dSmrg			   struct gl_renderbuffer *rb,
430af69d88dSmrg			   GLuint x, GLuint y, GLuint w, GLuint h,
431af69d88dSmrg			   GLbitfield mode,
43201e04c3fSmrg			   GLubyte **mapOut, GLint *rowStrideOut,
43301e04c3fSmrg			   bool flip_y);
434af69d88dSmrg
435af69d88dSmrg   void (*UnmapRenderbuffer)(struct gl_context *ctx,
436af69d88dSmrg			     struct gl_renderbuffer *rb);
4377117f1b4Smrg
4387117f1b4Smrg   /**
439af69d88dSmrg    * Optional driver entrypoint that binds a non-texture renderbuffer's
440af69d88dSmrg    * contents to a texture image.
4417117f1b4Smrg    */
442af69d88dSmrg   GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx,
443af69d88dSmrg                                         struct gl_renderbuffer *rb,
444af69d88dSmrg                                         struct gl_texture_image *texImage);
4457117f1b4Smrg   /*@}*/
4467117f1b4Smrg
4477117f1b4Smrg
4487117f1b4Smrg   /**
4497117f1b4Smrg    * \name Vertex/fragment program functions
4507117f1b4Smrg    */
4517117f1b4Smrg   /*@{*/
4527117f1b4Smrg   /** Allocate a new program */
453af69d88dSmrg   struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target,
45401e04c3fSmrg                                     GLuint id, bool is_arb_asm);
4557117f1b4Smrg   /** Delete a program */
4563464ebd5Sriastradh   void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);
45701e04c3fSmrg   /**
45801e04c3fSmrg    * Allocate a program to associate with the new ATI fragment shader (optional)
45901e04c3fSmrg    */
46001e04c3fSmrg   struct gl_program * (*NewATIfs)(struct gl_context *ctx,
46101e04c3fSmrg                                   struct ati_fragment_shader *curProg);
462cdc920a0Smrg   /**
463cdc920a0Smrg    * Notify driver that a program string (and GPU code) has been specified
464cdc920a0Smrg    * or modified.  Return GL_TRUE or GL_FALSE to indicate if the program is
465cdc920a0Smrg    * supported by the driver.
466cdc920a0Smrg    */
4673464ebd5Sriastradh   GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target,
468cdc920a0Smrg                                    struct gl_program *prog);
4697117f1b4Smrg
470af69d88dSmrg   /**
471af69d88dSmrg    * Notify driver that the sampler uniforms for the current program have
472af69d88dSmrg    * changed.  On some drivers, this may require shader recompiles.
473af69d88dSmrg    */
474af69d88dSmrg   void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target,
475af69d88dSmrg                                struct gl_program *prog);
476af69d88dSmrg
4777117f1b4Smrg   /** Query if program can be loaded onto hardware */
4783464ebd5Sriastradh   GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target,
4797117f1b4Smrg				struct gl_program *prog);
4807117f1b4Smrg
4817117f1b4Smrg   /*@}*/
4827117f1b4Smrg
4833464ebd5Sriastradh   /**
4843464ebd5Sriastradh    * \name GLSL shader/program functions.
4853464ebd5Sriastradh    */
4863464ebd5Sriastradh   /*@{*/
4873464ebd5Sriastradh   /**
4883464ebd5Sriastradh    * Called when a shader program is linked.
4893464ebd5Sriastradh    *
4903464ebd5Sriastradh    * This gives drivers an opportunity to clone the IR and make their
4913464ebd5Sriastradh    * own transformations on it for the purposes of code generation.
4923464ebd5Sriastradh    */
493af69d88dSmrg   GLboolean (*LinkShader)(struct gl_context *ctx,
494af69d88dSmrg                           struct gl_shader_program *shader);
4953464ebd5Sriastradh   /*@}*/
4967117f1b4Smrg
49701e04c3fSmrg
49801e04c3fSmrg   /**
49901e04c3fSmrg    * \name Draw functions.
50001e04c3fSmrg    */
50101e04c3fSmrg   /*@{*/
50201e04c3fSmrg   /**
50301e04c3fSmrg    * For indirect array drawing:
50401e04c3fSmrg    *
50501e04c3fSmrg    *    typedef struct {
50601e04c3fSmrg    *       GLuint count;
50701e04c3fSmrg    *       GLuint primCount;
50801e04c3fSmrg    *       GLuint first;
50901e04c3fSmrg    *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
51001e04c3fSmrg    *    } DrawArraysIndirectCommand;
51101e04c3fSmrg    *
51201e04c3fSmrg    * For indirect indexed drawing:
51301e04c3fSmrg    *
51401e04c3fSmrg    *    typedef struct {
51501e04c3fSmrg    *       GLuint count;
51601e04c3fSmrg    *       GLuint primCount;
51701e04c3fSmrg    *       GLuint firstIndex;
51801e04c3fSmrg    *       GLint  baseVertex;
51901e04c3fSmrg    *       GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise
52001e04c3fSmrg    *    } DrawElementsIndirectCommand;
52101e04c3fSmrg    */
52201e04c3fSmrg
52301e04c3fSmrg   /**
52401e04c3fSmrg    * Draw a number of primitives.
52501e04c3fSmrg    * \param prims  array [nr_prims] describing what to draw (prim type,
52601e04c3fSmrg    *               vertex count, first index, instance count, etc).
52701e04c3fSmrg    * \param ib  index buffer for indexed drawing, NULL for array drawing
52801e04c3fSmrg    * \param index_bounds_valid  are min_index and max_index valid?
52901e04c3fSmrg    * \param min_index  lowest vertex index used
53001e04c3fSmrg    * \param max_index  highest vertex index used
53101e04c3fSmrg    * \param tfb_vertcount  if non-null, indicates which transform feedback
53201e04c3fSmrg    *                       object has the vertex count.
53301e04c3fSmrg    * \param tfb_stream  If called via DrawTransformFeedbackStream, specifies
53401e04c3fSmrg    *                    the vertex stream buffer from which to get the vertex
53501e04c3fSmrg    *                    count.
53601e04c3fSmrg    * \param indirect  If any prims are indirect, this specifies the buffer
53701e04c3fSmrg    *                  to find the "DrawArrays/ElementsIndirectCommand" data.
53801e04c3fSmrg    *                  This may be deprecated in the future
53901e04c3fSmrg    */
54001e04c3fSmrg   void (*Draw)(struct gl_context *ctx,
54101e04c3fSmrg                const struct _mesa_prim *prims, GLuint nr_prims,
54201e04c3fSmrg                const struct _mesa_index_buffer *ib,
54301e04c3fSmrg                GLboolean index_bounds_valid,
54401e04c3fSmrg                GLuint min_index, GLuint max_index,
54501e04c3fSmrg                struct gl_transform_feedback_object *tfb_vertcount,
54601e04c3fSmrg                unsigned tfb_stream, struct gl_buffer_object *indirect);
54701e04c3fSmrg
54801e04c3fSmrg
54901e04c3fSmrg   /**
55001e04c3fSmrg    * Draw a primitive, getting the vertex count, instance count, start
55101e04c3fSmrg    * vertex, etc. from a buffer object.
55201e04c3fSmrg    * \param mode  GL_POINTS, GL_LINES, GL_TRIANGLE_STRIP, etc.
55301e04c3fSmrg    * \param indirect_data  buffer to get "DrawArrays/ElementsIndirectCommand"
55401e04c3fSmrg    *                       data
55501e04c3fSmrg    * \param indirect_offset  offset of first primitive in indrect_data buffer
55601e04c3fSmrg    * \param draw_count  number of primitives to draw
55701e04c3fSmrg    * \param stride  stride, in bytes, between
55801e04c3fSmrg    *                "DrawArrays/ElementsIndirectCommand" objects
55901e04c3fSmrg    * \param indirect_draw_count_buffer  if non-NULL specifies a buffer to get
56001e04c3fSmrg    *                                    the real draw_count value.  Used for
56101e04c3fSmrg    *                                    GL_ARB_indirect_parameters.
56201e04c3fSmrg    * \param indirect_draw_count_offset  offset to the draw_count value in
56301e04c3fSmrg    *                                    indirect_draw_count_buffer
56401e04c3fSmrg    * \param ib  index buffer for indexed drawing, NULL otherwise.
56501e04c3fSmrg    */
56601e04c3fSmrg   void (*DrawIndirect)(struct gl_context *ctx, GLuint mode,
56701e04c3fSmrg                        struct gl_buffer_object *indirect_data,
56801e04c3fSmrg                        GLsizeiptr indirect_offset, unsigned draw_count,
56901e04c3fSmrg                        unsigned stride,
57001e04c3fSmrg                        struct gl_buffer_object *indirect_draw_count_buffer,
57101e04c3fSmrg                        GLsizeiptr indirect_draw_count_offset,
57201e04c3fSmrg                        const struct _mesa_index_buffer *ib);
57301e04c3fSmrg   /*@}*/
57401e04c3fSmrg
57501e04c3fSmrg
5767117f1b4Smrg   /**
5777117f1b4Smrg    * \name State-changing functions.
5787117f1b4Smrg    *
5797117f1b4Smrg    * \note drawing functions are above.
5807117f1b4Smrg    *
5817117f1b4Smrg    * These functions are called by their corresponding OpenGL API functions.
5827117f1b4Smrg    * They are \e also called by the gl_PopAttrib() function!!!
5837117f1b4Smrg    * May add more functions like these to the device driver in the future.
5847117f1b4Smrg    */
5857117f1b4Smrg   /*@{*/
5867117f1b4Smrg   /** Specify the alpha test function */
5873464ebd5Sriastradh   void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref);
5887117f1b4Smrg   /** Set the blend color */
5893464ebd5Sriastradh   void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]);
5907117f1b4Smrg   /** Set the blend equation */
591af69d88dSmrg   void (*BlendEquationSeparate)(struct gl_context *ctx,
592af69d88dSmrg                                 GLenum modeRGB, GLenum modeA);
5937117f1b4Smrg   /** Specify pixel arithmetic */
5943464ebd5Sriastradh   void (*BlendFuncSeparate)(struct gl_context *ctx,
5957117f1b4Smrg                             GLenum sfactorRGB, GLenum dfactorRGB,
5967117f1b4Smrg                             GLenum sfactorA, GLenum dfactorA);
5977117f1b4Smrg   /** Specify a plane against which all geometry is clipped */
598af69d88dSmrg   void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq);
5997117f1b4Smrg   /** Enable and disable writing of frame buffer color components */
6003464ebd5Sriastradh   void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask,
6017117f1b4Smrg                     GLboolean bmask, GLboolean amask );
6027117f1b4Smrg   /** Cause a material color to track the current color */
6033464ebd5Sriastradh   void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode);
6047117f1b4Smrg   /** Specify whether front- or back-facing facets can be culled */
6053464ebd5Sriastradh   void (*CullFace)(struct gl_context *ctx, GLenum mode);
6067117f1b4Smrg   /** Define front- and back-facing polygons */
6073464ebd5Sriastradh   void (*FrontFace)(struct gl_context *ctx, GLenum mode);
6087117f1b4Smrg   /** Specify the value used for depth buffer comparisons */
6093464ebd5Sriastradh   void (*DepthFunc)(struct gl_context *ctx, GLenum func);
6107117f1b4Smrg   /** Enable or disable writing into the depth buffer */
6113464ebd5Sriastradh   void (*DepthMask)(struct gl_context *ctx, GLboolean flag);
6127117f1b4Smrg   /** Specify mapping of depth values from NDC to window coordinates */
613af69d88dSmrg   void (*DepthRange)(struct gl_context *ctx);
6147117f1b4Smrg   /** Specify the current buffer for writing */
61501e04c3fSmrg   void (*DrawBuffer)(struct gl_context *ctx);
61601e04c3fSmrg   /** Used to allocated any buffers with on-demand creation */
61701e04c3fSmrg   void (*DrawBufferAllocate)(struct gl_context *ctx);
6187117f1b4Smrg   /** Enable or disable server-side gl capabilities */
6193464ebd5Sriastradh   void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
6207117f1b4Smrg   /** Specify fog parameters */
6213464ebd5Sriastradh   void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params);
6227117f1b4Smrg   /** Set light source parameters.
6237117f1b4Smrg    * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
6247117f1b4Smrg    * been transformed to eye-space.
6257117f1b4Smrg    */
6263464ebd5Sriastradh   void (*Lightfv)(struct gl_context *ctx, GLenum light,
6277117f1b4Smrg		   GLenum pname, const GLfloat *params );
6287117f1b4Smrg   /** Set the lighting model parameters */
629af69d88dSmrg   void (*LightModelfv)(struct gl_context *ctx, GLenum pname,
630af69d88dSmrg                        const GLfloat *params);
6317117f1b4Smrg   /** Specify the line stipple pattern */
6323464ebd5Sriastradh   void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern );
6337117f1b4Smrg   /** Specify the width of rasterized lines */
6343464ebd5Sriastradh   void (*LineWidth)(struct gl_context *ctx, GLfloat width);
6357117f1b4Smrg   /** Specify a logical pixel operation for color index rendering */
63601e04c3fSmrg   void (*LogicOpcode)(struct gl_context *ctx, enum gl_logicop_mode opcode);
6373464ebd5Sriastradh   void (*PointParameterfv)(struct gl_context *ctx, GLenum pname,
6387117f1b4Smrg                            const GLfloat *params);
6397117f1b4Smrg   /** Specify the diameter of rasterized points */
6403464ebd5Sriastradh   void (*PointSize)(struct gl_context *ctx, GLfloat size);
6417117f1b4Smrg   /** Select a polygon rasterization mode */
6423464ebd5Sriastradh   void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode);
6437117f1b4Smrg   /** Set the scale and units used to calculate depth values */
64401e04c3fSmrg   void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp);
6457117f1b4Smrg   /** Set the polygon stippling pattern */
6463464ebd5Sriastradh   void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask );
6477117f1b4Smrg   /* Specifies the current buffer for reading */
6483464ebd5Sriastradh   void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer );
6497117f1b4Smrg   /** Set rasterization mode */
6503464ebd5Sriastradh   void (*RenderMode)(struct gl_context *ctx, GLenum mode );
6517117f1b4Smrg   /** Define the scissor box */
652af69d88dSmrg   void (*Scissor)(struct gl_context *ctx);
6537117f1b4Smrg   /** Select flat or smooth shading */
6543464ebd5Sriastradh   void (*ShadeModel)(struct gl_context *ctx, GLenum mode);
6557117f1b4Smrg   /** OpenGL 2.0 two-sided StencilFunc */
6563464ebd5Sriastradh   void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func,
6577117f1b4Smrg                               GLint ref, GLuint mask);
6587117f1b4Smrg   /** OpenGL 2.0 two-sided StencilMask */
6593464ebd5Sriastradh   void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask);
6607117f1b4Smrg   /** OpenGL 2.0 two-sided StencilOp */
6613464ebd5Sriastradh   void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail,
6627117f1b4Smrg                             GLenum zfail, GLenum zpass);
6637117f1b4Smrg   /** Control the generation of texture coordinates */
6643464ebd5Sriastradh   void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname,
6657117f1b4Smrg		  const GLfloat *params);
6667117f1b4Smrg   /** Set texture environment parameters */
6673464ebd5Sriastradh   void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname,
6687117f1b4Smrg                  const GLfloat *param);
66901e04c3fSmrg   /** Set texture parameter (callee gets param value from the texObj) */
670af69d88dSmrg   void (*TexParameter)(struct gl_context *ctx,
67101e04c3fSmrg                        struct gl_texture_object *texObj, GLenum pname);
6727117f1b4Smrg   /** Set the viewport */
673af69d88dSmrg   void (*Viewport)(struct gl_context *ctx);
6747117f1b4Smrg   /*@}*/
6757117f1b4Smrg
6767117f1b4Smrg
6777117f1b4Smrg   /**
6787117f1b4Smrg    * \name Vertex/pixel buffer object functions
6797117f1b4Smrg    */
6807117f1b4Smrg   /*@{*/
681af69d88dSmrg   struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx,
68201e04c3fSmrg                                                GLuint buffer);
6837117f1b4Smrg
6843464ebd5Sriastradh   void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj );
6857117f1b4Smrg
686af69d88dSmrg   GLboolean (*BufferData)(struct gl_context *ctx, GLenum target,
687af69d88dSmrg                           GLsizeiptrARB size, const GLvoid *data, GLenum usage,
688af69d88dSmrg                           GLenum storageFlags, struct gl_buffer_object *obj);
6897117f1b4Smrg
690af69d88dSmrg   void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset,
6917117f1b4Smrg			  GLsizeiptrARB size, const GLvoid *data,
6927117f1b4Smrg			  struct gl_buffer_object *obj );
6937117f1b4Smrg
694af69d88dSmrg   void (*GetBufferSubData)( struct gl_context *ctx,
6957117f1b4Smrg			     GLintptrARB offset, GLsizeiptrARB size,
6967117f1b4Smrg			     GLvoid *data, struct gl_buffer_object *obj );
6977117f1b4Smrg
698af69d88dSmrg   void (*ClearBufferSubData)( struct gl_context *ctx,
699af69d88dSmrg                               GLintptr offset, GLsizeiptr size,
700af69d88dSmrg                               const GLvoid *clearValue,
701af69d88dSmrg                               GLsizeiptr clearValueSize,
702af69d88dSmrg                               struct gl_buffer_object *obj );
7037117f1b4Smrg
7043464ebd5Sriastradh   void (*CopyBufferSubData)( struct gl_context *ctx,
7054a49301eSmrg                              struct gl_buffer_object *src,
7064a49301eSmrg                              struct gl_buffer_object *dst,
7074a49301eSmrg                              GLintptr readOffset, GLintptr writeOffset,
7084a49301eSmrg                              GLsizeiptr size );
7094a49301eSmrg
71001e04c3fSmrg   void (*InvalidateBufferSubData)( struct gl_context *ctx,
71101e04c3fSmrg                                    struct gl_buffer_object *obj,
71201e04c3fSmrg                                    GLintptr offset,
71301e04c3fSmrg                                    GLsizeiptr length );
71401e04c3fSmrg
715af69d88dSmrg   /* Returns pointer to the start of the mapped range.
716af69d88dSmrg    * May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
7174a49301eSmrg    */
718af69d88dSmrg   void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset,
719cdc920a0Smrg                             GLsizeiptr length, GLbitfield access,
720af69d88dSmrg                             struct gl_buffer_object *obj,
721af69d88dSmrg                             gl_map_buffer_index index);
7224a49301eSmrg
723af69d88dSmrg   void (*FlushMappedBufferRange)(struct gl_context *ctx,
724cdc920a0Smrg                                  GLintptr offset, GLsizeiptr length,
725af69d88dSmrg                                  struct gl_buffer_object *obj,
726af69d88dSmrg                                  gl_map_buffer_index index);
7274a49301eSmrg
728af69d88dSmrg   GLboolean (*UnmapBuffer)( struct gl_context *ctx,
729af69d88dSmrg			     struct gl_buffer_object *obj,
730af69d88dSmrg                             gl_map_buffer_index index);
7317117f1b4Smrg   /*@}*/
7327117f1b4Smrg
733cdc920a0Smrg   /**
734cdc920a0Smrg    * \name Functions for GL_APPLE_object_purgeable
735cdc920a0Smrg    */
736cdc920a0Smrg   /*@{*/
737cdc920a0Smrg   /* variations on ObjectPurgeable */
738af69d88dSmrg   GLenum (*BufferObjectPurgeable)(struct gl_context *ctx,
739af69d88dSmrg                                   struct gl_buffer_object *obj, GLenum option);
740af69d88dSmrg   GLenum (*RenderObjectPurgeable)(struct gl_context *ctx,
741af69d88dSmrg                                   struct gl_renderbuffer *obj, GLenum option);
742af69d88dSmrg   GLenum (*TextureObjectPurgeable)(struct gl_context *ctx,
743af69d88dSmrg                                    struct gl_texture_object *obj,
744af69d88dSmrg                                    GLenum option);
745cdc920a0Smrg
746cdc920a0Smrg   /* variations on ObjectUnpurgeable */
747af69d88dSmrg   GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx,
748af69d88dSmrg                                     struct gl_buffer_object *obj,
749af69d88dSmrg                                     GLenum option);
750af69d88dSmrg   GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx,
751af69d88dSmrg                                     struct gl_renderbuffer *obj,
752af69d88dSmrg                                     GLenum option);
753af69d88dSmrg   GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx,
754af69d88dSmrg                                      struct gl_texture_object *obj,
755af69d88dSmrg                                      GLenum option);
756cdc920a0Smrg   /*@}*/
757cdc920a0Smrg
7587117f1b4Smrg   /**
759af69d88dSmrg    * \name Functions for GL_EXT_framebuffer_{object,blit,discard}.
7607117f1b4Smrg    */
7617117f1b4Smrg   /*@{*/
762af69d88dSmrg   struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx,
763af69d88dSmrg                                             GLuint name);
764af69d88dSmrg   struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx,
765af69d88dSmrg                                               GLuint name);
7663464ebd5Sriastradh   void (*BindFramebuffer)(struct gl_context *ctx, GLenum target,
767cdc920a0Smrg                           struct gl_framebuffer *drawFb,
768cdc920a0Smrg                           struct gl_framebuffer *readFb);
7693464ebd5Sriastradh   void (*FramebufferRenderbuffer)(struct gl_context *ctx,
7707117f1b4Smrg                                   struct gl_framebuffer *fb,
7717117f1b4Smrg                                   GLenum attachment,
7727117f1b4Smrg                                   struct gl_renderbuffer *rb);
7733464ebd5Sriastradh   void (*RenderTexture)(struct gl_context *ctx,
7747117f1b4Smrg                         struct gl_framebuffer *fb,
7757117f1b4Smrg                         struct gl_renderbuffer_attachment *att);
7763464ebd5Sriastradh   void (*FinishRenderTexture)(struct gl_context *ctx,
777af69d88dSmrg                               struct gl_renderbuffer *rb);
7783464ebd5Sriastradh   void (*ValidateFramebuffer)(struct gl_context *ctx,
7794a49301eSmrg                               struct gl_framebuffer *fb);
7807117f1b4Smrg   /*@}*/
7813464ebd5Sriastradh   void (*BlitFramebuffer)(struct gl_context *ctx,
78201e04c3fSmrg                           struct gl_framebuffer *readFb,
78301e04c3fSmrg                           struct gl_framebuffer *drawFb,
7847117f1b4Smrg                           GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
7857117f1b4Smrg                           GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
7867117f1b4Smrg                           GLbitfield mask, GLenum filter);
787af69d88dSmrg   void (*DiscardFramebuffer)(struct gl_context *ctx,
788af69d88dSmrg                              GLenum target, GLsizei numAttachments,
789af69d88dSmrg                              const GLenum *attachments);
7907117f1b4Smrg
79101e04c3fSmrg   /**
79201e04c3fSmrg    * \name Functions for GL_ARB_sample_locations
79301e04c3fSmrg    */
79401e04c3fSmrg   void (*GetProgrammableSampleCaps)(struct gl_context *ctx,
79501e04c3fSmrg                                     const struct gl_framebuffer *fb,
79601e04c3fSmrg                                     GLuint *bits, GLuint *width, GLuint *height);
79701e04c3fSmrg   void (*EvaluateDepthValues)(struct gl_context *ctx);
79801e04c3fSmrg
7997117f1b4Smrg   /**
8007117f1b4Smrg    * \name Query objects
8017117f1b4Smrg    */
8027117f1b4Smrg   /*@{*/
8033464ebd5Sriastradh   struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id);
8043464ebd5Sriastradh   void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q);
8053464ebd5Sriastradh   void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q);
806af69d88dSmrg   void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q);
8073464ebd5Sriastradh   void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q);
8083464ebd5Sriastradh   void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q);
8093464ebd5Sriastradh   void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q);
81001e04c3fSmrg   /*
81101e04c3fSmrg    * \pname the value requested to be written (GL_QUERY_RESULT, etc)
81201e04c3fSmrg    * \ptype the type of the value requested to be written:
81301e04c3fSmrg    *    GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB,
81401e04c3fSmrg    *    GL_INT, GL_INT64_ARB
81501e04c3fSmrg    */
81601e04c3fSmrg   void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q,
81701e04c3fSmrg                            struct gl_buffer_object *buf, intptr_t offset,
81801e04c3fSmrg                            GLenum pname, GLenum ptype);
8197117f1b4Smrg   /*@}*/
8207117f1b4Smrg
821af69d88dSmrg   /**
822af69d88dSmrg    * \name Performance monitors
823af69d88dSmrg    */
824af69d88dSmrg   /*@{*/
82501e04c3fSmrg   void (*InitPerfMonitorGroups)(struct gl_context *ctx);
826af69d88dSmrg   struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx);
827af69d88dSmrg   void (*DeletePerfMonitor)(struct gl_context *ctx,
828af69d88dSmrg                             struct gl_perf_monitor_object *m);
829af69d88dSmrg   GLboolean (*BeginPerfMonitor)(struct gl_context *ctx,
830af69d88dSmrg                                 struct gl_perf_monitor_object *m);
831af69d88dSmrg
832af69d88dSmrg   /** Stop an active performance monitor, discarding results. */
833af69d88dSmrg   void (*ResetPerfMonitor)(struct gl_context *ctx,
834af69d88dSmrg                            struct gl_perf_monitor_object *m);
835af69d88dSmrg   void (*EndPerfMonitor)(struct gl_context *ctx,
836af69d88dSmrg                          struct gl_perf_monitor_object *m);
837af69d88dSmrg   GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx,
838af69d88dSmrg                                             struct gl_perf_monitor_object *m);
839af69d88dSmrg   void (*GetPerfMonitorResult)(struct gl_context *ctx,
840af69d88dSmrg                                struct gl_perf_monitor_object *m,
841af69d88dSmrg                                GLsizei dataSize,
842af69d88dSmrg                                GLuint *data,
843af69d88dSmrg                                GLint *bytesWritten);
844af69d88dSmrg   /*@}*/
845af69d88dSmrg
8467117f1b4Smrg   /**
84701e04c3fSmrg    * \name Performance Query objects
8487117f1b4Smrg    */
8497117f1b4Smrg   /*@{*/
85001e04c3fSmrg   unsigned (*InitPerfQueryInfo)(struct gl_context *ctx);
85101e04c3fSmrg   void (*GetPerfQueryInfo)(struct gl_context *ctx,
85201e04c3fSmrg                            unsigned queryIndex,
85301e04c3fSmrg                            const char **name,
85401e04c3fSmrg                            GLuint *dataSize,
85501e04c3fSmrg                            GLuint *numCounters,
85601e04c3fSmrg                            GLuint *numActive);
85701e04c3fSmrg   void (*GetPerfCounterInfo)(struct gl_context *ctx,
85801e04c3fSmrg                              unsigned queryIndex,
85901e04c3fSmrg                              unsigned counterIndex,
86001e04c3fSmrg                              const char **name,
86101e04c3fSmrg                              const char **desc,
86201e04c3fSmrg                              GLuint *offset,
86301e04c3fSmrg                              GLuint *data_size,
86401e04c3fSmrg                              GLuint *type_enum,
86501e04c3fSmrg                              GLuint *data_type_enum,
86601e04c3fSmrg                              GLuint64 *raw_max);
86701e04c3fSmrg   struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx,
86801e04c3fSmrg                                                       unsigned queryIndex);
86901e04c3fSmrg   void (*DeletePerfQuery)(struct gl_context *ctx,
87001e04c3fSmrg                           struct gl_perf_query_object *obj);
87101e04c3fSmrg   bool (*BeginPerfQuery)(struct gl_context *ctx,
87201e04c3fSmrg                          struct gl_perf_query_object *obj);
87301e04c3fSmrg   void (*EndPerfQuery)(struct gl_context *ctx,
87401e04c3fSmrg                        struct gl_perf_query_object *obj);
87501e04c3fSmrg   void (*WaitPerfQuery)(struct gl_context *ctx,
87601e04c3fSmrg                         struct gl_perf_query_object *obj);
87701e04c3fSmrg   bool (*IsPerfQueryReady)(struct gl_context *ctx,
87801e04c3fSmrg                            struct gl_perf_query_object *obj);
87901e04c3fSmrg   void (*GetPerfQueryData)(struct gl_context *ctx,
88001e04c3fSmrg                            struct gl_perf_query_object *obj,
88101e04c3fSmrg                            GLsizei dataSize,
88201e04c3fSmrg                            GLuint *data,
88301e04c3fSmrg                            GLuint *bytesWritten);
8847117f1b4Smrg   /*@}*/
8857117f1b4Smrg
88601e04c3fSmrg
8877117f1b4Smrg   /**
88801e04c3fSmrg    * \name GREMEDY debug/marker functions
8897117f1b4Smrg    */
8907117f1b4Smrg   /*@{*/
89101e04c3fSmrg   void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len);
8927117f1b4Smrg   /*@}*/
8937117f1b4Smrg
8947117f1b4Smrg   /**
8957117f1b4Smrg    * \name Support for multiple T&L engines
8967117f1b4Smrg    */
8977117f1b4Smrg   /*@{*/
8987117f1b4Smrg
8997117f1b4Smrg   /**
9007117f1b4Smrg    * Set by the driver-supplied T&L engine.
9017117f1b4Smrg    *
9027117f1b4Smrg    * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
9037117f1b4Smrg    */
9047117f1b4Smrg   GLuint CurrentExecPrimitive;
9057117f1b4Smrg
9067117f1b4Smrg   /**
907af69d88dSmrg    * Current glBegin state of an in-progress compilation.  May be
908af69d88dSmrg    * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
909af69d88dSmrg    * or PRIM_UNKNOWN.
9107117f1b4Smrg    */
9117117f1b4Smrg   GLuint CurrentSavePrimitive;
9127117f1b4Smrg
9137117f1b4Smrg
9147117f1b4Smrg#define FLUSH_STORED_VERTICES 0x1
9157117f1b4Smrg#define FLUSH_UPDATE_CURRENT  0x2
9167117f1b4Smrg   /**
9177117f1b4Smrg    * Set by the driver-supplied T&L engine whenever vertices are buffered
918af69d88dSmrg    * between glBegin()/glEnd() objects or __struct gl_contextRec::Current
919af69d88dSmrg    * is not updated.  A bitmask of the FLUSH_x values above.
9207117f1b4Smrg    *
9217117f1b4Smrg    * The dd_function_table::FlushVertices call below may be used to resolve
9227117f1b4Smrg    * these conditions.
9237117f1b4Smrg    */
924af69d88dSmrg   GLbitfield NeedFlush;
9257117f1b4Smrg
92601e04c3fSmrg   /** Need to call vbo_save_SaveFlushVertices() upon state change? */
927af69d88dSmrg   GLboolean SaveNeedFlush;
9284a49301eSmrg
9297117f1b4Smrg   /**
9307117f1b4Smrg    * Notify driver that the special derived value _NeedEyeCoords has
9317117f1b4Smrg    * changed.
9327117f1b4Smrg    */
9333464ebd5Sriastradh   void (*LightingSpaceChange)( struct gl_context *ctx );
9347117f1b4Smrg
935af69d88dSmrg   /**@}*/
9364a49301eSmrg
9374a49301eSmrg   /**
9384a49301eSmrg    * \name GL_ARB_sync interfaces
9394a49301eSmrg    */
9404a49301eSmrg   /*@{*/
94101e04c3fSmrg   struct gl_sync_object * (*NewSyncObject)(struct gl_context *);
942af69d88dSmrg   void (*FenceSync)(struct gl_context *, struct gl_sync_object *,
943af69d88dSmrg                     GLenum, GLbitfield);
9443464ebd5Sriastradh   void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *);
9453464ebd5Sriastradh   void (*CheckSync)(struct gl_context *, struct gl_sync_object *);
9463464ebd5Sriastradh   void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *,
9474a49301eSmrg			  GLbitfield, GLuint64);
9483464ebd5Sriastradh   void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *,
9494a49301eSmrg			  GLbitfield, GLuint64);
9504a49301eSmrg   /*@}*/
951cdc920a0Smrg
952cdc920a0Smrg   /** GL_NV_conditional_render */
953af69d88dSmrg   void (*BeginConditionalRender)(struct gl_context *ctx,
954af69d88dSmrg                                  struct gl_query_object *q,
955cdc920a0Smrg                                  GLenum mode);
956af69d88dSmrg   void (*EndConditionalRender)(struct gl_context *ctx,
957af69d88dSmrg                                struct gl_query_object *q);
958cdc920a0Smrg
959cdc920a0Smrg   /**
960cdc920a0Smrg    * \name GL_OES_draw_texture interface
961cdc920a0Smrg    */
962cdc920a0Smrg   /*@{*/
9633464ebd5Sriastradh   void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
964cdc920a0Smrg                   GLfloat width, GLfloat height);
965cdc920a0Smrg   /*@}*/
966cdc920a0Smrg
9673464ebd5Sriastradh   /**
9683464ebd5Sriastradh    * \name GL_OES_EGL_image interface
9693464ebd5Sriastradh    */
9703464ebd5Sriastradh   void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target,
971cdc920a0Smrg				   struct gl_texture_object *texObj,
972cdc920a0Smrg				   struct gl_texture_image *texImage,
973cdc920a0Smrg				   GLeglImageOES image_handle);
9743464ebd5Sriastradh   void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx,
975cdc920a0Smrg					     struct gl_renderbuffer *rb,
976cdc920a0Smrg					     void *image_handle);
977cdc920a0Smrg
9783464ebd5Sriastradh   /**
9793464ebd5Sriastradh    * \name GL_EXT_transform_feedback interface
9803464ebd5Sriastradh    */
9813464ebd5Sriastradh   struct gl_transform_feedback_object *
9823464ebd5Sriastradh        (*NewTransformFeedback)(struct gl_context *ctx, GLuint name);
9833464ebd5Sriastradh   void (*DeleteTransformFeedback)(struct gl_context *ctx,
9843464ebd5Sriastradh                                   struct gl_transform_feedback_object *obj);
9853464ebd5Sriastradh   void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode,
9863464ebd5Sriastradh                                  struct gl_transform_feedback_object *obj);
9873464ebd5Sriastradh   void (*EndTransformFeedback)(struct gl_context *ctx,
9883464ebd5Sriastradh                                struct gl_transform_feedback_object *obj);
9893464ebd5Sriastradh   void (*PauseTransformFeedback)(struct gl_context *ctx,
9903464ebd5Sriastradh                                  struct gl_transform_feedback_object *obj);
9913464ebd5Sriastradh   void (*ResumeTransformFeedback)(struct gl_context *ctx,
9923464ebd5Sriastradh                                   struct gl_transform_feedback_object *obj);
993af69d88dSmrg
994af69d88dSmrg   /**
995af69d88dSmrg    * Return the number of vertices written to a stream during the last
996af69d88dSmrg    * Begin/EndTransformFeedback block.
997af69d88dSmrg    */
998af69d88dSmrg   GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx,
999af69d88dSmrg                                       struct gl_transform_feedback_object *obj,
1000af69d88dSmrg                                       GLuint stream);
10013464ebd5Sriastradh
10023464ebd5Sriastradh   /**
10033464ebd5Sriastradh    * \name GL_NV_texture_barrier interface
10043464ebd5Sriastradh    */
10053464ebd5Sriastradh   void (*TextureBarrier)(struct gl_context *ctx);
10063464ebd5Sriastradh
10073464ebd5Sriastradh   /**
10083464ebd5Sriastradh    * \name GL_ARB_sampler_objects
10093464ebd5Sriastradh    */
10103464ebd5Sriastradh   struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx,
10113464ebd5Sriastradh                                                  GLuint name);
1012af69d88dSmrg
1013af69d88dSmrg   /**
1014af69d88dSmrg    * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query.
1015af69d88dSmrg    * This should be equivalent to glGetInteger64v(GL_TIMESTAMP);
1016af69d88dSmrg    */
1017af69d88dSmrg   uint64_t (*GetTimestamp)(struct gl_context *ctx);
1018af69d88dSmrg
1019af69d88dSmrg   /**
1020af69d88dSmrg    * \name GL_ARB_texture_multisample
1021af69d88dSmrg    */
1022af69d88dSmrg   void (*GetSamplePosition)(struct gl_context *ctx,
1023af69d88dSmrg                             struct gl_framebuffer *fb,
1024af69d88dSmrg                             GLuint index,
1025af69d88dSmrg                             GLfloat *outValue);
1026af69d88dSmrg
1027af69d88dSmrg   /**
1028af69d88dSmrg    * \name NV_vdpau_interop interface
1029af69d88dSmrg    */
1030af69d88dSmrg   void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target,
1031af69d88dSmrg                           GLenum access, GLboolean output,
1032af69d88dSmrg                           struct gl_texture_object *texObj,
1033af69d88dSmrg                           struct gl_texture_image *texImage,
1034af69d88dSmrg                           const GLvoid *vdpSurface, GLuint index);
1035af69d88dSmrg   void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target,
1036af69d88dSmrg                             GLenum access, GLboolean output,
1037af69d88dSmrg                             struct gl_texture_object *texObj,
1038af69d88dSmrg                             struct gl_texture_image *texImage,
1039af69d88dSmrg                             const GLvoid *vdpSurface, GLuint index);
1040af69d88dSmrg
1041af69d88dSmrg   /**
1042af69d88dSmrg    * Query reset status for GL_ARB_robustness
1043af69d88dSmrg    *
1044af69d88dSmrg    * Per \c glGetGraphicsResetStatusARB, this function should return a
1045af69d88dSmrg    * non-zero value once after a reset.  If a reset is non-atomic, the
1046af69d88dSmrg    * non-zero status should be returned for the duration of the reset.
1047af69d88dSmrg    */
1048af69d88dSmrg   GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx);
1049af69d88dSmrg
1050af69d88dSmrg   /**
1051af69d88dSmrg    * \name GL_ARB_shader_image_load_store interface.
1052af69d88dSmrg    */
1053af69d88dSmrg   /** @{ */
1054af69d88dSmrg   void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers);
1055af69d88dSmrg   /** @} */
105601e04c3fSmrg
105701e04c3fSmrg   /**
105801e04c3fSmrg    * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier.
105901e04c3fSmrg    *
106001e04c3fSmrg    * On return from this function any framebuffer contents written by
106101e04c3fSmrg    * previous draw commands are guaranteed to be visible from subsequent
106201e04c3fSmrg    * fragment shader invocations using the
106301e04c3fSmrg    * EXT_shader_framebuffer_fetch_non_coherent interface.
106401e04c3fSmrg    */
106501e04c3fSmrg   /** @{ */
106601e04c3fSmrg   void (*FramebufferFetchBarrier)(struct gl_context *ctx);
106701e04c3fSmrg   /** @} */
106801e04c3fSmrg
106901e04c3fSmrg   /**
107001e04c3fSmrg    * \name GL_ARB_compute_shader interface
107101e04c3fSmrg    */
107201e04c3fSmrg   /*@{*/
107301e04c3fSmrg   void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups);
107401e04c3fSmrg   void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect);
107501e04c3fSmrg   /*@}*/
107601e04c3fSmrg
107701e04c3fSmrg   /**
107801e04c3fSmrg    * \name GL_ARB_compute_variable_group_size interface
107901e04c3fSmrg    */
108001e04c3fSmrg   /*@{*/
108101e04c3fSmrg   void (*DispatchComputeGroupSize)(struct gl_context *ctx,
108201e04c3fSmrg                                    const GLuint *num_groups,
108301e04c3fSmrg                                    const GLuint *group_size);
108401e04c3fSmrg   /*@}*/
108501e04c3fSmrg
108601e04c3fSmrg   /**
108701e04c3fSmrg    * Query information about memory. Device memory is e.g. VRAM. Staging
108801e04c3fSmrg    * memory is e.g. GART. All sizes are in kilobytes.
108901e04c3fSmrg    */
109001e04c3fSmrg   void (*QueryMemoryInfo)(struct gl_context *ctx,
109101e04c3fSmrg                           struct gl_memory_info *info);
109201e04c3fSmrg
109301e04c3fSmrg   /**
109401e04c3fSmrg    * Indicate that this thread is being used by Mesa as a background drawing
109501e04c3fSmrg    * thread for the given GL context.
109601e04c3fSmrg    *
109701e04c3fSmrg    * If this function is called more than once from any given thread, each
109801e04c3fSmrg    * subsequent call overrides the context that was passed in the previous
109901e04c3fSmrg    * call.  Mesa takes advantage of this to re-use a background thread to
110001e04c3fSmrg    * perform drawing on behalf of multiple contexts.
110101e04c3fSmrg    *
110201e04c3fSmrg    * Mesa may sometimes call this function from a non-background thread
110301e04c3fSmrg    * (i.e. a thread that has already been bound to a context using
110401e04c3fSmrg    * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to
110501e04c3fSmrg    * the context that is bound to this thread.
110601e04c3fSmrg    *
110701e04c3fSmrg    * Mesa will only call this function if GL multithreading is enabled.
110801e04c3fSmrg    */
110901e04c3fSmrg   void (*SetBackgroundContext)(struct gl_context *ctx,
111001e04c3fSmrg                                struct util_queue_monitoring *queue_info);
111101e04c3fSmrg
111201e04c3fSmrg   /**
111301e04c3fSmrg    * \name GL_ARB_sparse_buffer interface
111401e04c3fSmrg    */
111501e04c3fSmrg   /*@{*/
111601e04c3fSmrg   void (*BufferPageCommitment)(struct gl_context *ctx,
111701e04c3fSmrg                                struct gl_buffer_object *bufferObj,
111801e04c3fSmrg                                GLintptr offset, GLsizeiptr size,
111901e04c3fSmrg                                GLboolean commit);
112001e04c3fSmrg   /*@}*/
112101e04c3fSmrg
112201e04c3fSmrg   /**
112301e04c3fSmrg    * \name GL_ARB_bindless_texture interface
112401e04c3fSmrg    */
112501e04c3fSmrg   /*@{*/
112601e04c3fSmrg   GLuint64 (*NewTextureHandle)(struct gl_context *ctx,
112701e04c3fSmrg                                struct gl_texture_object *texObj,
112801e04c3fSmrg                                struct gl_sampler_object *sampObj);
112901e04c3fSmrg   void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle);
113001e04c3fSmrg   void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle,
113101e04c3fSmrg                                     bool resident);
113201e04c3fSmrg   GLuint64 (*NewImageHandle)(struct gl_context *ctx,
113301e04c3fSmrg                              struct gl_image_unit *imgObj);
113401e04c3fSmrg   void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle);
113501e04c3fSmrg   void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle,
113601e04c3fSmrg                                   GLenum access, bool resident);
113701e04c3fSmrg   /*@}*/
113801e04c3fSmrg
113901e04c3fSmrg
114001e04c3fSmrg   /**
114101e04c3fSmrg    * \name GL_EXT_external_objects interface
114201e04c3fSmrg    */
114301e04c3fSmrg   /*@{*/
114401e04c3fSmrg  /**
114501e04c3fSmrg    * Called to allocate a new memory object.  Drivers will usually
114601e04c3fSmrg    * allocate/return a subclass of gl_memory_object.
114701e04c3fSmrg    */
114801e04c3fSmrg   struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx,
114901e04c3fSmrg                                                GLuint name);
115001e04c3fSmrg   /**
115101e04c3fSmrg    * Called to delete/free a memory object.  Drivers should free the
115201e04c3fSmrg    * object and any image data it contains.
115301e04c3fSmrg    */
115401e04c3fSmrg   void (*DeleteMemoryObject)(struct gl_context *ctx,
115501e04c3fSmrg                              struct gl_memory_object *memObj);
115601e04c3fSmrg
115701e04c3fSmrg   /**
115801e04c3fSmrg    * Set the given memory object as the texture's storage.
115901e04c3fSmrg    */
116001e04c3fSmrg   GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx,
116101e04c3fSmrg                                                 struct gl_texture_object *tex_obj,
116201e04c3fSmrg                                                 struct gl_memory_object *mem_obj,
116301e04c3fSmrg                                                 GLsizei levels, GLsizei width,
116401e04c3fSmrg                                                 GLsizei height, GLsizei depth,
116501e04c3fSmrg                                                 GLuint64 offset);
116601e04c3fSmrg
116701e04c3fSmrg   /**
116801e04c3fSmrg    * Use a memory object as the backing data for a buffer object
116901e04c3fSmrg    */
117001e04c3fSmrg   GLboolean (*BufferDataMem)(struct gl_context *ctx,
117101e04c3fSmrg                              GLenum target,
117201e04c3fSmrg                              GLsizeiptrARB size,
117301e04c3fSmrg                              struct gl_memory_object *memObj,
117401e04c3fSmrg                              GLuint64 offset,
117501e04c3fSmrg                              GLenum usage,
117601e04c3fSmrg                              struct gl_buffer_object *bufObj);
117701e04c3fSmrg
117801e04c3fSmrg   /**
117901e04c3fSmrg    * Fill uuid with an unique identifier for this driver
118001e04c3fSmrg    *
118101e04c3fSmrg    * uuid must point to GL_UUID_SIZE_EXT bytes of available memory
118201e04c3fSmrg    */
118301e04c3fSmrg   void (*GetDriverUuid)(struct gl_context *ctx, char *uuid);
118401e04c3fSmrg
118501e04c3fSmrg   /**
118601e04c3fSmrg    * Fill uuid with an unique identifier for the device associated
118701e04c3fSmrg    * to this driver
118801e04c3fSmrg    *
118901e04c3fSmrg    * uuid must point to GL_UUID_SIZE_EXT bytes of available memory
119001e04c3fSmrg    */
119101e04c3fSmrg   void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid);
119201e04c3fSmrg
119301e04c3fSmrg   /*@}*/
119401e04c3fSmrg
119501e04c3fSmrg   /**
119601e04c3fSmrg    * \name GL_EXT_external_objects_fd interface
119701e04c3fSmrg    */
119801e04c3fSmrg   /*@{*/
119901e04c3fSmrg   /**
120001e04c3fSmrg    * Called to import a memory object. The caller relinquishes ownership
120101e04c3fSmrg    * of fd after the call returns.
120201e04c3fSmrg    *
120301e04c3fSmrg    * Accessing fd after ImportMemoryObjectFd returns results in undefined
120401e04c3fSmrg    * behaviour. This is consistent with EXT_external_object_fd.
120501e04c3fSmrg    */
120601e04c3fSmrg   void (*ImportMemoryObjectFd)(struct gl_context *ctx,
120701e04c3fSmrg                                struct gl_memory_object *memObj,
120801e04c3fSmrg                                GLuint64 size,
120901e04c3fSmrg                                int fd);
121001e04c3fSmrg   /*@}*/
121101e04c3fSmrg
121201e04c3fSmrg   /**
121301e04c3fSmrg    * \name GL_ARB_get_program_binary
121401e04c3fSmrg    */
121501e04c3fSmrg   /*@{*/
121601e04c3fSmrg   /**
121701e04c3fSmrg    * Calls to retrieve/store a binary serialized copy of the current program.
121801e04c3fSmrg    */
121901e04c3fSmrg   void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1);
122001e04c3fSmrg
122101e04c3fSmrg   void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx,
122201e04c3fSmrg                                            struct gl_shader_program *shProg,
122301e04c3fSmrg                                            struct gl_program *prog);
122401e04c3fSmrg
122501e04c3fSmrg   void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx,
122601e04c3fSmrg                                              struct gl_shader_program *shProg,
122701e04c3fSmrg                                              struct gl_program *prog);
122801e04c3fSmrg   /*@}*/
122901e04c3fSmrg
123001e04c3fSmrg   /**
123101e04c3fSmrg    * \name GL_EXT_semaphore interface
123201e04c3fSmrg    */
123301e04c3fSmrg   /*@{*/
123401e04c3fSmrg  /**
123501e04c3fSmrg    * Called to allocate a new semaphore object. Drivers will usually
123601e04c3fSmrg    * allocate/return a subclass of gl_semaphore_object.
123701e04c3fSmrg    */
123801e04c3fSmrg   struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx,
123901e04c3fSmrg                                                      GLuint name);
124001e04c3fSmrg   /**
124101e04c3fSmrg    * Called to delete/free a semaphore object. Drivers should free the
124201e04c3fSmrg    * object and any associated resources.
124301e04c3fSmrg    */
124401e04c3fSmrg   void (*DeleteSemaphoreObject)(struct gl_context *ctx,
124501e04c3fSmrg                                 struct gl_semaphore_object *semObj);
124601e04c3fSmrg
124701e04c3fSmrg   /**
124801e04c3fSmrg    * Introduce an operation to wait for the semaphore object in the GL
124901e04c3fSmrg    * server's command stream
125001e04c3fSmrg    */
125101e04c3fSmrg   void (*ServerWaitSemaphoreObject)(struct gl_context *ctx,
125201e04c3fSmrg                                     struct gl_semaphore_object *semObj,
125301e04c3fSmrg                                     GLuint numBufferBarriers,
125401e04c3fSmrg                                     struct gl_buffer_object **bufObjs,
125501e04c3fSmrg                                     GLuint numTextureBarriers,
125601e04c3fSmrg                                     struct gl_texture_object **texObjs,
125701e04c3fSmrg                                     const GLenum *srcLayouts);
125801e04c3fSmrg
125901e04c3fSmrg   /**
126001e04c3fSmrg    * Introduce an operation to signal the semaphore object in the GL
126101e04c3fSmrg    * server's command stream
126201e04c3fSmrg    */
126301e04c3fSmrg   void (*ServerSignalSemaphoreObject)(struct gl_context *ctx,
126401e04c3fSmrg                                       struct gl_semaphore_object *semObj,
126501e04c3fSmrg                                       GLuint numBufferBarriers,
126601e04c3fSmrg                                       struct gl_buffer_object **bufObjs,
126701e04c3fSmrg                                       GLuint numTextureBarriers,
126801e04c3fSmrg                                       struct gl_texture_object **texObjs,
126901e04c3fSmrg                                       const GLenum *dstLayouts);
127001e04c3fSmrg   /*@}*/
127101e04c3fSmrg
127201e04c3fSmrg   /**
127301e04c3fSmrg    * \name GL_EXT_semaphore_fd interface
127401e04c3fSmrg    */
127501e04c3fSmrg   /*@{*/
127601e04c3fSmrg   /**
127701e04c3fSmrg    * Called to import a semaphore object. The caller relinquishes ownership
127801e04c3fSmrg    * of fd after the call returns.
127901e04c3fSmrg    *
128001e04c3fSmrg    * Accessing fd after ImportSemaphoreFd returns results in undefined
128101e04c3fSmrg    * behaviour. This is consistent with EXT_semaphore_fd.
128201e04c3fSmrg    */
128301e04c3fSmrg   void (*ImportSemaphoreFd)(struct gl_context *ctx,
128401e04c3fSmrg                                struct gl_semaphore_object *semObj,
128501e04c3fSmrg                                int fd);
128601e04c3fSmrg   /*@}*/
128701e04c3fSmrg
128801e04c3fSmrg   /**
128901e04c3fSmrg    * \name Disk shader cache functions
129001e04c3fSmrg    */
129101e04c3fSmrg   /*@{*/
129201e04c3fSmrg   /**
129301e04c3fSmrg    * Called to initialize gl_program::driver_cache_blob (and size) with a
129401e04c3fSmrg    * ralloc allocated buffer.
129501e04c3fSmrg    *
129601e04c3fSmrg    * This buffer will be saved and restored as part of the gl_program
129701e04c3fSmrg    * serialization and deserialization.
129801e04c3fSmrg    */
129901e04c3fSmrg   void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx,
130001e04c3fSmrg                                          struct gl_program *prog);
130101e04c3fSmrg   /*@}*/
13027117f1b4Smrg};
13037117f1b4Smrg
13047117f1b4Smrg
13057117f1b4Smrg/**
1306af69d88dSmrg * Per-vertex functions.
13077117f1b4Smrg *
1308af69d88dSmrg * These are the functions which can appear between glBegin and glEnd.
1309af69d88dSmrg * Depending on whether we're inside or outside a glBegin/End pair
1310af69d88dSmrg * and whether we're in immediate mode or building a display list, these
1311af69d88dSmrg * functions behave differently.  This structure allows us to switch
1312af69d88dSmrg * between those modes more easily.
13137117f1b4Smrg *
1314af69d88dSmrg * Generally, these pointers point to functions in the VBO module.
13157117f1b4Smrg */
13167117f1b4Smrgtypedef struct {
13173464ebd5Sriastradh   void (GLAPIENTRYP ArrayElement)( GLint );
13187117f1b4Smrg   void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
13197117f1b4Smrg   void (GLAPIENTRYP Color3fv)( const GLfloat * );
13207117f1b4Smrg   void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
13217117f1b4Smrg   void (GLAPIENTRYP Color4fv)( const GLfloat * );
13227117f1b4Smrg   void (GLAPIENTRYP EdgeFlag)( GLboolean );
13233464ebd5Sriastradh   void (GLAPIENTRYP EvalCoord1f)( GLfloat );
13243464ebd5Sriastradh   void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * );
13253464ebd5Sriastradh   void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat );
13263464ebd5Sriastradh   void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * );
13273464ebd5Sriastradh   void (GLAPIENTRYP EvalPoint1)( GLint );
13283464ebd5Sriastradh   void (GLAPIENTRYP EvalPoint2)( GLint, GLint );
13297117f1b4Smrg   void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
13307117f1b4Smrg   void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
13317117f1b4Smrg   void (GLAPIENTRYP Indexf)( GLfloat );
13327117f1b4Smrg   void (GLAPIENTRYP Indexfv)( const GLfloat * );
13333464ebd5Sriastradh   void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * );
13347117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
13357117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
13367117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
13377117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
13387117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
13397117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
13407117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
13417117f1b4Smrg   void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
13427117f1b4Smrg   void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
13437117f1b4Smrg   void (GLAPIENTRYP Normal3fv)( const GLfloat * );
13447117f1b4Smrg   void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
13457117f1b4Smrg   void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
13467117f1b4Smrg   void (GLAPIENTRYP TexCoord1f)( GLfloat );
13477117f1b4Smrg   void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
13487117f1b4Smrg   void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
13497117f1b4Smrg   void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
13507117f1b4Smrg   void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
13517117f1b4Smrg   void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
13527117f1b4Smrg   void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
13537117f1b4Smrg   void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
13547117f1b4Smrg   void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
13557117f1b4Smrg   void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
13567117f1b4Smrg   void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
13577117f1b4Smrg   void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
13587117f1b4Smrg   void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
13597117f1b4Smrg   void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
13603464ebd5Sriastradh   void (GLAPIENTRYP CallList)( GLuint );
13613464ebd5Sriastradh   void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * );
13627117f1b4Smrg   void (GLAPIENTRYP Begin)( GLenum );
13637117f1b4Smrg   void (GLAPIENTRYP End)( void );
13643464ebd5Sriastradh   void (GLAPIENTRYP PrimitiveRestartNV)( void );
1365af69d88dSmrg   /* Originally for GL_NV_vertex_program, now used only dlist.c and friends */
13667117f1b4Smrg   void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
13677117f1b4Smrg   void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
13687117f1b4Smrg   void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
13697117f1b4Smrg   void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
13707117f1b4Smrg   void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
13717117f1b4Smrg   void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
13727117f1b4Smrg   void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
13737117f1b4Smrg   void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
13743464ebd5Sriastradh   /* GL_ARB_vertex_program */
13757117f1b4Smrg   void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
13767117f1b4Smrg   void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
13777117f1b4Smrg   void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
13787117f1b4Smrg   void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
13797117f1b4Smrg   void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
13807117f1b4Smrg   void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
13817117f1b4Smrg   void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
13827117f1b4Smrg   void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
13833464ebd5Sriastradh
13843464ebd5Sriastradh   /* GL_EXT_gpu_shader4 / GL 3.0 */
13853464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x);
13863464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y);
13873464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z);
13883464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w);
13893464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v);
13903464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v);
13913464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v);
13923464ebd5Sriastradh
13933464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x);
13943464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y);
13953464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z);
13963464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
13973464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v);
13983464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v);
13993464ebd5Sriastradh   void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v);
14003464ebd5Sriastradh
1401af69d88dSmrg   /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */
1402af69d88dSmrg   void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value );
1403af69d88dSmrg   void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value);
1404af69d88dSmrg
1405af69d88dSmrg   void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value );
1406af69d88dSmrg   void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value);
1407af69d88dSmrg
1408af69d88dSmrg   void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value );
1409af69d88dSmrg   void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value);
1410af69d88dSmrg
1411af69d88dSmrg   void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords );
1412af69d88dSmrg   void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords );
1413af69d88dSmrg
1414af69d88dSmrg   void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords );
1415af69d88dSmrg   void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords );
1416af69d88dSmrg
1417af69d88dSmrg   void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords );
1418af69d88dSmrg   void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords );
1419af69d88dSmrg
1420af69d88dSmrg   void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords );
1421af69d88dSmrg   void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords );
1422af69d88dSmrg
1423af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords );
1424af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords );
1425af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords );
1426af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords );
1427af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords );
1428af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords );
1429af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords );
1430af69d88dSmrg   void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords );
1431af69d88dSmrg
1432af69d88dSmrg   void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords );
1433af69d88dSmrg   void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords );
1434af69d88dSmrg
1435af69d88dSmrg   void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color );
1436af69d88dSmrg   void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color );
1437af69d88dSmrg
1438af69d88dSmrg   void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color );
1439af69d88dSmrg   void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color );
1440af69d88dSmrg
1441af69d88dSmrg   void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color );
1442af69d88dSmrg   void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color );
1443af69d88dSmrg
1444af69d88dSmrg   void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type,
1445af69d88dSmrg					GLboolean normalized, GLuint value);
1446af69d88dSmrg   void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type,
1447af69d88dSmrg					GLboolean normalized, GLuint value);
1448af69d88dSmrg   void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type,
1449af69d88dSmrg					GLboolean normalized, GLuint value);
1450af69d88dSmrg   void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type,
1451af69d88dSmrg					GLboolean normalized, GLuint value);
1452af69d88dSmrg   void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type,
1453af69d88dSmrg					GLboolean normalized,
1454af69d88dSmrg					 const GLuint *value);
1455af69d88dSmrg   void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type,
1456af69d88dSmrg					GLboolean normalized,
1457af69d88dSmrg					 const GLuint *value);
1458af69d88dSmrg   void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type,
1459af69d88dSmrg					GLboolean normalized,
1460af69d88dSmrg					 const GLuint *value);
1461af69d88dSmrg   void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type,
1462af69d88dSmrg					 GLboolean normalized,
1463af69d88dSmrg					 const GLuint *value);
146401e04c3fSmrg
146501e04c3fSmrg   /* GL_ARB_vertex_attrib_64bit / GL 4.1 */
146601e04c3fSmrg   void (GLAPIENTRYP VertexAttribL1d)( GLuint index, GLdouble x);
146701e04c3fSmrg   void (GLAPIENTRYP VertexAttribL2d)( GLuint index, GLdouble x, GLdouble y);
146801e04c3fSmrg   void (GLAPIENTRYP VertexAttribL3d)( GLuint index, GLdouble x, GLdouble y, GLdouble z);
146901e04c3fSmrg   void (GLAPIENTRYP VertexAttribL4d)( GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
147001e04c3fSmrg
147101e04c3fSmrg
147201e04c3fSmrg   void (GLAPIENTRYP VertexAttribL1dv)( GLuint index, const GLdouble *v);
147301e04c3fSmrg   void (GLAPIENTRYP VertexAttribL2dv)( GLuint index, const GLdouble *v);
147401e04c3fSmrg   void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v);
147501e04c3fSmrg   void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v);
147601e04c3fSmrg
147701e04c3fSmrg   void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x);
147801e04c3fSmrg   void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v);
14797117f1b4Smrg} GLvertexformat;
14807117f1b4Smrg
14817117f1b4Smrg
14827117f1b4Smrg#endif /* DD_INCLUDED */
1483