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