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