dd.h revision 40bd9d0b190e11d39350d1b08d2c2b28e3040bca
1/** 2 * \file dd.h 3 * Device driver interfaces. 4 */ 5 6/* 7 * Mesa 3-D graphics library 8 * Version: 4.1 9 * 10 * Copyright (C) 1999-2002 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 36struct gl_pixelstore_attrib; 37 38/* Mask bits sent to the driver Clear() function */ 39#define DD_FRONT_LEFT_BIT FRONT_LEFT_BIT /* 1 */ 40#define DD_FRONT_RIGHT_BIT FRONT_RIGHT_BIT /* 2 */ 41#define DD_BACK_LEFT_BIT BACK_LEFT_BIT /* 4 */ 42#define DD_BACK_RIGHT_BIT BACK_RIGHT_BIT /* 8 */ 43#define DD_AUX0 AUX0_BIT /* future use */ 44#define DD_AUX1 AUX1_BIT /* future use */ 45#define DD_AUX2 AUX2_BIT /* future use */ 46#define DD_AUX3 AUX3_BIT /* future use */ 47#define DD_DEPTH_BIT GL_DEPTH_BUFFER_BIT /* 0x00000100 */ 48#define DD_ACCUM_BIT GL_ACCUM_BUFFER_BIT /* 0x00000200 */ 49#define DD_STENCIL_BIT GL_STENCIL_BUFFER_BIT /* 0x00000400 */ 50 51 52/** 53 * Device driver function table. 54 * Core Mesa uses these function pointers to call into device drivers. 55 * Most of these functions directly correspond to OpenGL state commands. 56 * Core Mesa will call these functions after error checking has been done 57 * so that the drivers don't have to worry about error testing. 58 * 59 * Vertex transformation/clipping/lighting is patched into the T&L module. 60 * Rasterization functions are patched into the swrast module. 61 */ 62struct dd_function_table { 63 /** 64 * Return a string as needed by glGetString(). 65 * 66 * Only the GL_RENDERER token must be implemented. Otherwise, NULL can be 67 * returned. 68 */ 69 const GLubyte * (*GetString)( GLcontext *ctx, GLenum name ); 70 71 /** 72 * Notify the driver after Mesa has made some internal state changes. 73 * 74 * This is in addition to any state change callbacks Mesa may already have 75 * made. 76 */ 77 void (*UpdateState)( GLcontext *ctx, GLuint new_state ); 78 79 /** 80 * Clear the color/depth/stencil/accum buffer(s). 81 * 82 * \param mask a bitmask of the DD_*_BIT values defined above that indicates 83 * which buffers need to be cleared. 84 * \param all if true then clear the whole buffer, else clear only the 85 * region defined by <tt>(x, y, width, height)</tt>. 86 * 87 * This function must obey the glColorMask(), glIndexMask() and glStencilMask() 88 * settings! 89 * Software Mesa can do masked clears if the device driver can't. 90 */ 91 void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all, 92 GLint x, GLint y, GLint width, GLint height ); 93 94 /** 95 * Specify the current buffer for writing. 96 * 97 * Called via glDrawBuffer(). Note the driver must organize fallbacks (e.g. 98 * with swrast) if it cannot implement the requested mode. 99 */ 100 void (*DrawBuffer)( GLcontext *ctx, GLenum buffer ); 101 102 /** 103 * Specifies the current buffer for reading. 104 * 105 * Called via glReadBuffer(). 106 */ 107 void (*ReadBuffer)( GLcontext *ctx, GLenum buffer ); 108 109 /** 110 * Get the width and height of the named buffer/window. 111 * 112 * Mesa uses this to determine when the driver's window size has changed. 113 */ 114 void (*GetBufferSize)( GLframebuffer *buffer, 115 GLuint *width, GLuint *height ); 116 117 /** 118 * Resize the driver's depth/stencil/accum/back buffers to match the 119 * size given in the GLframebuffer struct. 120 * 121 * This is typically called when Mesa detects that a window size has changed. 122 */ 123 void (*ResizeBuffers)( GLframebuffer *buffer ); 124 125 /** 126 * This is called whenever glFinish() is called. 127 */ 128 void (*Finish)( GLcontext *ctx ); 129 130 /** 131 * This is called whenever glFlush() is called. 132 */ 133 void (*Flush)( GLcontext *ctx ); 134 135 /** 136 * Called whenever an error is generated. 137 * 138 * __GLcontextRec::ErrorValue contains the error value. 139 */ 140 void (*Error)( GLcontext *ctx ); 141 142 143 /** 144 * \name For hardware accumulation buffer 145 */ 146 /*@{*/ 147 /** 148 * Execute glAccum command within the given scissor region. 149 */ 150 void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value, 151 GLint xpos, GLint ypos, GLint width, GLint height ); 152 /*@}*/ 153 154 155 /** 156 * \name glDraw(), glRead(), glCopyPixels() and glBitmap() functions 157 */ 158 /*@{*/ 159 160 /** 161 * This is called by glDrawPixels(). 162 * 163 * \p unpack describes how to unpack the source image data. 164 */ 165 void (*DrawPixels)( GLcontext *ctx, 166 GLint x, GLint y, GLsizei width, GLsizei height, 167 GLenum format, GLenum type, 168 const struct gl_pixelstore_attrib *unpack, 169 const GLvoid *pixels ); 170 171 /** 172 * Called by glReadPixels(). 173 */ 174 void (*ReadPixels)( GLcontext *ctx, 175 GLint x, GLint y, GLsizei width, GLsizei height, 176 GLenum format, GLenum type, 177 const struct gl_pixelstore_attrib *unpack, 178 GLvoid *dest ); 179 180 /** 181 * Do a glCopyPixels(). 182 * 183 * This function must respect all rasterization state, glPixelTransfer(), 184 * glPixelZoom(), etc. 185 */ 186 void (*CopyPixels)( GLcontext *ctx, 187 GLint srcx, GLint srcy, 188 GLsizei width, GLsizei height, 189 GLint dstx, GLint dsty, GLenum type ); 190 191 /** 192 * This is called by glBitmap(). 193 * 194 * Works the same as dd_function_table::DrawPixels, above. 195 */ 196 void (*Bitmap)( GLcontext *ctx, 197 GLint x, GLint y, GLsizei width, GLsizei height, 198 const struct gl_pixelstore_attrib *unpack, 199 const GLubyte *bitmap ); 200 /*@}*/ 201 202 203 /** 204 * \name Texture image functions 205 */ 206 /*@{*/ 207 208 /** 209 * Choose texture format. 210 * 211 * This is called by the \c _mesa_store_tex[sub]image[123]d() fallback 212 * functions. The driver should examine \p internalFormat and return a 213 * pointer to an appropriate gl_texture_format. 214 */ 215 const struct gl_texture_format * 216 (*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat, 217 GLenum srcFormat, GLenum srcType ); 218 219 /** 220 * Called by glTexImage1D(). 221 * 222 * \param target user specified. 223 * \param format user specified. 224 * \param type user specified. 225 * \param pixels user specified. 226 * \param packing indicates the image packing of pixels. 227 * \param texObj is the target texture object. 228 * \param texImage is the target texture image. It will have the texture \p 229 * width, \p height, \p depth, \p border and \p internalFormat information. 230 * 231 * \p retainInternalCopy is returned by this function and indicates whether 232 * core Mesa should keep an internal copy of the texture image. 233 * 234 * Drivers should call a fallback routine from texstore.c if needed. 235 */ 236 void (*TexImage1D)( GLcontext *ctx, GLenum target, GLint level, 237 GLint internalFormat, 238 GLint width, GLint border, 239 GLenum format, GLenum type, const GLvoid *pixels, 240 const struct gl_pixelstore_attrib *packing, 241 struct gl_texture_object *texObj, 242 struct gl_texture_image *texImage ); 243 244 /** 245 * Called by glTexImage2D(). 246 * 247 * \sa dd_function_table::TexImage1D. 248 */ 249 void (*TexImage2D)( GLcontext *ctx, GLenum target, GLint level, 250 GLint internalFormat, 251 GLint width, GLint height, GLint border, 252 GLenum format, GLenum type, const GLvoid *pixels, 253 const struct gl_pixelstore_attrib *packing, 254 struct gl_texture_object *texObj, 255 struct gl_texture_image *texImage ); 256 257 /** 258 * Called by glTexImage3D(). 259 * 260 * \sa dd_function_table::TexImage1D. 261 */ 262 void (*TexImage3D)( GLcontext *ctx, GLenum target, GLint level, 263 GLint internalFormat, 264 GLint width, GLint height, GLint depth, GLint border, 265 GLenum format, GLenum type, 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 glTexSubImage1D(). 272 * 273 * \param target user specified. 274 * \param level user specified. 275 * \param xoffset user specified. 276 * \param yoffset user specified. 277 * \param zoffset user specified. 278 * \param width user specified. 279 * \param height user specified. 280 * \param depth user specified. 281 * \param format user specified. 282 * \param type user specified. 283 * \param pixels user specified. 284 * \param packing indicates the image packing of pixels. 285 * \param texObj is the target texture object. 286 * \param texImage is the target texture image. It will have the texture \p 287 * width, \p height, \p border and \p internalFormat information. 288 * 289 * The driver should use a fallback routine from texstore.c if needed. 290 */ 291 void (*TexSubImage1D)( GLcontext *ctx, GLenum target, GLint level, 292 GLint xoffset, GLsizei width, 293 GLenum format, GLenum type, 294 const GLvoid *pixels, 295 const struct gl_pixelstore_attrib *packing, 296 struct gl_texture_object *texObj, 297 struct gl_texture_image *texImage ); 298 299 /** 300 * Called by glTexSubImage2D(). 301 * 302 * \sa dd_function_table::TexSubImage1D. 303 */ 304 void (*TexSubImage2D)( GLcontext *ctx, GLenum target, GLint level, 305 GLint xoffset, GLint yoffset, 306 GLsizei width, GLsizei height, 307 GLenum format, GLenum type, 308 const GLvoid *pixels, 309 const struct gl_pixelstore_attrib *packing, 310 struct gl_texture_object *texObj, 311 struct gl_texture_image *texImage ); 312 313 /** 314 * Called by glTexSubImage3D(). 315 * 316 * \sa dd_function_table::TexSubImage1D. 317 */ 318 void (*TexSubImage3D)( GLcontext *ctx, GLenum target, GLint level, 319 GLint xoffset, GLint yoffset, GLint zoffset, 320 GLsizei width, GLsizei height, GLint depth, 321 GLenum format, GLenum type, 322 const GLvoid *pixels, 323 const struct gl_pixelstore_attrib *packing, 324 struct gl_texture_object *texObj, 325 struct gl_texture_image *texImage ); 326 327 /** 328 * Called by glCopyTexImage1D(). 329 * 330 * Drivers should use a fallback routine from texstore.c if needed. 331 */ 332 void (*CopyTexImage1D)( GLcontext *ctx, GLenum target, GLint level, 333 GLenum internalFormat, GLint x, GLint y, 334 GLsizei width, GLint border ); 335 336 /** 337 * Called by glCopyTexImage2D(). 338 * 339 * Drivers should use a fallback routine from texstore.c if needed. 340 */ 341 void (*CopyTexImage2D)( GLcontext *ctx, GLenum target, GLint level, 342 GLenum internalFormat, GLint x, GLint y, 343 GLsizei width, GLsizei height, GLint border ); 344 345 /** 346 * Called by glCopyTexSubImage1D(). 347 * 348 * Drivers should use a fallback routine from texstore.c if needed. 349 */ 350 void (*CopyTexSubImage1D)( GLcontext *ctx, GLenum target, GLint level, 351 GLint xoffset, 352 GLint x, GLint y, GLsizei width ); 353 /** 354 * Called by glCopyTexSubImage2D(). 355 * 356 * Drivers should use a fallback routine from texstore.c if needed. 357 */ 358 void (*CopyTexSubImage2D)( GLcontext *ctx, GLenum target, GLint level, 359 GLint xoffset, GLint yoffset, 360 GLint x, GLint y, 361 GLsizei width, GLsizei height ); 362 /** 363 * Called by glCopyTexSubImage3D(). 364 * 365 * Drivers should use a fallback routine from texstore.c if needed. 366 */ 367 void (*CopyTexSubImage3D)( GLcontext *ctx, GLenum target, GLint level, 368 GLint xoffset, GLint yoffset, GLint zoffset, 369 GLint x, GLint y, 370 GLsizei width, GLsizei height ); 371 372 /** 373 * Called by glTexImage[123]D when user specifies a proxy texture 374 * target. 375 * 376 * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails. 377 */ 378 GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target, 379 GLint level, GLint internalFormat, 380 GLenum format, GLenum type, 381 GLint width, GLint height, 382 GLint depth, GLint border); 383 /*@}*/ 384 385 386 /** 387 * \name Compressed texture functions 388 */ 389 /*@{*/ 390 391 /** 392 * Called by glCompressedTexImage1D(). 393 * 394 * \param target user specified. 395 * \param format user specified. 396 * \param type user specified. 397 * \param pixels user specified. 398 * \param packing indicates the image packing of pixels. 399 * \param texObj is the target texture object. 400 * \param texImage is the target texture image. It will have the texture \p 401 * width, \p height, \p depth, \p border and \p internalFormat information. 402 * 403 * \a retainInternalCopy is returned by this function and indicates whether 404 * core Mesa should keep an internal copy of the texture image. 405 */ 406 void (*CompressedTexImage1D)( GLcontext *ctx, GLenum target, 407 GLint level, GLint internalFormat, 408 GLsizei width, GLint border, 409 GLsizei imageSize, const GLvoid *data, 410 struct gl_texture_object *texObj, 411 struct gl_texture_image *texImage ); 412 /** 413 * Called by glCompressedTexImage2D(). 414 * 415 * \sa dd_function_table::CompressedTexImage1D. 416 */ 417 void (*CompressedTexImage2D)( GLcontext *ctx, GLenum target, 418 GLint level, GLint internalFormat, 419 GLsizei width, GLsizei height, GLint border, 420 GLsizei imageSize, const GLvoid *data, 421 struct gl_texture_object *texObj, 422 struct gl_texture_image *texImage ); 423 /** 424 * Called by glCompressedTexImage3D(). 425 * 426 * \sa dd_function_table::CompressedTexImage3D. 427 */ 428 void (*CompressedTexImage3D)( GLcontext *ctx, GLenum target, 429 GLint level, GLint internalFormat, 430 GLsizei width, GLsizei height, GLsizei depth, 431 GLint border, 432 GLsizei imageSize, const GLvoid *data, 433 struct gl_texture_object *texObj, 434 struct gl_texture_image *texImage ); 435 436 /** 437 * Called by glCompressedTexSubImage1D(). 438 * 439 * \param target user specified. 440 * \param level user specified. 441 * \param xoffset user specified. 442 * \param yoffset user specified. 443 * \param zoffset user specified. 444 * \param width user specified. 445 * \param height user specified. 446 * \param depth user specified. 447 * \param imageSize user specified. 448 * \param data user specified. 449 * \param texObj is the target texture object. 450 * \param texImage is the target texture image. It will have the texture \p 451 * width, \p height, \p depth, \p border and \p internalFormat information. 452 */ 453 void (*CompressedTexSubImage1D)(GLcontext *ctx, GLenum target, GLint level, 454 GLint xoffset, GLsizei width, 455 GLenum format, 456 GLsizei imageSize, const GLvoid *data, 457 struct gl_texture_object *texObj, 458 struct gl_texture_image *texImage); 459 /** 460 * Called by glCompressedTexSubImage2D(). 461 * 462 * \sa dd_function_table::CompressedTexImage3D. 463 */ 464 void (*CompressedTexSubImage2D)(GLcontext *ctx, GLenum target, GLint level, 465 GLint xoffset, GLint yoffset, 466 GLsizei width, GLint height, 467 GLenum format, 468 GLsizei imageSize, const GLvoid *data, 469 struct gl_texture_object *texObj, 470 struct gl_texture_image *texImage); 471 /** 472 * Called by glCompressedTexSubImage3D(). 473 * 474 * \sa dd_function_table::CompressedTexImage3D. 475 */ 476 void (*CompressedTexSubImage3D)(GLcontext *ctx, GLenum target, GLint level, 477 GLint xoffset, GLint yoffset, GLint zoffset, 478 GLsizei width, GLint height, GLint depth, 479 GLenum format, 480 GLsizei imageSize, const GLvoid *data, 481 struct gl_texture_object *texObj, 482 struct gl_texture_image *texImage); 483 /** 484 * Called to validate a certain compressed format. 485 */ 486 GLboolean (*IsCompressedFormat)( GLcontext *ctx, GLenum internalFormat ); 487 /** 488 * Called to get bytes of storage needed for the given texture size and 489 * compressed format. 490 */ 491 GLuint (*CompressedTextureSize)( GLcontext *ctx, 492 GLsizei width, GLsizei height, GLsizei depth, 493 GLenum format ); 494 /*@}*/ 495 496 /** 497 * \name Texture object functions 498 */ 499 /*@{*/ 500 501 /** 502 * Called by glBindTexture(). 503 */ 504 void (*BindTexture)( GLcontext *ctx, GLenum target, 505 struct gl_texture_object *tObj ); 506 507 /** 508 * Called when a texture object is created. 509 */ 510 void (*CreateTexture)( GLcontext *ctx, struct gl_texture_object *tObj ); 511 512 /** 513 * Called to allocate a new texture object. 514 * 515 * \note This function pointer should be initialized by drivers \e before 516 * calling _mesa_initialize_context() since context initialization involves 517 * allocating some texture objects! 518 */ 519 struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name, 520 GLenum target ); 521 /** 522 * Called when a texture object is about to be deallocated. 523 * 524 * Driver should free anything attached to the DriverData pointers. 525 */ 526 void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj ); 527 528 /** 529 * Called to allocate a new texture image object. 530 */ 531 struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx ); 532 533 /** 534 * Called by glAreTextureResident(). 535 */ 536 GLboolean (*IsTextureResident)( GLcontext *ctx, 537 struct gl_texture_object *t ); 538 539 /** 540 * Called by glPrioritizeTextures(). 541 */ 542 void (*PrioritizeTexture)( GLcontext *ctx, struct gl_texture_object *t, 543 GLclampf priority ); 544 545 /** 546 * Called by glActiveTextureARB() to set current texture unit. 547 */ 548 void (*ActiveTexture)( GLcontext *ctx, GLuint texUnitNumber ); 549 550 /** 551 * Called when the texture's color lookup table is changed. 552 * 553 * If \p tObj is NULL then the shared texture palette 554 * gl_texture_object::Palette is to be updated. 555 */ 556 void (*UpdateTexturePalette)( GLcontext *ctx, 557 struct gl_texture_object *tObj ); 558 /*@}*/ 559 560 561 /** 562 * \name Imaging functionality 563 */ 564 /*@{*/ 565 void (*CopyColorTable)( GLcontext *ctx, 566 GLenum target, GLenum internalformat, 567 GLint x, GLint y, GLsizei width ); 568 569 void (*CopyColorSubTable)( GLcontext *ctx, 570 GLenum target, GLsizei start, 571 GLint x, GLint y, GLsizei width ); 572 573 void (*CopyConvolutionFilter1D)( GLcontext *ctx, GLenum target, 574 GLenum internalFormat, 575 GLint x, GLint y, GLsizei width ); 576 577 void (*CopyConvolutionFilter2D)( GLcontext *ctx, GLenum target, 578 GLenum internalFormat, 579 GLint x, GLint y, 580 GLsizei width, GLsizei height ); 581 /*@}*/ 582 583 584 /** 585 * \name State-changing functions. 586 * 587 * \note drawing functions are above. 588 * 589 * These functions are called by their corresponding OpenGL API functions. 590 * They are \e also called by the gl_PopAttrib() function!!! 591 * May add more functions like these to the device driver in the future. 592 */ 593 /*@{*/ 594 /** Specify the alpha test function */ 595 void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref); 596 /** Set the blend color */ 597 void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]); 598 /** Set the blend equation */ 599 void (*BlendEquation)(GLcontext *ctx, GLenum mode); 600 /** Specify pixel arithmetic */ 601 void (*BlendFunc)(GLcontext *ctx, GLenum sfactor, GLenum dfactor); 602 void (*BlendFuncSeparate)(GLcontext *ctx, 603 GLenum sfactorRGB, GLenum dfactorRGB, 604 GLenum sfactorA, GLenum dfactorA); 605 /** Specify clear values for the color buffers */ 606 void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]); 607 /** Specify the clear value for the depth buffer */ 608 void (*ClearDepth)(GLcontext *ctx, GLclampd d); 609 /** Specify the clear value for the color index buffers */ 610 void (*ClearIndex)(GLcontext *ctx, GLuint index); 611 /** Specify the clear value for the stencil buffer */ 612 void (*ClearStencil)(GLcontext *ctx, GLint s); 613 /** Specify a plane against which all geometry is clipped */ 614 void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation ); 615 /** Enable and disable writing of frame buffer color components */ 616 void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask, 617 GLboolean bmask, GLboolean amask ); 618 /** Cause a material color to track the current color */ 619 void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode); 620 /** Specify whether front- or back-facing facets can be culled */ 621 void (*CullFace)(GLcontext *ctx, GLenum mode); 622 /** Define front- and back-facing polygons */ 623 void (*FrontFace)(GLcontext *ctx, GLenum mode); 624 /** Specify the value used for depth buffer comparisons */ 625 void (*DepthFunc)(GLcontext *ctx, GLenum func); 626 /** Enable or disable writing into the depth buffer */ 627 void (*DepthMask)(GLcontext *ctx, GLboolean flag); 628 /** Specify mapping of depth values from normalized device coordinates to window coordinates */ 629 void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval); 630 /** Enable or disable server-side gl capabilities */ 631 void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state); 632 /** Specify fog parameters */ 633 void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params); 634 /** Specify implementation-specific hints */ 635 void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode); 636 /** Control the writing of individual bits in the color index buffers */ 637 void (*IndexMask)(GLcontext *ctx, GLuint mask); 638 /** Set light source parameters */ 639 void (*Lightfv)(GLcontext *ctx, GLenum light, 640 GLenum pname, const GLfloat *params ); 641 /** Set the lighting model parameters */ 642 void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params); 643 /** Specify the line stipple pattern */ 644 void (*LineStipple)(GLcontext *ctx, GLint factor, GLushort pattern ); 645 /** Specify the width of rasterized lines */ 646 void (*LineWidth)(GLcontext *ctx, GLfloat width); 647 /** Specify a logical pixel operation for color index rendering */ 648 void (*LogicOpcode)(GLcontext *ctx, GLenum opcode); 649 void (*PointParameterfv)(GLcontext *ctx, GLenum pname, 650 const GLfloat *params); 651 /** Specify the diameter of rasterized points */ 652 void (*PointSize)(GLcontext *ctx, GLfloat size); 653 /** Select a polygon rasterization mode */ 654 void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode); 655 /** Set the scale and units used to calculate depth values */ 656 void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units); 657 /** Set the polygon stippling pattern */ 658 void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask ); 659 /** Set rasterization mode */ 660 void (*RenderMode)(GLcontext *ctx, GLenum mode ); 661 /** Define the scissor box */ 662 void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); 663 /** Select flat or smooth shading */ 664 void (*ShadeModel)(GLcontext *ctx, GLenum mode); 665 /** Set function and reference value for stencil testing */ 666 void (*StencilFunc)(GLcontext *ctx, GLenum func, GLint ref, GLuint mask); 667 /** Control the writing of individual bits in the stencil planes */ 668 void (*StencilMask)(GLcontext *ctx, GLuint mask); 669 /** Set stencil test actions */ 670 void (*StencilOp)(GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass); 671 void (*ActiveStencilFace)(GLcontext *ctx, GLuint face); 672 /** Control the generation of texture coordinates */ 673 void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname, 674 const GLfloat *params); 675 /** Set texture environment parameters */ 676 void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname, 677 const GLfloat *param); 678 /** Set texture parameters */ 679 void (*TexParameter)(GLcontext *ctx, GLenum target, 680 struct gl_texture_object *texObj, 681 GLenum pname, const GLfloat *params); 682 void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat); 683 /** Set the viewport */ 684 void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); 685 /*@}*/ 686 687 688 /** 689 * \name Vertex array functions 690 * 691 * Called by the corresponding OpenGL functions. 692 */ 693 /*@{*/ 694 void (*VertexPointer)(GLcontext *ctx, GLint size, GLenum type, 695 GLsizei stride, const GLvoid *ptr); 696 void (*NormalPointer)(GLcontext *ctx, GLenum type, 697 GLsizei stride, const GLvoid *ptr); 698 void (*ColorPointer)(GLcontext *ctx, GLint size, GLenum type, 699 GLsizei stride, const GLvoid *ptr); 700 void (*FogCoordPointer)(GLcontext *ctx, GLenum type, 701 GLsizei stride, const GLvoid *ptr); 702 void (*IndexPointer)(GLcontext *ctx, GLenum type, 703 GLsizei stride, const GLvoid *ptr); 704 void (*SecondaryColorPointer)(GLcontext *ctx, GLint size, GLenum type, 705 GLsizei stride, const GLvoid *ptr); 706 void (*TexCoordPointer)(GLcontext *ctx, GLint size, GLenum type, 707 GLsizei stride, const GLvoid *ptr); 708 void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr); 709 void (*VertexAttribPointer)(GLcontext *ctx, GLuint index, GLint size, 710 GLenum type, GLsizei stride, const GLvoid *ptr); 711 /*@}*/ 712 713 714 /** 715 * \name State-query functions 716 * 717 * Return GL_TRUE if query was completed, GL_FALSE otherwise. 718 */ 719 /*@{*/ 720 /** Return the value or values of a selected parameter */ 721 GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result); 722 /** Return the value or values of a selected parameter */ 723 GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result); 724 /** Return the value or values of a selected parameter */ 725 GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result); 726 /** Return the value or values of a selected parameter */ 727 GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result); 728 /** Return the value or values of a selected parameter */ 729 GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result); 730 /*@}*/ 731 732 733 /** 734 * \name Vertex buffer object functions 735 */ 736#if FEATURE_ARB_vertex_buffer_object 737 /*@{*/ 738 void (*BindBuffer)( GLcontext *ctx, GLenum target, 739 struct gl_buffer_object *obj ); 740 741 struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer, 742 GLenum target ); 743 744 void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj ); 745 746 void (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size, 747 const GLvoid *data, GLenum usage, 748 struct gl_buffer_object *obj ); 749 750 void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset, 751 GLsizeiptrARB size, const GLvoid *data, 752 struct gl_buffer_object *obj ); 753 754 void (*GetBufferSubData)( GLcontext *ctx, GLenum target, 755 GLintptrARB offset, GLsizeiptrARB size, 756 GLvoid *data, struct gl_buffer_object *obj ); 757 758 void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access, 759 struct gl_buffer_object *obj ); 760 761 GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target, 762 struct gl_buffer_object *obj ); 763 /*@}*/ 764#endif 765 766 /** 767 * \name Support for multiple T&L engines 768 */ 769 /*@{*/ 770 771 /** 772 * Bitmask of state changes that require the current T&L module to be 773 * validated, using ValidateTnlModule() below. 774 */ 775 GLuint NeedValidate; 776 777 /** 778 * Validate the current T&L module. 779 * 780 * This is called directly after UpdateState() when a state change that has 781 * occurred matches the dd_function_table::NeedValidate bitmask above. This 782 * ensures all computed values are up to date, thus allowing the driver to 783 * decide if the current T&L module needs to be swapped out. 784 * 785 * This must be non-NULL if a driver installs a custom T&L module and sets 786 * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise. 787 */ 788 void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state ); 789 790 791#define PRIM_OUTSIDE_BEGIN_END GL_POLYGON+1 792#define PRIM_INSIDE_UNKNOWN_PRIM GL_POLYGON+2 793#define PRIM_UNKNOWN GL_POLYGON+3 794 795 /** 796 * Set by the driver-supplied T&L engine. 797 * 798 * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). 799 */ 800 GLuint CurrentExecPrimitive; 801 802 /** 803 * Current state of an in-progress compilation. 804 * 805 * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END, 806 * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above. 807 */ 808 GLuint CurrentSavePrimitive; 809 810 811#define FLUSH_STORED_VERTICES 0x1 812#define FLUSH_UPDATE_CURRENT 0x2 813 /** 814 * Set by the driver-supplied T&L engine whenever vertices are buffered 815 * between glBegin()/glEnd() objects or __GLcontextRec::Current is not 816 * updated. 817 * 818 * The dd_function_table::FlushVertices call below may be used to resolve 819 * these conditions. 820 */ 821 GLuint NeedFlush; 822 823 /** 824 * If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if 825 * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered 826 * vertices, if FLUSH_UPDATE_CURRENT bit is set updates 827 * __GLcontextRec::Current and gl_light_attrib::Material 828 * 829 * Note that the default T&L engine never clears the 830 * FLUSH_UPDATE_CURRENT bit, even after performing the update. 831 */ 832 void (*FlushVertices)( GLcontext *ctx, GLuint flags ); 833 834 /** 835 * Notify driver that the special derived value _NeedEyeCoords has 836 * changed. 837 */ 838 void (*LightingSpaceChange)( GLcontext *ctx ); 839 840 /** 841 * Called by glNewList(). 842 * 843 * Let the T&L component know what is going on with display lists 844 * in time to make changes to dispatch tables, etc. 845 */ 846 void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode ); 847 /** 848 * Called by glEndList(). 849 * 850 * \sa dd_function_table::NewList. 851 */ 852 void (*EndList)( GLcontext *ctx ); 853 854 /** 855 * Called by glCallList(s), but not recursively. 856 * 857 * Notify the T&L component before and after calling a display list. 858 * Called by glCallList(s), but not recursively. 859 */ 860 void (*BeginCallList)( GLcontext *ctx, GLuint list ); 861 /** 862 * Called by glEndCallList(). 863 * 864 * \sa dd_function_table::BeginCallList. 865 */ 866 void (*EndCallList)( GLcontext *ctx ); 867 868 /** 869 * Let the T&L component know when the context becomes current. 870 */ 871 void (*MakeCurrent)( GLcontext *ctx, GLframebuffer *drawBuffer, 872 GLframebuffer *readBuffer ); 873 874 /** 875 * Called by glLockArraysEXT(). 876 */ 877 void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count ); 878 /** 879 * Called by UnlockArraysEXT(). 880 */ 881 void (*UnlockArraysEXT)( GLcontext *ctx ); 882 /*@}*/ 883 884}; 885 886 887/** 888 * Transform/Clip/Lighting interface 889 * 890 * Drivers present a reduced set of the functions possible in 891 * glBegin()/glEnd() objects. Core mesa provides translation stubs for the 892 * remaining functions to map down to these entry points. 893 * 894 * These are the initial values to be installed into dispatch by 895 * mesa. If the T&L driver wants to modify the dispatch table 896 * while installed, it must do so itself. It would be possible for 897 * the vertexformat to install it's own initial values for these 898 * functions, but this way there is an obvious list of what is 899 * expected of the driver. 900 * 901 * If the driver wants to hook in entry points other than those 902 * listed, it must restore them to their original values in 903 * the disable() callback, below. 904 */ 905typedef struct { 906 /** 907 * \name Vertex 908 */ 909 /*@{*/ 910 void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */ 911 void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); 912 void (GLAPIENTRYP Color3fv)( const GLfloat * ); 913 void (GLAPIENTRYP Color3ub)( GLubyte, GLubyte, GLubyte ); 914 void (GLAPIENTRYP Color3ubv)( const GLubyte * ); 915 void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 916 void (GLAPIENTRYP Color4fv)( const GLfloat * ); 917 void (GLAPIENTRYP Color4ub)( GLubyte, GLubyte, GLubyte, GLubyte ); 918 void (GLAPIENTRYP Color4ubv)( const GLubyte * ); 919 void (GLAPIENTRYP EdgeFlag)( GLboolean ); 920 void (GLAPIENTRYP EdgeFlagv)( const GLboolean * ); 921 void (GLAPIENTRYP EvalCoord1f)( GLfloat ); /* NOTE */ 922 void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */ 923 void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */ 924 void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */ 925 void (GLAPIENTRYP EvalPoint1)( GLint ); /* NOTE */ 926 void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); /* NOTE */ 927 void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); 928 void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); 929 void (GLAPIENTRYP Indexi)( GLint ); 930 void (GLAPIENTRYP Indexiv)( const GLint * ); 931 void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */ 932 void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); 933 void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); 934 void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); 935 void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); 936 void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); 937 void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); 938 void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); 939 void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); 940 void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); 941 void (GLAPIENTRYP Normal3fv)( const GLfloat * ); 942 void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); 943 void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); 944 void (GLAPIENTRYP SecondaryColor3ubEXT)( GLubyte, GLubyte, GLubyte ); 945 void (GLAPIENTRYP SecondaryColor3ubvEXT)( const GLubyte * ); 946 void (GLAPIENTRYP TexCoord1f)( GLfloat ); 947 void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); 948 void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); 949 void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); 950 void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); 951 void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); 952 void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 953 void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); 954 void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); 955 void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); 956 void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); 957 void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); 958 void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 959 void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); 960 void (GLAPIENTRYP CallList)( GLuint ); /* NOTE */ 961 void (GLAPIENTRYP Begin)( GLenum ); 962 void (GLAPIENTRYP End)( void ); 963 void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 964 void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); 965 /*@}*/ 966 967 /* 968 */ 969 void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat ); 970 971 /** 972 * \name Array 973 * 974 * These may or may not belong here. Heuristic: if an array is 975 * enabled, the installed vertex format should support that array and 976 * its current size natively. 977 */ 978 /*@{*/ 979 void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count ); 980 void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type, 981 const GLvoid *indices ); 982 void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start, 983 GLuint end, GLsizei count, 984 GLenum type, const GLvoid *indices ); 985 /*@}*/ 986 987 /** 988 * \name Eval 989 * 990 * If you don't support eval, fallback to the default vertex format 991 * on receiving an eval call and use the pipeline mechanism to 992 * provide partial T&L acceleration. 993 * 994 * Mesa will provide a set of helper functions to do eval within 995 * accelerated vertex formats, eventually... 996 */ 997 /*@{*/ 998 void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 ); 999 void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); 1000 /*@}*/ 1001 1002 /** 1003 * Should core try to send colors to glColor4f or glColor4chan, 1004 * where it has a choice? 1005 */ 1006 GLboolean prefer_float_colors; 1007} GLvertexformat; 1008 1009 1010#endif /* DD_INCLUDED */ 1011