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