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