~ubuntu-branches/ubuntu/trusty/mesa-lts-utopic/trusty-proposed

« back to all changes in this revision

Viewing changes to src/mesa/main/dd.h

  • Committer: Package Import Robot
  • Author(s): Maarten Lankhorst
  • Date: 2015-01-06 10:38:32 UTC
  • Revision ID: package-import@ubuntu.com-20150106103832-u6rqp9wfmojb1gnu
Tags: upstream-10.3.2
ImportĀ upstreamĀ versionĀ 10.3.2

Show diffs side-by-side

added added

removed removed

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