3
* Device driver interfaces.
7
* Mesa 3-D graphics library
9
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
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:
18
* The above copyright notice and this permission notice shall be included
19
* in all copies or substantial portions of the Software.
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.
34
/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
38
struct gl_buffer_object;
40
struct gl_display_list;
41
struct gl_framebuffer;
43
struct gl_pixelstore_attrib;
45
struct gl_renderbuffer;
46
struct gl_renderbuffer_attachment;
48
struct gl_shader_program;
49
struct gl_texture_image;
50
struct gl_texture_object;
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.
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
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.
64
#define MESA_MAP_NOWAIT_BIT 0x0040
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.
74
* Vertex transformation/clipping/lighting is patched into the T&L module.
75
* Rasterization functions are patched into the swrast module.
77
* Note: when new functions are added here, the drivers/common/driverfuncs.c
78
* file should be updated too!!!
80
struct dd_function_table {
82
* Return a string as needed by glGetString().
83
* Only the GL_RENDERER query must be implemented. Otherwise, NULL can be
86
const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name );
89
* Notify the driver after Mesa has made some internal state changes.
91
* This is in addition to any state change callbacks Mesa may already have
94
void (*UpdateState)( struct gl_context *ctx, GLbitfield new_state );
97
* Resize the given framebuffer to the given size.
98
* XXX OBSOLETE: this function will be removed in the future.
100
void (*ResizeBuffers)( struct gl_context *ctx, struct gl_framebuffer *fb,
101
GLuint width, GLuint height);
104
* This is called whenever glFinish() is called.
106
void (*Finish)( struct gl_context *ctx );
109
* This is called whenever glFlush() is called.
111
void (*Flush)( struct gl_context *ctx );
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.
118
void (*Clear)( struct gl_context *ctx, GLbitfield buffers );
121
* Execute glAccum command.
123
void (*Accum)( struct gl_context *ctx, GLenum op, GLfloat value );
127
* Execute glRasterPos, updating the ctx->Current.Raster fields
129
void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] );
132
* \name Image-related functions
137
* Called by glDrawPixels().
138
* \p unpack describes how to unpack the source image data.
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 );
147
* Called by glReadPixels().
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,
156
* Called by glCopyPixels().
158
void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy,
159
GLsizei width, GLsizei height,
160
GLint dstx, GLint dsty, GLenum type );
163
* Called by glBitmap().
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 );
173
* \name Texture image functions
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.
185
mesa_format (*ChooseTextureFormat)(struct gl_context *ctx,
186
GLenum target, GLint internalFormat,
187
GLenum srcFormat, GLenum srcType );
190
* Determine sample counts support for a particular target and format
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.
199
* The number of sample counts actually written to \c samples. If
200
* \c internaFormat is not renderable, zero is returned.
202
size_t (*QuerySamplesForFormat)(struct gl_context *ctx,
204
GLenum internalFormat,
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.
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);
222
* Called by glTexSubImage[123]D().
223
* Replace a subset of the target texture with new texel data.
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);
235
* Called by glGetTexImage().
237
void (*GetTexImage)( struct gl_context *ctx,
238
GLenum format, GLenum type, GLvoid *pixels,
239
struct gl_texture_image *texImage );
242
* Called by glClearTex[Sub]Image
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.
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);
256
* Called by glCopyTex[Sub]Image[123]D().
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.
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,
269
GLsizei width, GLsizei height);
272
* Called by glCopyImageSubData().
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.
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);
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
294
void (*GenerateMipmap)(struct gl_context *ctx, GLenum target,
295
struct gl_texture_object *texObj);
298
* Called by glTexImage, glCompressedTexImage, glCopyTexImage
299
* and glTexStorage to check if the dimensions of the texture image
301
* \param target any GL_PROXY_TEXTURE_x target
302
* \return GL_TRUE if the image is OK, GL_FALSE if too large
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);
312
* \name Compressed texture functions
317
* Called by glCompressedTexImage[123]D().
319
void (*CompressedTexImage)(struct gl_context *ctx, GLuint dims,
320
struct gl_texture_image *texImage,
321
GLsizei imageSize, const GLvoid *data);
324
* Called by glCompressedTexSubImage[123]D().
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,
331
GLsizei imageSize, const GLvoid *data);
334
* Called by glGetCompressedTexImage.
336
void (*GetCompressedTexImage)(struct gl_context *ctx,
337
struct gl_texture_image *texImage,
342
* \name Texture object / image functions
347
* Called by glBindTexture() and glBindTextures().
349
void (*BindTexture)( struct gl_context *ctx, GLuint texUnit,
350
GLenum target, struct gl_texture_object *tObj );
353
* Called to allocate a new texture object. Drivers will usually
354
* allocate/return a subclass of gl_texture_object.
356
struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx,
357
GLuint name, GLenum target);
359
* Called to delete/free a texture object. Drivers should free the
360
* object and any image data it contains.
362
void (*DeleteTexture)(struct gl_context *ctx,
363
struct gl_texture_object *texObj);
365
/** Called to allocate a new texture image object. */
366
struct gl_texture_image * (*NewTextureImage)(struct gl_context *ctx);
368
/** Called to free a texture image object returned by NewTextureImage() */
369
void (*DeleteTextureImage)(struct gl_context *ctx,
370
struct gl_texture_image *);
372
/** Called to allocate memory for a single texture image */
373
GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx,
374
struct gl_texture_image *texImage);
376
/** Free the memory for a single texture image */
377
void (*FreeTextureImageBuffer)(struct gl_context *ctx,
378
struct gl_texture_image *texImage);
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
393
void (*MapTextureImage)(struct gl_context *ctx,
394
struct gl_texture_image *texImage,
396
GLuint x, GLuint y, GLuint w, GLuint h,
398
GLubyte **mapOut, GLint *rowStrideOut);
400
void (*UnmapTextureImage)(struct gl_context *ctx,
401
struct gl_texture_image *texImage,
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.
408
GLboolean (*AllocTextureStorage)(struct gl_context *ctx,
409
struct gl_texture_object *texObj,
410
GLsizei levels, GLsizei width,
411
GLsizei height, GLsizei depth);
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);
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)
423
void (*MapRenderbuffer)(struct gl_context *ctx,
424
struct gl_renderbuffer *rb,
425
GLuint x, GLuint y, GLuint w, GLuint h,
427
GLubyte **mapOut, GLint *rowStrideOut);
429
void (*UnmapRenderbuffer)(struct gl_context *ctx,
430
struct gl_renderbuffer *rb);
433
* Optional driver entrypoint that binds a non-texture renderbuffer's
434
* contents to a texture image.
436
GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx,
437
struct gl_renderbuffer *rb,
438
struct gl_texture_image *texImage);
443
* \name Vertex/fragment program functions
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,
452
/** Delete a program */
453
void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);
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.
459
GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target,
460
struct gl_program *prog);
463
* Notify driver that the sampler uniforms for the current program have
464
* changed. On some drivers, this may require shader recompiles.
466
void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target,
467
struct gl_program *prog);
469
/** Query if program can be loaded onto hardware */
470
GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target,
471
struct gl_program *prog);
476
* \name GLSL shader/program functions.
480
* Called when a shader program is linked.
482
* This gives drivers an opportunity to clone the IR and make their
483
* own transformations on it for the purposes of code generation.
485
GLboolean (*LinkShader)(struct gl_context *ctx,
486
struct gl_shader_program *shader);
490
* \name State-changing functions.
492
* \note drawing functions are above.
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.
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.
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);
601
* \name Vertex/pixel buffer object functions
604
struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx,
605
GLuint buffer, GLenum target);
607
void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj );
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);
613
void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset,
614
GLsizeiptrARB size, const GLvoid *data,
615
struct gl_buffer_object *obj );
617
void (*GetBufferSubData)( struct gl_context *ctx,
618
GLintptrARB offset, GLsizeiptrARB size,
619
GLvoid *data, struct gl_buffer_object *obj );
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 );
627
void (*CopyBufferSubData)( struct gl_context *ctx,
628
struct gl_buffer_object *src,
629
struct gl_buffer_object *dst,
630
GLintptr readOffset, GLintptr writeOffset,
633
/* Returns pointer to the start of the mapped range.
634
* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
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);
641
void (*FlushMappedBufferRange)(struct gl_context *ctx,
642
GLintptr offset, GLsizeiptr length,
643
struct gl_buffer_object *obj,
644
gl_map_buffer_index index);
646
GLboolean (*UnmapBuffer)( struct gl_context *ctx,
647
struct gl_buffer_object *obj,
648
gl_map_buffer_index index);
652
* \name Functions for GL_APPLE_object_purgeable
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,
664
/* variations on ObjectUnpurgeable */
665
GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx,
666
struct gl_buffer_object *obj,
668
GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx,
669
struct gl_renderbuffer *obj,
671
GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx,
672
struct gl_texture_object *obj,
677
* \name Functions for GL_EXT_framebuffer_{object,blit,discard}.
680
struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx,
682
struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx,
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,
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);
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);
708
* \name Query objects
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);
721
* \name Performance monitors
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);
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,
741
GLint *bytesWritten);
746
* \name Vertex Array objects
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 *);
755
* \name GLSL-related functions (ARB extensions and OpenGL 2.x)
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,
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);
770
* \name Support for multiple T&L engines
775
* Set by the driver-supplied T&L engine.
777
* Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
779
GLuint CurrentExecPrimitive;
782
* Current glBegin state of an in-progress compilation. May be
783
* GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END
786
GLuint CurrentSavePrimitive;
789
#define FLUSH_STORED_VERTICES 0x1
790
#define FLUSH_UPDATE_CURRENT 0x2
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.
796
* The dd_function_table::FlushVertices call below may be used to resolve
799
GLbitfield NeedFlush;
801
/** Need to call SaveFlushVertices() upon state change? */
802
GLboolean SaveNeedFlush;
804
/* Called prior to any of the GLvertexformat functions being
805
* called. Paired with Driver.FlushVertices().
807
void (*BeginVertices)( struct gl_context *ctx );
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
815
* Note that the default T&L engine never clears the
816
* FLUSH_UPDATE_CURRENT bit, even after performing the update.
818
void (*FlushVertices)( struct gl_context *ctx, GLuint flags );
819
void (*SaveFlushVertices)( struct gl_context *ctx );
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.
826
GLboolean (*NotifySaveBegin)( struct gl_context *ctx, GLenum mode );
829
* Notify driver that the special derived value _NeedEyeCoords has
832
void (*LightingSpaceChange)( struct gl_context *ctx );
835
* Called by glNewList().
837
* Let the T&L component know what is going on with display lists
838
* in time to make changes to dispatch tables, etc.
840
void (*NewList)( struct gl_context *ctx, GLuint list, GLenum mode );
842
* Called by glEndList().
844
* \sa dd_function_table::NewList.
846
void (*EndList)( struct gl_context *ctx );
849
* Called by glCallList(s).
851
* Notify the T&L component before and after calling a display list.
853
void (*BeginCallList)( struct gl_context *ctx,
854
struct gl_display_list *dlist );
856
* Called by glEndCallList().
858
* \sa dd_function_table::BeginCallList.
860
void (*EndCallList)( struct gl_context *ctx );
865
* \name GL_ARB_sync interfaces
868
struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum);
869
void (*FenceSync)(struct gl_context *, struct gl_sync_object *,
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);
879
/** GL_NV_conditional_render */
880
void (*BeginConditionalRender)(struct gl_context *ctx,
881
struct gl_query_object *q,
883
void (*EndConditionalRender)(struct gl_context *ctx,
884
struct gl_query_object *q);
887
* \name GL_OES_draw_texture interface
890
void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
891
GLfloat width, GLfloat height);
895
* \name GL_OES_EGL_image interface
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,
906
* \name GL_EXT_transform_feedback interface
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);
922
* Return the number of vertices written to a stream during the last
923
* Begin/EndTransformFeedback block.
925
GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx,
926
struct gl_transform_feedback_object *obj,
930
* \name GL_NV_texture_barrier interface
932
void (*TextureBarrier)(struct gl_context *ctx);
935
* \name GL_ARB_sampler_objects
937
struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx,
939
void (*DeleteSamplerObject)(struct gl_context *ctx,
940
struct gl_sampler_object *samp);
943
* \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query.
944
* This should be equivalent to glGetInteger64v(GL_TIMESTAMP);
946
uint64_t (*GetTimestamp)(struct gl_context *ctx);
949
* \name GL_ARB_texture_multisample
951
void (*GetSamplePosition)(struct gl_context *ctx,
952
struct gl_framebuffer *fb,
957
* \name NV_vdpau_interop interface
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);
971
* Query reset status for GL_ARB_robustness
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.
977
GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx);
980
* \name GL_ARB_shader_image_load_store interface.
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);
989
void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers);
995
* Per-vertex functions.
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.
1003
* Generally, these pointers point to functions in the VBO module.
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 );
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);
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);
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);
1094
void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value );
1095
void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value);
1097
void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value );
1098
void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value);
1100
void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords );
1101
void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords );
1103
void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords );
1104
void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords );
1106
void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords );
1107
void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords );
1109
void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords );
1110
void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords );
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 );
1121
void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords );
1122
void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords );
1124
void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color );
1125
void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color );
1127
void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color );
1128
void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color );
1130
void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color );
1131
void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color );
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);
1156
#endif /* DD_INCLUDED */