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 #include "glheader.h" 35 #include "formats.h" 36 #include "menums.h" 37 #include "compiler/shader_enums.h" 38 39 struct gl_bitmap_atlas; 40 struct gl_buffer_object; 41 struct gl_context; 42 struct gl_display_list; 43 struct gl_framebuffer; 44 struct gl_image_unit; 45 struct gl_pixelstore_attrib; 46 struct gl_program; 47 struct gl_renderbuffer; 48 struct gl_renderbuffer_attachment; 49 struct gl_shader; 50 struct gl_shader_program; 51 struct gl_texture_image; 52 struct gl_texture_object; 53 struct gl_memory_info; 54 struct gl_transform_feedback_object; 55 struct ati_fragment_shader; 56 struct util_queue_monitoring; 57 struct _mesa_prim; 58 struct _mesa_index_buffer; 59 60 /* GL_ARB_vertex_buffer_object */ 61 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return 62 * NULL) if buffer is unavailable for immediate mapping. 63 * 64 * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it 65 * would require more book-keeping in the driver than seems necessary 66 * at this point. 67 * 68 * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't 69 * want to provoke the driver to throw away the old storage, we will 70 * respect the contents of already referenced data. 71 */ 72 #define MESA_MAP_NOWAIT_BIT 0x4000 73 74 /* Mapping a buffer is allowed from any thread. */ 75 #define MESA_MAP_THREAD_SAFE_BIT 0x8000 76 77 78 /** 79 * Device driver function table. 80 * Core Mesa uses these function pointers to call into device drivers. 81 * Most of these functions directly correspond to OpenGL state commands. 82 * Core Mesa will call these functions after error checking has been done 83 * so that the drivers don't have to worry about error testing. 84 * 85 * Vertex transformation/clipping/lighting is patched into the T&L module. 86 * Rasterization functions are patched into the swrast module. 87 * 88 * Note: when new functions are added here, the drivers/common/driverfuncs.c 89 * file should be updated too!!! 90 */ 91 struct dd_function_table { 92 /** 93 * Return a string as needed by glGetString(). 94 * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be 95 * returned. 96 */ 97 const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name ); 98 99 /** 100 * Notify the driver after Mesa has made some internal state changes. 101 * 102 * This is in addition to any state change callbacks Mesa may already have 103 * made. 104 */ 105 void (*UpdateState)(struct gl_context *ctx); 106 107 /** 108 * This is called whenever glFinish() is called. 109 */ 110 void (*Finish)( struct gl_context *ctx ); 111 112 /** 113 * This is called whenever glFlush() is called. 114 */ 115 void (*Flush)( struct gl_context *ctx ); 116 117 /** 118 * Clear the color/depth/stencil/accum buffer(s). 119 * \param buffers a bitmask of BUFFER_BIT_* flags indicating which 120 * renderbuffers need to be cleared. 121 */ 122 void (*Clear)( struct gl_context *ctx, GLbitfield buffers ); 123 124 /** 125 * Execute glRasterPos, updating the ctx->Current.Raster fields 126 */ 127 void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] ); 128 129 /** 130 * \name Image-related functions 131 */ 132 /*@{*/ 133 134 /** 135 * Called by glDrawPixels(). 136 * \p unpack describes how to unpack the source image data. 137 */ 138 void (*DrawPixels)( 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 const GLvoid *pixels ); 143 144 /** 145 * Called by glReadPixels(). 146 */ 147 void (*ReadPixels)( struct gl_context *ctx, 148 GLint x, GLint y, GLsizei width, GLsizei height, 149 GLenum format, GLenum type, 150 const struct gl_pixelstore_attrib *unpack, 151 GLvoid *dest ); 152 153 /** 154 * Called by glCopyPixels(). 155 */ 156 void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy, 157 GLsizei width, GLsizei height, 158 GLint dstx, GLint dsty, GLenum type ); 159 160 /** 161 * Called by glBitmap(). 162 */ 163 void (*Bitmap)( struct gl_context *ctx, 164 GLint x, GLint y, GLsizei width, GLsizei height, 165 const struct gl_pixelstore_attrib *unpack, 166 const GLubyte *bitmap ); 167 168 /** 169 * Called by display list code for optimized glCallLists/glBitmap rendering 170 * The driver must support texture rectangles of width 1024 or more. 171 */ 172 void (*DrawAtlasBitmaps)(struct gl_context *ctx, 173 const struct gl_bitmap_atlas *atlas, 174 GLuint count, const GLubyte *ids); 175 /*@}*/ 176 177 178 /** 179 * \name Texture image functions 180 */ 181 /*@{*/ 182 183 /** 184 * Choose actual hardware texture format given the texture target, the 185 * user-provided source image format and type and the desired internal 186 * format. In some cases, srcFormat and srcType can be GL_NONE. 187 * Note: target may be GL_TEXTURE_CUBE_MAP, but never 188 * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ]. 189 * Called by glTexImage(), etc. 190 */ 191 mesa_format (*ChooseTextureFormat)(struct gl_context *ctx, 192 GLenum target, GLint internalFormat, 193 GLenum srcFormat, GLenum srcType ); 194 195 /** 196 * Queries different driver parameters for a particular target and format. 197 * Since ARB_internalformat_query2 introduced several new query parameters 198 * over ARB_internalformat_query, having one driver hook for each parameter 199 * is no longer feasible. So this is the generic entry-point for calls 200 * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has 201 * checked errors and default values. 202 * 203 * \param ctx GL context 204 * \param target GL target enum 205 * \param internalFormat GL format enum 206 * \param pname GL enum that specifies the info to query. 207 * \param params Buffer to hold the result of the query. 208 */ 209 void (*QueryInternalFormat)(struct gl_context *ctx, 210 GLenum target, 211 GLenum internalFormat, 212 GLenum pname, 213 GLint *params); 214 215 /** 216 * Called by glTexImage[123]D() and glCopyTexImage[12]D() 217 * Allocate texture memory and copy the user's image to the buffer. 218 * The gl_texture_image fields, etc. will be fully initialized. 219 * The parameters are the same as glTexImage3D(), plus: 220 * \param dims 1, 2, or 3 indicating glTexImage1/2/3D() 221 * \param packing describes how to unpack the source data. 222 * \param texImage is the destination texture image. 223 */ 224 void (*TexImage)(struct gl_context *ctx, GLuint dims, 225 struct gl_texture_image *texImage, 226 GLenum format, GLenum type, const GLvoid *pixels, 227 const struct gl_pixelstore_attrib *packing); 228 229 /** 230 * Called by glTexSubImage[123]D(). 231 * Replace a subset of the target texture with new texel data. 232 */ 233 void (*TexSubImage)(struct gl_context *ctx, GLuint dims, 234 struct gl_texture_image *texImage, 235 GLint xoffset, GLint yoffset, GLint zoffset, 236 GLsizei width, GLsizei height, GLint depth, 237 GLenum format, GLenum type, 238 const GLvoid *pixels, 239 const struct gl_pixelstore_attrib *packing); 240 241 242 /** 243 * Called by glGetTexImage(), glGetTextureSubImage(). 244 */ 245 void (*GetTexSubImage)(struct gl_context *ctx, 246 GLint xoffset, GLint yoffset, GLint zoffset, 247 GLsizei width, GLsizei height, GLsizei depth, 248 GLenum format, GLenum type, GLvoid *pixels, 249 struct gl_texture_image *texImage); 250 251 /** 252 * Called by glClearTex[Sub]Image 253 * 254 * Clears a rectangular region of the image to a given value. The 255 * clearValue argument is either NULL or points to a single texel to use as 256 * the clear value in the same internal format as the texture image. If it 257 * is NULL then the texture should be cleared to zeroes. 258 */ 259 void (*ClearTexSubImage)(struct gl_context *ctx, 260 struct gl_texture_image *texImage, 261 GLint xoffset, GLint yoffset, GLint zoffset, 262 GLsizei width, GLsizei height, GLsizei depth, 263 const GLvoid *clearValue); 264 265 /** 266 * Called by glCopyTex[Sub]Image[123]D(). 267 * 268 * This function should copy a rectangular region in the rb to a single 269 * destination slice, specified by @slice. In the case of 1D array 270 * textures (where one GL call can potentially affect multiple destination 271 * slices), core mesa takes care of calling this function multiple times, 272 * once for each scanline to be copied. 273 */ 274 void (*CopyTexSubImage)(struct gl_context *ctx, GLuint dims, 275 struct gl_texture_image *texImage, 276 GLint xoffset, GLint yoffset, GLint slice, 277 struct gl_renderbuffer *rb, 278 GLint x, GLint y, 279 GLsizei width, GLsizei height); 280 /** 281 * Called by glCopyImageSubData(). 282 * 283 * This function should copy one 2-D slice from src_teximage or 284 * src_renderbuffer to dst_teximage or dst_renderbuffer. Either the 285 * teximage or renderbuffer pointer will be non-null to indicate which 286 * is the real src/dst. 287 * 288 * If one of the textures is 3-D or is a 1-D or 2-D array 289 * texture, this function will be called multiple times: once for each 290 * slice. If one of the textures is a cube map, this function will be 291 * called once for each face to be copied. 292 */ 293 void (*CopyImageSubData)(struct gl_context *ctx, 294 struct gl_texture_image *src_teximage, 295 struct gl_renderbuffer *src_renderbuffer, 296 int src_x, int src_y, int src_z, 297 struct gl_texture_image *dst_teximage, 298 struct gl_renderbuffer *dst_renderbuffer, 299 int dst_x, int dst_y, int dst_z, 300 int src_width, int src_height); 301 302 /** 303 * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled. 304 * Note that if the texture is a cube map, the <target> parameter will 305 * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z). 306 * texObj->BaseLevel is the level from which to generate the remaining 307 * mipmap levels. 308 */ 309 void (*GenerateMipmap)(struct gl_context *ctx, GLenum target, 310 struct gl_texture_object *texObj); 311 312 /** 313 * Called by glTexImage, glCompressedTexImage, glCopyTexImage 314 * and glTexStorage to check if the dimensions of the texture image 315 * are too large. 316 * \param target any GL_PROXY_TEXTURE_x target 317 * \return GL_TRUE if the image is OK, GL_FALSE if too large 318 */ 319 GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target, 320 GLuint numLevels, GLint level, 321 mesa_format format, GLuint numSamples, 322 GLint width, GLint height, 323 GLint depth); 324 /*@}*/ 325 326 327 /** 328 * \name Compressed texture functions 329 */ 330 /*@{*/ 331 332 /** 333 * Called by glCompressedTexImage[123]D(). 334 */ 335 void (*CompressedTexImage)(struct gl_context *ctx, GLuint dims, 336 struct gl_texture_image *texImage, 337 GLsizei imageSize, const GLvoid *data); 338 339 /** 340 * Called by glCompressedTexSubImage[123]D(). 341 */ 342 void (*CompressedTexSubImage)(struct gl_context *ctx, GLuint dims, 343 struct gl_texture_image *texImage, 344 GLint xoffset, GLint yoffset, GLint zoffset, 345 GLsizei width, GLsizei height, GLsizei depth, 346 GLenum format, 347 GLsizei imageSize, const GLvoid *data); 348 /*@}*/ 349 350 /** 351 * \name Texture object / image functions 352 */ 353 /*@{*/ 354 355 /** 356 * Called by glBindTexture() and glBindTextures(). 357 */ 358 void (*BindTexture)( struct gl_context *ctx, GLuint texUnit, 359 GLenum target, struct gl_texture_object *tObj ); 360 361 /** 362 * Called to allocate a new texture object. Drivers will usually 363 * allocate/return a subclass of gl_texture_object. 364 */ 365 struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx, 366 GLuint name, GLenum target); 367 /** 368 * Called to delete/free a texture object. Drivers should free the 369 * object and any image data it contains. 370 */ 371 void (*DeleteTexture)(struct gl_context *ctx, 372 struct gl_texture_object *texObj); 373 374 /** 375 * Called to notify that texture is removed from ctx->Shared->TexObjects 376 */ 377 void (*TextureRemovedFromShared)(struct gl_context *ctx, 378 struct gl_texture_object *texObj); 379 380 /** Called to allocate a new texture image object. */ 381 struct gl_texture_image * (*NewTextureImage)(struct gl_context *ctx); 382 383 /** Called to free a texture image object returned by NewTextureImage() */ 384 void (*DeleteTextureImage)(struct gl_context *ctx, 385 struct gl_texture_image *); 386 387 /** Called to allocate memory for a single texture image */ 388 GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx, 389 struct gl_texture_image *texImage); 390 391 /** Free the memory for a single texture image */ 392 void (*FreeTextureImageBuffer)(struct gl_context *ctx, 393 struct gl_texture_image *texImage); 394 395 /** Map a slice of a texture image into user space. 396 * Note: for GL_TEXTURE_1D_ARRAY, height must be 1, y must be 0 and slice 397 * indicates the 1D array index. 398 * \param texImage the texture image 399 * \param slice the 3D image slice or array texture slice 400 * \param x, y, w, h region of interest 401 * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and 402 * GL_MAP_INVALIDATE_RANGE_BIT (if writing) 403 * \param mapOut returns start of mapping of region of interest 404 * \param rowStrideOut returns row stride (in bytes). In the case of a 405 * compressed texture, this is the byte stride between one row of blocks 406 * and another. 407 */ 408 void (*MapTextureImage)(struct gl_context *ctx, 409 struct gl_texture_image *texImage, 410 GLuint slice, 411 GLuint x, GLuint y, GLuint w, GLuint h, 412 GLbitfield mode, 413 GLubyte **mapOut, GLint *rowStrideOut); 414 415 void (*UnmapTextureImage)(struct gl_context *ctx, 416 struct gl_texture_image *texImage, 417 GLuint slice); 418 419 /** For GL_ARB_texture_storage. Allocate memory for whole mipmap stack. 420 * All the gl_texture_images in the texture object will have their 421 * dimensions, format, etc. initialized already. 422 */ 423 GLboolean (*AllocTextureStorage)(struct gl_context *ctx, 424 struct gl_texture_object *texObj, 425 GLsizei levels, GLsizei width, 426 GLsizei height, GLsizei depth); 427 428 /** Called as part of glTextureView to add views to origTexObj */ 429 GLboolean (*TextureView)(struct gl_context *ctx, 430 struct gl_texture_object *texObj, 431 struct gl_texture_object *origTexObj); 432 433 /** 434 * Map a renderbuffer into user space. 435 * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and 436 * GL_MAP_INVALIDATE_RANGE_BIT (if writing) 437 */ 438 void (*MapRenderbuffer)(struct gl_context *ctx, 439 struct gl_renderbuffer *rb, 440 GLuint x, GLuint y, GLuint w, GLuint h, 441 GLbitfield mode, 442 GLubyte **mapOut, GLint *rowStrideOut, 443 bool flip_y); 444 445 void (*UnmapRenderbuffer)(struct gl_context *ctx, 446 struct gl_renderbuffer *rb); 447 448 /** 449 * Optional driver entrypoint that binds a non-texture renderbuffer's 450 * contents to a texture image. 451 */ 452 GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx, 453 struct gl_renderbuffer *rb, 454 struct gl_texture_image *texImage); 455 /*@}*/ 456 457 458 /** 459 * \name Vertex/fragment program functions 460 */ 461 /*@{*/ 462 /** Allocate a new program */ 463 struct gl_program * (*NewProgram)(struct gl_context *ctx, 464 gl_shader_stage stage, 465 GLuint id, bool is_arb_asm); 466 /** Delete a program */ 467 void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); 468 /** 469 * Allocate a program to associate with the new ATI fragment shader (optional) 470 */ 471 struct gl_program * (*NewATIfs)(struct gl_context *ctx, 472 struct ati_fragment_shader *curProg); 473 /** 474 * Notify driver that a program string (and GPU code) has been specified 475 * or modified. Return GL_TRUE or GL_FALSE to indicate if the program is 476 * supported by the driver. 477 */ 478 GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target, 479 struct gl_program *prog); 480 481 /** 482 * Notify driver that the sampler uniforms for the current program have 483 * changed. On some drivers, this may require shader recompiles. 484 */ 485 void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target, 486 struct gl_program *prog); 487 488 /** Query if program can be loaded onto hardware */ 489 GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target, 490 struct gl_program *prog); 491 492 /*@}*/ 493 494 /** 495 * \name GLSL shader/program functions. 496 */ 497 /*@{*/ 498 /** 499 * Called when a shader program is linked. 500 * 501 * This gives drivers an opportunity to clone the IR and make their 502 * own transformations on it for the purposes of code generation. 503 */ 504 GLboolean (*LinkShader)(struct gl_context *ctx, 505 struct gl_shader_program *shader); 506 /*@}*/ 507 508 509 /** 510 * \name Draw functions. 511 */ 512 /*@{*/ 513 /** 514 * For indirect array drawing: 515 * 516 * typedef struct { 517 * GLuint count; 518 * GLuint primCount; 519 * GLuint first; 520 * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise 521 * } DrawArraysIndirectCommand; 522 * 523 * For indirect indexed drawing: 524 * 525 * typedef struct { 526 * GLuint count; 527 * GLuint primCount; 528 * GLuint firstIndex; 529 * GLint baseVertex; 530 * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise 531 * } DrawElementsIndirectCommand; 532 */ 533 534 /** 535 * Draw a number of primitives. 536 * \param prims array [nr_prims] describing what to draw (prim type, 537 * vertex count, first index, instance count, etc). 538 * \param ib index buffer for indexed drawing, NULL for array drawing 539 * \param index_bounds_valid are min_index and max_index valid? 540 * \param min_index lowest vertex index used 541 * \param max_index highest vertex index used 542 * \param num_instances instance count from ARB_draw_instanced 543 * \param base_instance base instance from ARB_base_instance 544 * \param tfb_vertcount if non-null, indicates which transform feedback 545 * object has the vertex count. 546 * \param tfb_stream If called via DrawTransformFeedbackStream, specifies 547 * the vertex stream buffer from which to get the vertex 548 * count. 549 * \param indirect If any prims are indirect, this specifies the buffer 550 * to find the "DrawArrays/ElementsIndirectCommand" data. 551 * This may be deprecated in the future 552 */ 553 void (*Draw)(struct gl_context *ctx, 554 const struct _mesa_prim *prims, GLuint nr_prims, 555 const struct _mesa_index_buffer *ib, 556 GLboolean index_bounds_valid, 557 GLuint min_index, GLuint max_index, 558 GLuint num_instances, GLuint base_instance, 559 struct gl_transform_feedback_object *tfb_vertcount, 560 unsigned tfb_stream); 561 562 563 /** 564 * Draw a primitive, getting the vertex count, instance count, start 565 * vertex, etc. from a buffer object. 566 * \param mode GL_POINTS, GL_LINES, GL_TRIANGLE_STRIP, etc. 567 * \param indirect_data buffer to get "DrawArrays/ElementsIndirectCommand" 568 * data 569 * \param indirect_offset offset of first primitive in indrect_data buffer 570 * \param draw_count number of primitives to draw 571 * \param stride stride, in bytes, between 572 * "DrawArrays/ElementsIndirectCommand" objects 573 * \param indirect_draw_count_buffer if non-NULL specifies a buffer to get 574 * the real draw_count value. Used for 575 * GL_ARB_indirect_parameters. 576 * \param indirect_draw_count_offset offset to the draw_count value in 577 * indirect_draw_count_buffer 578 * \param ib index buffer for indexed drawing, NULL otherwise. 579 */ 580 void (*DrawIndirect)(struct gl_context *ctx, GLuint mode, 581 struct gl_buffer_object *indirect_data, 582 GLsizeiptr indirect_offset, unsigned draw_count, 583 unsigned stride, 584 struct gl_buffer_object *indirect_draw_count_buffer, 585 GLsizeiptr indirect_draw_count_offset, 586 const struct _mesa_index_buffer *ib); 587 /*@}*/ 588 589 590 /** 591 * \name State-changing functions. 592 * 593 * \note drawing functions are above. 594 * 595 * These functions are called by their corresponding OpenGL API functions. 596 * They are \e also called by the gl_PopAttrib() function!!! 597 * May add more functions like these to the device driver in the future. 598 */ 599 /*@{*/ 600 /** Specify the alpha test function */ 601 void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref); 602 /** Set the blend color */ 603 void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]); 604 /** Set the blend equation */ 605 void (*BlendEquationSeparate)(struct gl_context *ctx, 606 GLenum modeRGB, GLenum modeA); 607 /** Specify pixel arithmetic */ 608 void (*BlendFuncSeparate)(struct gl_context *ctx, 609 GLenum sfactorRGB, GLenum dfactorRGB, 610 GLenum sfactorA, GLenum dfactorA); 611 /** Specify a plane against which all geometry is clipped */ 612 void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq); 613 /** Enable and disable writing of frame buffer color components */ 614 void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask, 615 GLboolean bmask, GLboolean amask ); 616 /** Cause a material color to track the current color */ 617 void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode); 618 /** Specify whether front- or back-facing facets can be culled */ 619 void (*CullFace)(struct gl_context *ctx, GLenum mode); 620 /** Define front- and back-facing polygons */ 621 void (*FrontFace)(struct gl_context *ctx, GLenum mode); 622 /** Specify the value used for depth buffer comparisons */ 623 void (*DepthFunc)(struct gl_context *ctx, GLenum func); 624 /** Enable or disable writing into the depth buffer */ 625 void (*DepthMask)(struct gl_context *ctx, GLboolean flag); 626 /** Specify mapping of depth values from NDC to window coordinates */ 627 void (*DepthRange)(struct gl_context *ctx); 628 /** Specify the current buffer for writing */ 629 void (*DrawBuffer)(struct gl_context *ctx); 630 /** Used to allocated any buffers with on-demand creation */ 631 void (*DrawBufferAllocate)(struct gl_context *ctx); 632 /** Enable or disable server-side gl capabilities */ 633 void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); 634 /** Specify fog parameters */ 635 void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); 636 /** Set light source parameters. 637 * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already 638 * been transformed to eye-space. 639 */ 640 void (*Lightfv)(struct gl_context *ctx, GLenum light, 641 GLenum pname, const GLfloat *params ); 642 /** Set the lighting model parameters */ 643 void (*LightModelfv)(struct gl_context *ctx, GLenum pname, 644 const GLfloat *params); 645 /** Specify the line stipple pattern */ 646 void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern ); 647 /** Specify the width of rasterized lines */ 648 void (*LineWidth)(struct gl_context *ctx, GLfloat width); 649 /** Specify a logical pixel operation for color index rendering */ 650 void (*LogicOpcode)(struct gl_context *ctx, enum gl_logicop_mode opcode); 651 void (*PointParameterfv)(struct gl_context *ctx, GLenum pname, 652 const GLfloat *params); 653 /** Specify the diameter of rasterized points */ 654 void (*PointSize)(struct gl_context *ctx, GLfloat size); 655 /** Select a polygon rasterization mode */ 656 void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode); 657 /** Set the scale and units used to calculate depth values */ 658 void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp); 659 /** Set the polygon stippling pattern */ 660 void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask ); 661 /* Specifies the current buffer for reading */ 662 void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer ); 663 /** Set rasterization mode */ 664 void (*RenderMode)(struct gl_context *ctx, GLenum mode ); 665 /** Define the scissor box */ 666 void (*Scissor)(struct gl_context *ctx); 667 /** Select flat or smooth shading */ 668 void (*ShadeModel)(struct gl_context *ctx, GLenum mode); 669 /** OpenGL 2.0 two-sided StencilFunc */ 670 void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func, 671 GLint ref, GLuint mask); 672 /** OpenGL 2.0 two-sided StencilMask */ 673 void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask); 674 /** OpenGL 2.0 two-sided StencilOp */ 675 void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail, 676 GLenum zfail, GLenum zpass); 677 /** Control the generation of texture coordinates */ 678 void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname, 679 const GLfloat *params); 680 /** Set texture environment parameters */ 681 void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, 682 const GLfloat *param); 683 /** Set texture parameter (callee gets param value from the texObj) */ 684 void (*TexParameter)(struct gl_context *ctx, 685 struct gl_texture_object *texObj, GLenum pname); 686 /** Set the viewport */ 687 void (*Viewport)(struct gl_context *ctx); 688 /*@}*/ 689 690 691 /** 692 * \name Vertex/pixel buffer object functions 693 */ 694 /*@{*/ 695 struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx, 696 GLuint buffer); 697 698 void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); 699 700 GLboolean (*BufferData)(struct gl_context *ctx, GLenum target, 701 GLsizeiptrARB size, const GLvoid *data, GLenum usage, 702 GLenum storageFlags, struct gl_buffer_object *obj); 703 704 void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset, 705 GLsizeiptrARB size, const GLvoid *data, 706 struct gl_buffer_object *obj ); 707 708 void (*GetBufferSubData)( struct gl_context *ctx, 709 GLintptrARB offset, GLsizeiptrARB size, 710 GLvoid *data, struct gl_buffer_object *obj ); 711 712 void (*ClearBufferSubData)( struct gl_context *ctx, 713 GLintptr offset, GLsizeiptr size, 714 const GLvoid *clearValue, 715 GLsizeiptr clearValueSize, 716 struct gl_buffer_object *obj ); 717 718 void (*CopyBufferSubData)( struct gl_context *ctx, 719 struct gl_buffer_object *src, 720 struct gl_buffer_object *dst, 721 GLintptr readOffset, GLintptr writeOffset, 722 GLsizeiptr size ); 723 724 void (*InvalidateBufferSubData)( struct gl_context *ctx, 725 struct gl_buffer_object *obj, 726 GLintptr offset, 727 GLsizeiptr length ); 728 729 /* Returns pointer to the start of the mapped range. 730 * May return NULL if MESA_MAP_NOWAIT_BIT is set in access: 731 */ 732 void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset, 733 GLsizeiptr length, GLbitfield access, 734 struct gl_buffer_object *obj, 735 gl_map_buffer_index index); 736 737 void (*FlushMappedBufferRange)(struct gl_context *ctx, 738 GLintptr offset, GLsizeiptr length, 739 struct gl_buffer_object *obj, 740 gl_map_buffer_index index); 741 742 GLboolean (*UnmapBuffer)( struct gl_context *ctx, 743 struct gl_buffer_object *obj, 744 gl_map_buffer_index index); 745 /*@}*/ 746 747 /** 748 * \name Functions for GL_APPLE_object_purgeable 749 */ 750 /*@{*/ 751 /* variations on ObjectPurgeable */ 752 GLenum (*BufferObjectPurgeable)(struct gl_context *ctx, 753 struct gl_buffer_object *obj, GLenum option); 754 GLenum (*RenderObjectPurgeable)(struct gl_context *ctx, 755 struct gl_renderbuffer *obj, GLenum option); 756 GLenum (*TextureObjectPurgeable)(struct gl_context *ctx, 757 struct gl_texture_object *obj, 758 GLenum option); 759 760 /* variations on ObjectUnpurgeable */ 761 GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx, 762 struct gl_buffer_object *obj, 763 GLenum option); 764 GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx, 765 struct gl_renderbuffer *obj, 766 GLenum option); 767 GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx, 768 struct gl_texture_object *obj, 769 GLenum option); 770 /*@}*/ 771 772 /** 773 * \name Functions for GL_EXT_framebuffer_{object,blit,discard}. 774 */ 775 /*@{*/ 776 struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, 777 GLuint name); 778 struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, 779 GLuint name); 780 void (*BindFramebuffer)(struct gl_context *ctx, GLenum target, 781 struct gl_framebuffer *drawFb, 782 struct gl_framebuffer *readFb); 783 void (*FramebufferRenderbuffer)(struct gl_context *ctx, 784 struct gl_framebuffer *fb, 785 GLenum attachment, 786 struct gl_renderbuffer *rb); 787 void (*RenderTexture)(struct gl_context *ctx, 788 struct gl_framebuffer *fb, 789 struct gl_renderbuffer_attachment *att); 790 void (*FinishRenderTexture)(struct gl_context *ctx, 791 struct gl_renderbuffer *rb); 792 void (*ValidateFramebuffer)(struct gl_context *ctx, 793 struct gl_framebuffer *fb); 794 /*@}*/ 795 void (*BlitFramebuffer)(struct gl_context *ctx, 796 struct gl_framebuffer *readFb, 797 struct gl_framebuffer *drawFb, 798 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 799 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 800 GLbitfield mask, GLenum filter); 801 void (*DiscardFramebuffer)(struct gl_context *ctx, struct gl_framebuffer *fb, 802 struct gl_renderbuffer_attachment *att); 803 804 /** 805 * \name Functions for GL_ARB_sample_locations 806 */ 807 void (*GetProgrammableSampleCaps)(struct gl_context *ctx, 808 const struct gl_framebuffer *fb, 809 GLuint *bits, GLuint *width, GLuint *height); 810 void (*EvaluateDepthValues)(struct gl_context *ctx); 811 812 /** 813 * \name Query objects 814 */ 815 /*@{*/ 816 struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id); 817 void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q); 818 void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q); 819 void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q); 820 void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q); 821 void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q); 822 void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); 823 /* 824 * \pname the value requested to be written (GL_QUERY_RESULT, etc) 825 * \ptype the type of the value requested to be written: 826 * GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB, 827 * GL_INT, GL_INT64_ARB 828 */ 829 void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q, 830 struct gl_buffer_object *buf, intptr_t offset, 831 GLenum pname, GLenum ptype); 832 /*@}*/ 833 834 /** 835 * \name Performance monitors 836 */ 837 /*@{*/ 838 void (*InitPerfMonitorGroups)(struct gl_context *ctx); 839 struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); 840 void (*DeletePerfMonitor)(struct gl_context *ctx, 841 struct gl_perf_monitor_object *m); 842 GLboolean (*BeginPerfMonitor)(struct gl_context *ctx, 843 struct gl_perf_monitor_object *m); 844 845 /** Stop an active performance monitor, discarding results. */ 846 void (*ResetPerfMonitor)(struct gl_context *ctx, 847 struct gl_perf_monitor_object *m); 848 void (*EndPerfMonitor)(struct gl_context *ctx, 849 struct gl_perf_monitor_object *m); 850 GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx, 851 struct gl_perf_monitor_object *m); 852 void (*GetPerfMonitorResult)(struct gl_context *ctx, 853 struct gl_perf_monitor_object *m, 854 GLsizei dataSize, 855 GLuint *data, 856 GLint *bytesWritten); 857 /*@}*/ 858 859 /** 860 * \name Performance Query objects 861 */ 862 /*@{*/ 863 unsigned (*InitPerfQueryInfo)(struct gl_context *ctx); 864 void (*GetPerfQueryInfo)(struct gl_context *ctx, 865 unsigned queryIndex, 866 const char **name, 867 GLuint *dataSize, 868 GLuint *numCounters, 869 GLuint *numActive); 870 void (*GetPerfCounterInfo)(struct gl_context *ctx, 871 unsigned queryIndex, 872 unsigned counterIndex, 873 const char **name, 874 const char **desc, 875 GLuint *offset, 876 GLuint *data_size, 877 GLuint *type_enum, 878 GLuint *data_type_enum, 879 GLuint64 *raw_max); 880 struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx, 881 unsigned queryIndex); 882 void (*DeletePerfQuery)(struct gl_context *ctx, 883 struct gl_perf_query_object *obj); 884 bool (*BeginPerfQuery)(struct gl_context *ctx, 885 struct gl_perf_query_object *obj); 886 void (*EndPerfQuery)(struct gl_context *ctx, 887 struct gl_perf_query_object *obj); 888 void (*WaitPerfQuery)(struct gl_context *ctx, 889 struct gl_perf_query_object *obj); 890 bool (*IsPerfQueryReady)(struct gl_context *ctx, 891 struct gl_perf_query_object *obj); 892 void (*GetPerfQueryData)(struct gl_context *ctx, 893 struct gl_perf_query_object *obj, 894 GLsizei dataSize, 895 GLuint *data, 896 GLuint *bytesWritten); 897 /*@}*/ 898 899 900 /** 901 * \name GREMEDY debug/marker functions 902 */ 903 /*@{*/ 904 void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len); 905 /*@}*/ 906 907 /** 908 * \name Support for multiple T&L engines 909 */ 910 /*@{*/ 911 912 /** 913 * Set by the driver-supplied T&L engine. 914 * 915 * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). 916 */ 917 GLuint CurrentExecPrimitive; 918 919 /** 920 * Current glBegin state of an in-progress compilation. May be 921 * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END 922 * or PRIM_UNKNOWN. 923 */ 924 GLuint CurrentSavePrimitive; 925 926 927 #define FLUSH_STORED_VERTICES 0x1 928 #define FLUSH_UPDATE_CURRENT 0x2 929 /** 930 * Set by the driver-supplied T&L engine whenever vertices are buffered 931 * between glBegin()/glEnd() objects or __struct gl_contextRec::Current 932 * is not updated. A bitmask of the FLUSH_x values above. 933 * 934 * The dd_function_table::FlushVertices call below may be used to resolve 935 * these conditions. 936 */ 937 GLbitfield NeedFlush; 938 939 /** Need to call vbo_save_SaveFlushVertices() upon state change? */ 940 GLboolean SaveNeedFlush; 941 942 /** 943 * Notify driver that the special derived value _NeedEyeCoords has 944 * changed. 945 */ 946 void (*LightingSpaceChange)( struct gl_context *ctx ); 947 948 /**@}*/ 949 950 /** 951 * \name GL_ARB_sync interfaces 952 */ 953 /*@{*/ 954 struct gl_sync_object * (*NewSyncObject)(struct gl_context *); 955 void (*FenceSync)(struct gl_context *, struct gl_sync_object *, 956 GLenum, GLbitfield); 957 void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); 958 void (*CheckSync)(struct gl_context *, struct gl_sync_object *); 959 void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, 960 GLbitfield, GLuint64); 961 void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *, 962 GLbitfield, GLuint64); 963 /*@}*/ 964 965 /** GL_NV_conditional_render */ 966 void (*BeginConditionalRender)(struct gl_context *ctx, 967 struct gl_query_object *q, 968 GLenum mode); 969 void (*EndConditionalRender)(struct gl_context *ctx, 970 struct gl_query_object *q); 971 972 /** 973 * \name GL_OES_draw_texture interface 974 */ 975 /*@{*/ 976 void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 977 GLfloat width, GLfloat height); 978 /*@}*/ 979 980 /** 981 * \name GL_OES_EGL_image interface 982 */ 983 void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target, 984 struct gl_texture_object *texObj, 985 struct gl_texture_image *texImage, 986 GLeglImageOES image_handle); 987 void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx, 988 struct gl_renderbuffer *rb, 989 void *image_handle); 990 991 /** 992 * \name GL_EXT_EGL_image_storage interface 993 */ 994 void (*EGLImageTargetTexStorage)(struct gl_context *ctx, GLenum target, 995 struct gl_texture_object *texObj, 996 struct gl_texture_image *texImage, 997 GLeglImageOES image_handle); 998 /** 999 * \name GL_EXT_transform_feedback interface 1000 */ 1001 struct gl_transform_feedback_object * 1002 (*NewTransformFeedback)(struct gl_context *ctx, GLuint name); 1003 void (*DeleteTransformFeedback)(struct gl_context *ctx, 1004 struct gl_transform_feedback_object *obj); 1005 void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode, 1006 struct gl_transform_feedback_object *obj); 1007 void (*EndTransformFeedback)(struct gl_context *ctx, 1008 struct gl_transform_feedback_object *obj); 1009 void (*PauseTransformFeedback)(struct gl_context *ctx, 1010 struct gl_transform_feedback_object *obj); 1011 void (*ResumeTransformFeedback)(struct gl_context *ctx, 1012 struct gl_transform_feedback_object *obj); 1013 1014 /** 1015 * Return the number of vertices written to a stream during the last 1016 * Begin/EndTransformFeedback block. 1017 */ 1018 GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx, 1019 struct gl_transform_feedback_object *obj, 1020 GLuint stream); 1021 1022 /** 1023 * \name GL_NV_texture_barrier interface 1024 */ 1025 void (*TextureBarrier)(struct gl_context *ctx); 1026 1027 /** 1028 * \name GL_ARB_sampler_objects 1029 */ 1030 struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx, 1031 GLuint name); 1032 1033 /** 1034 * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query. 1035 * This should be equivalent to glGetInteger64v(GL_TIMESTAMP); 1036 */ 1037 uint64_t (*GetTimestamp)(struct gl_context *ctx); 1038 1039 /** 1040 * \name GL_ARB_texture_multisample 1041 */ 1042 void (*GetSamplePosition)(struct gl_context *ctx, 1043 struct gl_framebuffer *fb, 1044 GLuint index, 1045 GLfloat *outValue); 1046 1047 /** 1048 * \name NV_vdpau_interop interface 1049 */ 1050 void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target, 1051 GLenum access, GLboolean output, 1052 struct gl_texture_object *texObj, 1053 struct gl_texture_image *texImage, 1054 const GLvoid *vdpSurface, GLuint index); 1055 void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target, 1056 GLenum access, GLboolean output, 1057 struct gl_texture_object *texObj, 1058 struct gl_texture_image *texImage, 1059 const GLvoid *vdpSurface, GLuint index); 1060 1061 /** 1062 * Query reset status for GL_ARB_robustness 1063 * 1064 * Per \c glGetGraphicsResetStatusARB, this function should return a 1065 * non-zero value once after a reset. If a reset is non-atomic, the 1066 * non-zero status should be returned for the duration of the reset. 1067 */ 1068 GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx); 1069 1070 /** 1071 * \name GL_ARB_shader_image_load_store interface. 1072 */ 1073 /** @{ */ 1074 void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers); 1075 /** @} */ 1076 1077 /** 1078 * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier. 1079 * 1080 * On return from this function any framebuffer contents written by 1081 * previous draw commands are guaranteed to be visible from subsequent 1082 * fragment shader invocations using the 1083 * EXT_shader_framebuffer_fetch_non_coherent interface. 1084 */ 1085 /** @{ */ 1086 void (*FramebufferFetchBarrier)(struct gl_context *ctx); 1087 /** @} */ 1088 1089 /** 1090 * \name GL_ARB_compute_shader interface 1091 */ 1092 /*@{*/ 1093 void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups); 1094 void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect); 1095 /*@}*/ 1096 1097 /** 1098 * \name GL_ARB_compute_variable_group_size interface 1099 */ 1100 /*@{*/ 1101 void (*DispatchComputeGroupSize)(struct gl_context *ctx, 1102 const GLuint *num_groups, 1103 const GLuint *group_size); 1104 /*@}*/ 1105 1106 /** 1107 * Query information about memory. Device memory is e.g. VRAM. Staging 1108 * memory is e.g. GART. All sizes are in kilobytes. 1109 */ 1110 void (*QueryMemoryInfo)(struct gl_context *ctx, 1111 struct gl_memory_info *info); 1112 1113 /** 1114 * Indicate that this thread is being used by Mesa as a background drawing 1115 * thread for the given GL context. 1116 * 1117 * If this function is called more than once from any given thread, each 1118 * subsequent call overrides the context that was passed in the previous 1119 * call. Mesa takes advantage of this to re-use a background thread to 1120 * perform drawing on behalf of multiple contexts. 1121 * 1122 * Mesa may sometimes call this function from a non-background thread 1123 * (i.e. a thread that has already been bound to a context using 1124 * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to 1125 * the context that is bound to this thread. 1126 * 1127 * Mesa will only call this function if GL multithreading is enabled. 1128 */ 1129 void (*SetBackgroundContext)(struct gl_context *ctx, 1130 struct util_queue_monitoring *queue_info); 1131 1132 /** 1133 * \name GL_ARB_sparse_buffer interface 1134 */ 1135 /*@{*/ 1136 void (*BufferPageCommitment)(struct gl_context *ctx, 1137 struct gl_buffer_object *bufferObj, 1138 GLintptr offset, GLsizeiptr size, 1139 GLboolean commit); 1140 /*@}*/ 1141 1142 /** 1143 * \name GL_ARB_bindless_texture interface 1144 */ 1145 /*@{*/ 1146 GLuint64 (*NewTextureHandle)(struct gl_context *ctx, 1147 struct gl_texture_object *texObj, 1148 struct gl_sampler_object *sampObj); 1149 void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle); 1150 void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle, 1151 bool resident); 1152 GLuint64 (*NewImageHandle)(struct gl_context *ctx, 1153 struct gl_image_unit *imgObj); 1154 void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle); 1155 void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle, 1156 GLenum access, bool resident); 1157 /*@}*/ 1158 1159 1160 /** 1161 * \name GL_EXT_external_objects interface 1162 */ 1163 /*@{*/ 1164 /** 1165 * Called to allocate a new memory object. Drivers will usually 1166 * allocate/return a subclass of gl_memory_object. 1167 */ 1168 struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx, 1169 GLuint name); 1170 /** 1171 * Called to delete/free a memory object. Drivers should free the 1172 * object and any image data it contains. 1173 */ 1174 void (*DeleteMemoryObject)(struct gl_context *ctx, 1175 struct gl_memory_object *memObj); 1176 1177 /** 1178 * Set the given memory object as the texture's storage. 1179 */ 1180 GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx, 1181 struct gl_texture_object *tex_obj, 1182 struct gl_memory_object *mem_obj, 1183 GLsizei levels, GLsizei width, 1184 GLsizei height, GLsizei depth, 1185 GLuint64 offset); 1186 1187 /** 1188 * Use a memory object as the backing data for a buffer object 1189 */ 1190 GLboolean (*BufferDataMem)(struct gl_context *ctx, 1191 GLenum target, 1192 GLsizeiptrARB size, 1193 struct gl_memory_object *memObj, 1194 GLuint64 offset, 1195 GLenum usage, 1196 struct gl_buffer_object *bufObj); 1197 1198 /** 1199 * Fill uuid with an unique identifier for this driver 1200 * 1201 * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 1202 */ 1203 void (*GetDriverUuid)(struct gl_context *ctx, char *uuid); 1204 1205 /** 1206 * Fill uuid with an unique identifier for the device associated 1207 * to this driver 1208 * 1209 * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 1210 */ 1211 void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid); 1212 1213 /*@}*/ 1214 1215 /** 1216 * \name GL_EXT_external_objects_fd interface 1217 */ 1218 /*@{*/ 1219 /** 1220 * Called to import a memory object. The caller relinquishes ownership 1221 * of fd after the call returns. 1222 * 1223 * Accessing fd after ImportMemoryObjectFd returns results in undefined 1224 * behaviour. This is consistent with EXT_external_object_fd. 1225 */ 1226 void (*ImportMemoryObjectFd)(struct gl_context *ctx, 1227 struct gl_memory_object *memObj, 1228 GLuint64 size, 1229 int fd); 1230 /*@}*/ 1231 1232 /** 1233 * \name GL_ARB_get_program_binary 1234 */ 1235 /*@{*/ 1236 /** 1237 * Calls to retrieve/store a binary serialized copy of the current program. 1238 */ 1239 void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1); 1240 1241 void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx, 1242 struct gl_shader_program *shProg, 1243 struct gl_program *prog); 1244 1245 void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx, 1246 struct gl_shader_program *shProg, 1247 struct gl_program *prog); 1248 /*@}*/ 1249 1250 /** 1251 * \name GL_EXT_semaphore interface 1252 */ 1253 /*@{*/ 1254 /** 1255 * Called to allocate a new semaphore object. Drivers will usually 1256 * allocate/return a subclass of gl_semaphore_object. 1257 */ 1258 struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx, 1259 GLuint name); 1260 /** 1261 * Called to delete/free a semaphore object. Drivers should free the 1262 * object and any associated resources. 1263 */ 1264 void (*DeleteSemaphoreObject)(struct gl_context *ctx, 1265 struct gl_semaphore_object *semObj); 1266 1267 /** 1268 * Introduce an operation to wait for the semaphore object in the GL 1269 * server's command stream 1270 */ 1271 void (*ServerWaitSemaphoreObject)(struct gl_context *ctx, 1272 struct gl_semaphore_object *semObj, 1273 GLuint numBufferBarriers, 1274 struct gl_buffer_object **bufObjs, 1275 GLuint numTextureBarriers, 1276 struct gl_texture_object **texObjs, 1277 const GLenum *srcLayouts); 1278 1279 /** 1280 * Introduce an operation to signal the semaphore object in the GL 1281 * server's command stream 1282 */ 1283 void (*ServerSignalSemaphoreObject)(struct gl_context *ctx, 1284 struct gl_semaphore_object *semObj, 1285 GLuint numBufferBarriers, 1286 struct gl_buffer_object **bufObjs, 1287 GLuint numTextureBarriers, 1288 struct gl_texture_object **texObjs, 1289 const GLenum *dstLayouts); 1290 /*@}*/ 1291 1292 /** 1293 * \name GL_EXT_semaphore_fd interface 1294 */ 1295 /*@{*/ 1296 /** 1297 * Called to import a semaphore object. The caller relinquishes ownership 1298 * of fd after the call returns. 1299 * 1300 * Accessing fd after ImportSemaphoreFd returns results in undefined 1301 * behaviour. This is consistent with EXT_semaphore_fd. 1302 */ 1303 void (*ImportSemaphoreFd)(struct gl_context *ctx, 1304 struct gl_semaphore_object *semObj, 1305 int fd); 1306 /*@}*/ 1307 1308 /** 1309 * \name Disk shader cache functions 1310 */ 1311 /*@{*/ 1312 /** 1313 * Called to initialize gl_program::driver_cache_blob (and size) with a 1314 * ralloc allocated buffer. 1315 * 1316 * This buffer will be saved and restored as part of the gl_program 1317 * serialization and deserialization. 1318 */ 1319 void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx, 1320 struct gl_program *prog); 1321 /*@}*/ 1322 1323 /** 1324 * \name Set the number of compiler threads for ARB_parallel_shader_compile 1325 */ 1326 void (*SetMaxShaderCompilerThreads)(struct gl_context *ctx, unsigned count); 1327 bool (*GetShaderProgramCompletionStatus)(struct gl_context *ctx, 1328 struct gl_shader_program *shprog); 1329 1330 void (*PinDriverToL3Cache)(struct gl_context *ctx, unsigned L3_cache); 1331 }; 1332 1333 1334 /** 1335 * Per-vertex functions. 1336 * 1337 * These are the functions which can appear between glBegin and glEnd. 1338 * Depending on whether we're inside or outside a glBegin/End pair 1339 * and whether we're in immediate mode or building a display list, these 1340 * functions behave differently. This structure allows us to switch 1341 * between those modes more easily. 1342 * 1343 * Generally, these pointers point to functions in the VBO module. 1344 */ 1345 typedef struct { 1346 void (GLAPIENTRYP ArrayElement)( GLint ); 1347 void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); 1348 void (GLAPIENTRYP Color3fv)( const GLfloat * ); 1349 void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1350 void (GLAPIENTRYP Color4fv)( const GLfloat * ); 1351 void (GLAPIENTRYP EdgeFlag)( GLboolean ); 1352 void (GLAPIENTRYP EvalCoord1f)( GLfloat ); 1353 void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); 1354 void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); 1355 void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); 1356 void (GLAPIENTRYP EvalPoint1)( GLint ); 1357 void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); 1358 void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); 1359 void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); 1360 void (GLAPIENTRYP Indexf)( GLfloat ); 1361 void (GLAPIENTRYP Indexfv)( const GLfloat * ); 1362 void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); 1363 void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); 1364 void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); 1365 void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); 1366 void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); 1367 void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); 1368 void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); 1369 void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); 1370 void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); 1371 void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); 1372 void (GLAPIENTRYP Normal3fv)( const GLfloat * ); 1373 void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); 1374 void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); 1375 void (GLAPIENTRYP TexCoord1f)( GLfloat ); 1376 void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); 1377 void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); 1378 void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); 1379 void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); 1380 void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); 1381 void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1382 void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); 1383 void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); 1384 void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); 1385 void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); 1386 void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); 1387 void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1388 void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); 1389 void (GLAPIENTRYP CallList)( GLuint ); 1390 void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); 1391 void (GLAPIENTRYP Begin)( GLenum ); 1392 void (GLAPIENTRYP End)( void ); 1393 void (GLAPIENTRYP PrimitiveRestartNV)( void ); 1394 /* Originally for GL_NV_vertex_program, now used only dlist.c and friends */ 1395 void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); 1396 void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); 1397 void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); 1398 void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v ); 1399 void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1400 void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); 1401 void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1402 void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); 1403 /* GL_ARB_vertex_program */ 1404 void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); 1405 void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); 1406 void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); 1407 void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v ); 1408 void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1409 void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); 1410 void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1411 void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); 1412 1413 /* GL_EXT_gpu_shader4 / GL 3.0 */ 1414 void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x); 1415 void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y); 1416 void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z); 1417 void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w); 1418 void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v); 1419 void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v); 1420 void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v); 1421 1422 void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x); 1423 void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y); 1424 void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z); 1425 void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); 1426 void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v); 1427 void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v); 1428 void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v); 1429 1430 /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */ 1431 void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value ); 1432 void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value); 1433 1434 void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value ); 1435 void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value); 1436 1437 void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value ); 1438 void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value); 1439 1440 void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords ); 1441 void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords ); 1442 1443 void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords ); 1444 void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords ); 1445 1446 void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords ); 1447 void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords ); 1448 1449 void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords ); 1450 void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords ); 1451 1452 void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords ); 1453 void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1454 void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords ); 1455 void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1456 void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords ); 1457 void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1458 void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords ); 1459 void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1460 1461 void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords ); 1462 void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords ); 1463 1464 void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color ); 1465 void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color ); 1466 1467 void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color ); 1468 void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color ); 1469 1470 void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color ); 1471 void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color ); 1472 1473 void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type, 1474 GLboolean normalized, GLuint value); 1475 void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type, 1476 GLboolean normalized, GLuint value); 1477 void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type, 1478 GLboolean normalized, GLuint value); 1479 void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type, 1480 GLboolean normalized, GLuint value); 1481 void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type, 1482 GLboolean normalized, 1483 const GLuint *value); 1484 void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type, 1485 GLboolean normalized, 1486 const GLuint *value); 1487 void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type, 1488 GLboolean normalized, 1489 const GLuint *value); 1490 void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type, 1491 GLboolean normalized, 1492 const GLuint *value); 1493 1494 /* GL_ARB_vertex_attrib_64bit / GL 4.1 */ 1495 void (GLAPIENTRYP VertexAttribL1d)( GLuint index, GLdouble x); 1496 void (GLAPIENTRYP VertexAttribL2d)( GLuint index, GLdouble x, GLdouble y); 1497 void (GLAPIENTRYP VertexAttribL3d)( GLuint index, GLdouble x, GLdouble y, GLdouble z); 1498 void (GLAPIENTRYP VertexAttribL4d)( GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); 1499 1500 1501 void (GLAPIENTRYP VertexAttribL1dv)( GLuint index, const GLdouble *v); 1502 void (GLAPIENTRYP VertexAttribL2dv)( GLuint index, const GLdouble *v); 1503 void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v); 1504 void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v); 1505 1506 void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x); 1507 void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v); 1508 1509 /* GL_NV_half_float */ 1510 void (GLAPIENTRYP Vertex2hNV)( GLhalfNV, GLhalfNV ); 1511 void (GLAPIENTRYP Vertex2hvNV)( const GLhalfNV * ); 1512 void (GLAPIENTRYP Vertex3hNV)( GLhalfNV, GLhalfNV, GLhalfNV ); 1513 void (GLAPIENTRYP Vertex3hvNV)( const GLhalfNV * ); 1514 void (GLAPIENTRYP Vertex4hNV)( GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV ); 1515 void (GLAPIENTRYP Vertex4hvNV)( const GLhalfNV * ); 1516 void (GLAPIENTRYP Normal3hNV)( GLhalfNV, GLhalfNV, GLhalfNV ); 1517 void (GLAPIENTRYP Normal3hvNV)( const GLhalfNV * ); 1518 void (GLAPIENTRYP Color3hNV)( GLhalfNV, GLhalfNV, GLhalfNV ); 1519 void (GLAPIENTRYP Color3hvNV)( const GLhalfNV * ); 1520 void (GLAPIENTRYP Color4hNV)( GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV ); 1521 void (GLAPIENTRYP Color4hvNV)( const GLhalfNV * ); 1522 void (GLAPIENTRYP TexCoord1hNV)( GLhalfNV ); 1523 void (GLAPIENTRYP TexCoord1hvNV)( const GLhalfNV * ); 1524 void (GLAPIENTRYP TexCoord2hNV)( GLhalfNV, GLhalfNV ); 1525 void (GLAPIENTRYP TexCoord2hvNV)( const GLhalfNV * ); 1526 void (GLAPIENTRYP TexCoord3hNV)( GLhalfNV, GLhalfNV, GLhalfNV ); 1527 void (GLAPIENTRYP TexCoord3hvNV)( const GLhalfNV * ); 1528 void (GLAPIENTRYP TexCoord4hNV)( GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV ); 1529 void (GLAPIENTRYP TexCoord4hvNV)( const GLhalfNV * ); 1530 void (GLAPIENTRYP MultiTexCoord1hNV)( GLenum, GLhalfNV ); 1531 void (GLAPIENTRYP MultiTexCoord1hvNV)( GLenum, const GLhalfNV * ); 1532 void (GLAPIENTRYP MultiTexCoord2hNV)( GLenum, GLhalfNV, GLhalfNV ); 1533 void (GLAPIENTRYP MultiTexCoord2hvNV)( GLenum, const GLhalfNV * ); 1534 void (GLAPIENTRYP MultiTexCoord3hNV)( GLenum, GLhalfNV, GLhalfNV, GLhalfNV ); 1535 void (GLAPIENTRYP MultiTexCoord3hvNV)( GLenum, const GLhalfNV * ); 1536 void (GLAPIENTRYP MultiTexCoord4hNV)( GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV ); 1537 void (GLAPIENTRYP MultiTexCoord4hvNV)( GLenum, const GLhalfNV * ); 1538 void (GLAPIENTRYP FogCoordhNV)( GLhalfNV ); 1539 void (GLAPIENTRYP FogCoordhvNV)( const GLhalfNV * ); 1540 void (GLAPIENTRYP SecondaryColor3hNV)( GLhalfNV, GLhalfNV, GLhalfNV ); 1541 void (GLAPIENTRYP SecondaryColor3hvNV)( const GLhalfNV * ); 1542 1543 void (GLAPIENTRYP Color3b)( GLbyte red, GLbyte green, GLbyte blue ); 1544 void (GLAPIENTRYP Color3d)( GLdouble red, GLdouble green, GLdouble blue ); 1545 void (GLAPIENTRYP Color3i)( GLint red, GLint green, GLint blue ); 1546 void (GLAPIENTRYP Color3s)( GLshort red, GLshort green, GLshort blue ); 1547 void (GLAPIENTRYP Color3ui)( GLuint red, GLuint green, GLuint blue ); 1548 void (GLAPIENTRYP Color3us)( GLushort red, GLushort green, GLushort blue ); 1549 void (GLAPIENTRYP Color3ub)( GLubyte red, GLubyte green, GLubyte blue ); 1550 void (GLAPIENTRYP Color3bv)( const GLbyte *v ); 1551 void (GLAPIENTRYP Color3dv)( const GLdouble *v ); 1552 void (GLAPIENTRYP Color3iv)( const GLint *v ); 1553 void (GLAPIENTRYP Color3sv)( const GLshort *v ); 1554 void (GLAPIENTRYP Color3uiv)( const GLuint *v ); 1555 void (GLAPIENTRYP Color3usv)( const GLushort *v ); 1556 void (GLAPIENTRYP Color3ubv)( const GLubyte *v ); 1557 void (GLAPIENTRYP Color4b)( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ); 1558 void (GLAPIENTRYP Color4d)( GLdouble red, GLdouble green, GLdouble blue, 1559 GLdouble alpha ); 1560 void (GLAPIENTRYP Color4i)( GLint red, GLint green, GLint blue, GLint alpha ); 1561 void (GLAPIENTRYP Color4s)( GLshort red, GLshort green, GLshort blue, 1562 GLshort alpha ); 1563 void (GLAPIENTRYP Color4ui)( GLuint red, GLuint green, GLuint blue, GLuint alpha ); 1564 void (GLAPIENTRYP Color4us)( GLushort red, GLushort green, GLushort blue, 1565 GLushort alpha ); 1566 void (GLAPIENTRYP Color4ub)( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); 1567 void (GLAPIENTRYP Color4iv)( const GLint *v ); 1568 void (GLAPIENTRYP Color4bv)( const GLbyte *v ); 1569 void (GLAPIENTRYP Color4dv)( const GLdouble *v ); 1570 void (GLAPIENTRYP Color4sv)( const GLshort *v); 1571 void (GLAPIENTRYP Color4uiv)( const GLuint *v); 1572 void (GLAPIENTRYP Color4usv)( const GLushort *v); 1573 void (GLAPIENTRYP Color4ubv)( const GLubyte *v); 1574 void (GLAPIENTRYP FogCoordd)( GLdouble d ); 1575 void (GLAPIENTRYP FogCoorddv)( const GLdouble *v ); 1576 void (GLAPIENTRYP Indexd)( GLdouble c ); 1577 void (GLAPIENTRYP Indexi)( GLint c ); 1578 void (GLAPIENTRYP Indexs)( GLshort c ); 1579 void (GLAPIENTRYP Indexub)( GLubyte c ); 1580 void (GLAPIENTRYP Indexdv)( const GLdouble *c ); 1581 void (GLAPIENTRYP Indexiv)( const GLint *c ); 1582 void (GLAPIENTRYP Indexsv)( const GLshort *c ); 1583 void (GLAPIENTRYP Indexubv)( const GLubyte *c ); 1584 void (GLAPIENTRYP EdgeFlagv)(const GLboolean *flag); 1585 void (GLAPIENTRYP Normal3b)( GLbyte nx, GLbyte ny, GLbyte nz ); 1586 void (GLAPIENTRYP Normal3d)( GLdouble nx, GLdouble ny, GLdouble nz ); 1587 void (GLAPIENTRYP Normal3i)( GLint nx, GLint ny, GLint nz ); 1588 void (GLAPIENTRYP Normal3s)( GLshort nx, GLshort ny, GLshort nz ); 1589 void (GLAPIENTRYP Normal3bv)( const GLbyte *v ); 1590 void (GLAPIENTRYP Normal3dv)( const GLdouble *v ); 1591 void (GLAPIENTRYP Normal3iv)( const GLint *v ); 1592 void (GLAPIENTRYP Normal3sv)( const GLshort *v ); 1593 void (GLAPIENTRYP TexCoord1d)( GLdouble s ); 1594 void (GLAPIENTRYP TexCoord1i)( GLint s ); 1595 void (GLAPIENTRYP TexCoord1s)( GLshort s ); 1596 void (GLAPIENTRYP TexCoord2d)( GLdouble s, GLdouble t ); 1597 void (GLAPIENTRYP TexCoord2s)( GLshort s, GLshort t ); 1598 void (GLAPIENTRYP TexCoord2i)( GLint s, GLint t ); 1599 void (GLAPIENTRYP TexCoord3d)( GLdouble s, GLdouble t, GLdouble r ); 1600 void (GLAPIENTRYP TexCoord3i)( GLint s, GLint t, GLint r ); 1601 void (GLAPIENTRYP TexCoord3s)( GLshort s, GLshort t, GLshort r ); 1602 void (GLAPIENTRYP TexCoord4d)( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); 1603 void (GLAPIENTRYP TexCoord4i)( GLint s, GLint t, GLint r, GLint q ); 1604 void (GLAPIENTRYP TexCoord4s)( GLshort s, GLshort t, GLshort r, GLshort q ); 1605 void (GLAPIENTRYP TexCoord1dv)( const GLdouble *v ); 1606 void (GLAPIENTRYP TexCoord1iv)( const GLint *v ); 1607 void (GLAPIENTRYP TexCoord1sv)( const GLshort *v ); 1608 void (GLAPIENTRYP TexCoord2dv)( const GLdouble *v ); 1609 void (GLAPIENTRYP TexCoord2iv)( const GLint *v ); 1610 void (GLAPIENTRYP TexCoord2sv)( const GLshort *v ); 1611 void (GLAPIENTRYP TexCoord3dv)( const GLdouble *v ); 1612 void (GLAPIENTRYP TexCoord3iv)( const GLint *v ); 1613 void (GLAPIENTRYP TexCoord3sv)( const GLshort *v ); 1614 void (GLAPIENTRYP TexCoord4dv)( const GLdouble *v ); 1615 void (GLAPIENTRYP TexCoord4iv)( const GLint *v ); 1616 void (GLAPIENTRYP TexCoord4sv)( const GLshort *v ); 1617 void (GLAPIENTRYP Vertex2d)( GLdouble x, GLdouble y ); 1618 void (GLAPIENTRYP Vertex2i)( GLint x, GLint y ); 1619 void (GLAPIENTRYP Vertex2s)( GLshort x, GLshort y ); 1620 void (GLAPIENTRYP Vertex3d)( GLdouble x, GLdouble y, GLdouble z ); 1621 void (GLAPIENTRYP Vertex3i)( GLint x, GLint y, GLint z ); 1622 void (GLAPIENTRYP Vertex3s)( GLshort x, GLshort y, GLshort z ); 1623 void (GLAPIENTRYP Vertex4d)( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); 1624 void (GLAPIENTRYP Vertex4i)( GLint x, GLint y, GLint z, GLint w ); 1625 void (GLAPIENTRYP Vertex4s)( GLshort x, GLshort y, GLshort z, GLshort w ); 1626 void (GLAPIENTRYP Vertex2dv)( const GLdouble *v ); 1627 void (GLAPIENTRYP Vertex2iv)( const GLint *v ); 1628 void (GLAPIENTRYP Vertex2sv)( const GLshort *v ); 1629 void (GLAPIENTRYP Vertex3dv)( const GLdouble *v ); 1630 void (GLAPIENTRYP Vertex3iv)( const GLint *v ); 1631 void (GLAPIENTRYP Vertex3sv)( const GLshort *v ); 1632 void (GLAPIENTRYP Vertex4dv)( const GLdouble *v ); 1633 void (GLAPIENTRYP Vertex4iv)( const GLint *v ); 1634 void (GLAPIENTRYP Vertex4sv)( const GLshort *v ); 1635 void (GLAPIENTRYP MultiTexCoord1d)(GLenum target, GLdouble s); 1636 void (GLAPIENTRYP MultiTexCoord1dv)(GLenum target, const GLdouble *v); 1637 void (GLAPIENTRYP MultiTexCoord1i)(GLenum target, GLint s); 1638 void (GLAPIENTRYP MultiTexCoord1iv)(GLenum target, const GLint *v); 1639 void (GLAPIENTRYP MultiTexCoord1s)(GLenum target, GLshort s); 1640 void (GLAPIENTRYP MultiTexCoord1sv)(GLenum target, const GLshort *v); 1641 void (GLAPIENTRYP MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t); 1642 void (GLAPIENTRYP MultiTexCoord2dv)(GLenum target, const GLdouble *v); 1643 void (GLAPIENTRYP MultiTexCoord2i)(GLenum target, GLint s, GLint t); 1644 void (GLAPIENTRYP MultiTexCoord2iv)(GLenum target, const GLint *v); 1645 void (GLAPIENTRYP MultiTexCoord2s)(GLenum target, GLshort s, GLshort t); 1646 void (GLAPIENTRYP MultiTexCoord2sv)(GLenum target, const GLshort *v); 1647 void (GLAPIENTRYP MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r); 1648 void (GLAPIENTRYP MultiTexCoord3dv)(GLenum target, const GLdouble *v); 1649 void (GLAPIENTRYP MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r); 1650 void (GLAPIENTRYP MultiTexCoord3iv)(GLenum target, const GLint *v); 1651 void (GLAPIENTRYP MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r); 1652 void (GLAPIENTRYP MultiTexCoord3sv)(GLenum target, const GLshort *v); 1653 void (GLAPIENTRYP MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, 1654 GLdouble q); 1655 void (GLAPIENTRYP MultiTexCoord4dv)(GLenum target, const GLdouble *v); 1656 void (GLAPIENTRYP MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q); 1657 void (GLAPIENTRYP MultiTexCoord4iv)(GLenum target, const GLint *v); 1658 void (GLAPIENTRYP MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, 1659 GLshort q); 1660 void (GLAPIENTRYP MultiTexCoord4sv)(GLenum target, const GLshort *v); 1661 void (GLAPIENTRYP EvalCoord2dv)( const GLdouble *u ); 1662 void (GLAPIENTRYP EvalCoord2d)( GLdouble u, GLdouble v ); 1663 void (GLAPIENTRYP EvalCoord1dv)( const GLdouble *u ); 1664 void (GLAPIENTRYP EvalCoord1d)( GLdouble u ); 1665 void (GLAPIENTRYP Materialf)( GLenum face, GLenum pname, GLfloat param ); 1666 void (GLAPIENTRYP Materiali)(GLenum face, GLenum pname, GLint param ); 1667 void (GLAPIENTRYP Materialiv)(GLenum face, GLenum pname, const GLint *params ); 1668 void (GLAPIENTRYP SecondaryColor3b)( GLbyte red, GLbyte green, GLbyte blue ); 1669 void (GLAPIENTRYP SecondaryColor3d)( GLdouble red, GLdouble green, GLdouble blue ); 1670 void (GLAPIENTRYP SecondaryColor3i)( GLint red, GLint green, GLint blue ); 1671 void (GLAPIENTRYP SecondaryColor3s)( GLshort red, GLshort green, GLshort blue ); 1672 void (GLAPIENTRYP SecondaryColor3ui)( GLuint red, GLuint green, GLuint blue ); 1673 void (GLAPIENTRYP SecondaryColor3us)( GLushort red, GLushort green, GLushort blue ); 1674 void (GLAPIENTRYP SecondaryColor3ub)( GLubyte red, GLubyte green, GLubyte blue ); 1675 void (GLAPIENTRYP SecondaryColor3bv)( const GLbyte *v ); 1676 void (GLAPIENTRYP SecondaryColor3dv)( const GLdouble *v ); 1677 void (GLAPIENTRYP SecondaryColor3iv)( const GLint *v ); 1678 void (GLAPIENTRYP SecondaryColor3sv)( const GLshort *v ); 1679 void (GLAPIENTRYP SecondaryColor3uiv)( const GLuint *v ); 1680 void (GLAPIENTRYP SecondaryColor3usv)( const GLushort *v ); 1681 void (GLAPIENTRYP SecondaryColor3ubv)( const GLubyte *v ); 1682 void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); 1683 void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); 1684 void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); 1685 void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); 1686 void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); 1687 void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); 1688 void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, 1689 GLshort w); 1690 void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, 1691 GLdouble w); 1692 void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, 1693 GLubyte w); 1694 void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort *v); 1695 void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble *v); 1696 void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort *v); 1697 void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble *v); 1698 void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort *v); 1699 void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble *v); 1700 void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort *v); 1701 void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble *v); 1702 void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte *v); 1703 void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort *v); 1704 void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat *v); 1705 void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble *v); 1706 void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort *v); 1707 void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat *v); 1708 void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble *v); 1709 void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort *v); 1710 void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat *v); 1711 void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble *v); 1712 void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort *v); 1713 void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat *v); 1714 void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble *v); 1715 void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte *v); 1716 void (GLAPIENTRYP VertexAttrib1s)(GLuint index, GLshort x); 1717 void (GLAPIENTRYP VertexAttrib1d)(GLuint index, GLdouble x); 1718 void (GLAPIENTRYP VertexAttrib2s)(GLuint index, GLshort x, GLshort y); 1719 void (GLAPIENTRYP VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y); 1720 void (GLAPIENTRYP VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z); 1721 void (GLAPIENTRYP VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); 1722 void (GLAPIENTRYP VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, 1723 GLshort w); 1724 void (GLAPIENTRYP VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, 1725 GLdouble w); 1726 void (GLAPIENTRYP VertexAttrib1sv)(GLuint index, const GLshort *v); 1727 void (GLAPIENTRYP VertexAttrib1dv)(GLuint index, const GLdouble *v); 1728 void (GLAPIENTRYP VertexAttrib2sv)(GLuint index, const GLshort *v); 1729 void (GLAPIENTRYP VertexAttrib2dv)(GLuint index, const GLdouble *v); 1730 void (GLAPIENTRYP VertexAttrib3sv)(GLuint index, const GLshort *v); 1731 void (GLAPIENTRYP VertexAttrib3dv)(GLuint index, const GLdouble *v); 1732 void (GLAPIENTRYP VertexAttrib4sv)(GLuint index, const GLshort *v); 1733 void (GLAPIENTRYP VertexAttrib4dv)(GLuint index, const GLdouble *v); 1734 void (GLAPIENTRYP VertexAttrib4bv)(GLuint index, const GLbyte * v); 1735 void (GLAPIENTRYP VertexAttrib4iv)(GLuint index, const GLint * v); 1736 void (GLAPIENTRYP VertexAttrib4ubv)(GLuint index, const GLubyte * v); 1737 void (GLAPIENTRYP VertexAttrib4usv)(GLuint index, const GLushort * v); 1738 void (GLAPIENTRYP VertexAttrib4uiv)(GLuint index, const GLuint * v); 1739 void (GLAPIENTRYP VertexAttrib4Nbv)(GLuint index, const GLbyte * v); 1740 void (GLAPIENTRYP VertexAttrib4Nsv)(GLuint index, const GLshort * v); 1741 void (GLAPIENTRYP VertexAttrib4Niv)(GLuint index, const GLint * v); 1742 void (GLAPIENTRYP VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, 1743 GLubyte w); 1744 void (GLAPIENTRYP VertexAttrib4Nubv)(GLuint index, const GLubyte * v); 1745 void (GLAPIENTRYP VertexAttrib4Nusv)(GLuint index, const GLushort * v); 1746 void (GLAPIENTRYP VertexAttrib4Nuiv)(GLuint index, const GLuint * v); 1747 void (GLAPIENTRYP VertexAttribI1iv)(GLuint index, const GLint *v); 1748 void (GLAPIENTRYP VertexAttribI1uiv)(GLuint index, const GLuint *v); 1749 void (GLAPIENTRYP VertexAttribI4bv)(GLuint index, const GLbyte *v); 1750 void (GLAPIENTRYP VertexAttribI4sv)(GLuint index, const GLshort *v); 1751 void (GLAPIENTRYP VertexAttribI4ubv)(GLuint index, const GLubyte *v); 1752 void (GLAPIENTRYP VertexAttribI4usv)(GLuint index, const GLushort *v); 1753 } GLvertexformat; 1754 1755 1756 #endif /* DD_INCLUDED */ 1757