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