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 38 struct gl_bitmap_atlas; 39 struct gl_buffer_object; 40 struct gl_context; 41 struct gl_display_list; 42 struct gl_framebuffer; 43 struct gl_image_unit; 44 struct gl_pixelstore_attrib; 45 struct gl_program; 46 struct gl_renderbuffer; 47 struct gl_renderbuffer_attachment; 48 struct gl_shader; 49 struct gl_shader_program; 50 struct gl_texture_image; 51 struct gl_texture_object; 52 struct gl_memory_info; 53 struct gl_transform_feedback_object; 54 struct ati_fragment_shader; 55 struct util_queue_monitoring; 56 struct _mesa_prim; 57 struct _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 */ 87 struct 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, struct gl_framebuffer *fb, 788 struct gl_renderbuffer_attachment *att); 789 790 /** 791 * \name Functions for GL_ARB_sample_locations 792 */ 793 void (*GetProgrammableSampleCaps)(struct gl_context *ctx, 794 const struct gl_framebuffer *fb, 795 GLuint *bits, GLuint *width, GLuint *height); 796 void (*EvaluateDepthValues)(struct gl_context *ctx); 797 798 /** 799 * \name Query objects 800 */ 801 /*@{*/ 802 struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id); 803 void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q); 804 void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q); 805 void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q); 806 void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q); 807 void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q); 808 void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); 809 /* 810 * \pname the value requested to be written (GL_QUERY_RESULT, etc) 811 * \ptype the type of the value requested to be written: 812 * GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB, 813 * GL_INT, GL_INT64_ARB 814 */ 815 void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q, 816 struct gl_buffer_object *buf, intptr_t offset, 817 GLenum pname, GLenum ptype); 818 /*@}*/ 819 820 /** 821 * \name Performance monitors 822 */ 823 /*@{*/ 824 void (*InitPerfMonitorGroups)(struct gl_context *ctx); 825 struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); 826 void (*DeletePerfMonitor)(struct gl_context *ctx, 827 struct gl_perf_monitor_object *m); 828 GLboolean (*BeginPerfMonitor)(struct gl_context *ctx, 829 struct gl_perf_monitor_object *m); 830 831 /** Stop an active performance monitor, discarding results. */ 832 void (*ResetPerfMonitor)(struct gl_context *ctx, 833 struct gl_perf_monitor_object *m); 834 void (*EndPerfMonitor)(struct gl_context *ctx, 835 struct gl_perf_monitor_object *m); 836 GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx, 837 struct gl_perf_monitor_object *m); 838 void (*GetPerfMonitorResult)(struct gl_context *ctx, 839 struct gl_perf_monitor_object *m, 840 GLsizei dataSize, 841 GLuint *data, 842 GLint *bytesWritten); 843 /*@}*/ 844 845 /** 846 * \name Performance Query objects 847 */ 848 /*@{*/ 849 unsigned (*InitPerfQueryInfo)(struct gl_context *ctx); 850 void (*GetPerfQueryInfo)(struct gl_context *ctx, 851 unsigned queryIndex, 852 const char **name, 853 GLuint *dataSize, 854 GLuint *numCounters, 855 GLuint *numActive); 856 void (*GetPerfCounterInfo)(struct gl_context *ctx, 857 unsigned queryIndex, 858 unsigned counterIndex, 859 const char **name, 860 const char **desc, 861 GLuint *offset, 862 GLuint *data_size, 863 GLuint *type_enum, 864 GLuint *data_type_enum, 865 GLuint64 *raw_max); 866 struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx, 867 unsigned queryIndex); 868 void (*DeletePerfQuery)(struct gl_context *ctx, 869 struct gl_perf_query_object *obj); 870 bool (*BeginPerfQuery)(struct gl_context *ctx, 871 struct gl_perf_query_object *obj); 872 void (*EndPerfQuery)(struct gl_context *ctx, 873 struct gl_perf_query_object *obj); 874 void (*WaitPerfQuery)(struct gl_context *ctx, 875 struct gl_perf_query_object *obj); 876 bool (*IsPerfQueryReady)(struct gl_context *ctx, 877 struct gl_perf_query_object *obj); 878 void (*GetPerfQueryData)(struct gl_context *ctx, 879 struct gl_perf_query_object *obj, 880 GLsizei dataSize, 881 GLuint *data, 882 GLuint *bytesWritten); 883 /*@}*/ 884 885 886 /** 887 * \name GREMEDY debug/marker functions 888 */ 889 /*@{*/ 890 void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len); 891 /*@}*/ 892 893 /** 894 * \name Support for multiple T&L engines 895 */ 896 /*@{*/ 897 898 /** 899 * Set by the driver-supplied T&L engine. 900 * 901 * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). 902 */ 903 GLuint CurrentExecPrimitive; 904 905 /** 906 * Current glBegin state of an in-progress compilation. May be 907 * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END 908 * or PRIM_UNKNOWN. 909 */ 910 GLuint CurrentSavePrimitive; 911 912 913 #define FLUSH_STORED_VERTICES 0x1 914 #define FLUSH_UPDATE_CURRENT 0x2 915 /** 916 * Set by the driver-supplied T&L engine whenever vertices are buffered 917 * between glBegin()/glEnd() objects or __struct gl_contextRec::Current 918 * is not updated. A bitmask of the FLUSH_x values above. 919 * 920 * The dd_function_table::FlushVertices call below may be used to resolve 921 * these conditions. 922 */ 923 GLbitfield NeedFlush; 924 925 /** Need to call vbo_save_SaveFlushVertices() upon state change? */ 926 GLboolean SaveNeedFlush; 927 928 /** 929 * Notify driver that the special derived value _NeedEyeCoords has 930 * changed. 931 */ 932 void (*LightingSpaceChange)( struct gl_context *ctx ); 933 934 /**@}*/ 935 936 /** 937 * \name GL_ARB_sync interfaces 938 */ 939 /*@{*/ 940 struct gl_sync_object * (*NewSyncObject)(struct gl_context *); 941 void (*FenceSync)(struct gl_context *, struct gl_sync_object *, 942 GLenum, GLbitfield); 943 void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); 944 void (*CheckSync)(struct gl_context *, struct gl_sync_object *); 945 void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, 946 GLbitfield, GLuint64); 947 void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *, 948 GLbitfield, GLuint64); 949 /*@}*/ 950 951 /** GL_NV_conditional_render */ 952 void (*BeginConditionalRender)(struct gl_context *ctx, 953 struct gl_query_object *q, 954 GLenum mode); 955 void (*EndConditionalRender)(struct gl_context *ctx, 956 struct gl_query_object *q); 957 958 /** 959 * \name GL_OES_draw_texture interface 960 */ 961 /*@{*/ 962 void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 963 GLfloat width, GLfloat height); 964 /*@}*/ 965 966 /** 967 * \name GL_OES_EGL_image interface 968 */ 969 void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target, 970 struct gl_texture_object *texObj, 971 struct gl_texture_image *texImage, 972 GLeglImageOES image_handle); 973 void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx, 974 struct gl_renderbuffer *rb, 975 void *image_handle); 976 977 /** 978 * \name GL_EXT_EGL_image_storage interface 979 */ 980 void (*EGLImageTargetTexStorage)(struct gl_context *ctx, GLenum target, 981 struct gl_texture_object *texObj, 982 struct gl_texture_image *texImage, 983 GLeglImageOES image_handle); 984 /** 985 * \name GL_EXT_transform_feedback interface 986 */ 987 struct gl_transform_feedback_object * 988 (*NewTransformFeedback)(struct gl_context *ctx, GLuint name); 989 void (*DeleteTransformFeedback)(struct gl_context *ctx, 990 struct gl_transform_feedback_object *obj); 991 void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode, 992 struct gl_transform_feedback_object *obj); 993 void (*EndTransformFeedback)(struct gl_context *ctx, 994 struct gl_transform_feedback_object *obj); 995 void (*PauseTransformFeedback)(struct gl_context *ctx, 996 struct gl_transform_feedback_object *obj); 997 void (*ResumeTransformFeedback)(struct gl_context *ctx, 998 struct gl_transform_feedback_object *obj); 999 1000 /** 1001 * Return the number of vertices written to a stream during the last 1002 * Begin/EndTransformFeedback block. 1003 */ 1004 GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx, 1005 struct gl_transform_feedback_object *obj, 1006 GLuint stream); 1007 1008 /** 1009 * \name GL_NV_texture_barrier interface 1010 */ 1011 void (*TextureBarrier)(struct gl_context *ctx); 1012 1013 /** 1014 * \name GL_ARB_sampler_objects 1015 */ 1016 struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx, 1017 GLuint name); 1018 1019 /** 1020 * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query. 1021 * This should be equivalent to glGetInteger64v(GL_TIMESTAMP); 1022 */ 1023 uint64_t (*GetTimestamp)(struct gl_context *ctx); 1024 1025 /** 1026 * \name GL_ARB_texture_multisample 1027 */ 1028 void (*GetSamplePosition)(struct gl_context *ctx, 1029 struct gl_framebuffer *fb, 1030 GLuint index, 1031 GLfloat *outValue); 1032 1033 /** 1034 * \name NV_vdpau_interop interface 1035 */ 1036 void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target, 1037 GLenum access, GLboolean output, 1038 struct gl_texture_object *texObj, 1039 struct gl_texture_image *texImage, 1040 const GLvoid *vdpSurface, GLuint index); 1041 void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target, 1042 GLenum access, GLboolean output, 1043 struct gl_texture_object *texObj, 1044 struct gl_texture_image *texImage, 1045 const GLvoid *vdpSurface, GLuint index); 1046 1047 /** 1048 * Query reset status for GL_ARB_robustness 1049 * 1050 * Per \c glGetGraphicsResetStatusARB, this function should return a 1051 * non-zero value once after a reset. If a reset is non-atomic, the 1052 * non-zero status should be returned for the duration of the reset. 1053 */ 1054 GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx); 1055 1056 /** 1057 * \name GL_ARB_shader_image_load_store interface. 1058 */ 1059 /** @{ */ 1060 void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers); 1061 /** @} */ 1062 1063 /** 1064 * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier. 1065 * 1066 * On return from this function any framebuffer contents written by 1067 * previous draw commands are guaranteed to be visible from subsequent 1068 * fragment shader invocations using the 1069 * EXT_shader_framebuffer_fetch_non_coherent interface. 1070 */ 1071 /** @{ */ 1072 void (*FramebufferFetchBarrier)(struct gl_context *ctx); 1073 /** @} */ 1074 1075 /** 1076 * \name GL_ARB_compute_shader interface 1077 */ 1078 /*@{*/ 1079 void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups); 1080 void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect); 1081 /*@}*/ 1082 1083 /** 1084 * \name GL_ARB_compute_variable_group_size interface 1085 */ 1086 /*@{*/ 1087 void (*DispatchComputeGroupSize)(struct gl_context *ctx, 1088 const GLuint *num_groups, 1089 const GLuint *group_size); 1090 /*@}*/ 1091 1092 /** 1093 * Query information about memory. Device memory is e.g. VRAM. Staging 1094 * memory is e.g. GART. All sizes are in kilobytes. 1095 */ 1096 void (*QueryMemoryInfo)(struct gl_context *ctx, 1097 struct gl_memory_info *info); 1098 1099 /** 1100 * Indicate that this thread is being used by Mesa as a background drawing 1101 * thread for the given GL context. 1102 * 1103 * If this function is called more than once from any given thread, each 1104 * subsequent call overrides the context that was passed in the previous 1105 * call. Mesa takes advantage of this to re-use a background thread to 1106 * perform drawing on behalf of multiple contexts. 1107 * 1108 * Mesa may sometimes call this function from a non-background thread 1109 * (i.e. a thread that has already been bound to a context using 1110 * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to 1111 * the context that is bound to this thread. 1112 * 1113 * Mesa will only call this function if GL multithreading is enabled. 1114 */ 1115 void (*SetBackgroundContext)(struct gl_context *ctx, 1116 struct util_queue_monitoring *queue_info); 1117 1118 /** 1119 * \name GL_ARB_sparse_buffer interface 1120 */ 1121 /*@{*/ 1122 void (*BufferPageCommitment)(struct gl_context *ctx, 1123 struct gl_buffer_object *bufferObj, 1124 GLintptr offset, GLsizeiptr size, 1125 GLboolean commit); 1126 /*@}*/ 1127 1128 /** 1129 * \name GL_ARB_bindless_texture interface 1130 */ 1131 /*@{*/ 1132 GLuint64 (*NewTextureHandle)(struct gl_context *ctx, 1133 struct gl_texture_object *texObj, 1134 struct gl_sampler_object *sampObj); 1135 void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle); 1136 void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle, 1137 bool resident); 1138 GLuint64 (*NewImageHandle)(struct gl_context *ctx, 1139 struct gl_image_unit *imgObj); 1140 void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle); 1141 void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle, 1142 GLenum access, bool resident); 1143 /*@}*/ 1144 1145 1146 /** 1147 * \name GL_EXT_external_objects interface 1148 */ 1149 /*@{*/ 1150 /** 1151 * Called to allocate a new memory object. Drivers will usually 1152 * allocate/return a subclass of gl_memory_object. 1153 */ 1154 struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx, 1155 GLuint name); 1156 /** 1157 * Called to delete/free a memory object. Drivers should free the 1158 * object and any image data it contains. 1159 */ 1160 void (*DeleteMemoryObject)(struct gl_context *ctx, 1161 struct gl_memory_object *memObj); 1162 1163 /** 1164 * Set the given memory object as the texture's storage. 1165 */ 1166 GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx, 1167 struct gl_texture_object *tex_obj, 1168 struct gl_memory_object *mem_obj, 1169 GLsizei levels, GLsizei width, 1170 GLsizei height, GLsizei depth, 1171 GLuint64 offset); 1172 1173 /** 1174 * Use a memory object as the backing data for a buffer object 1175 */ 1176 GLboolean (*BufferDataMem)(struct gl_context *ctx, 1177 GLenum target, 1178 GLsizeiptrARB size, 1179 struct gl_memory_object *memObj, 1180 GLuint64 offset, 1181 GLenum usage, 1182 struct gl_buffer_object *bufObj); 1183 1184 /** 1185 * Fill uuid with an unique identifier for this driver 1186 * 1187 * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 1188 */ 1189 void (*GetDriverUuid)(struct gl_context *ctx, char *uuid); 1190 1191 /** 1192 * Fill uuid with an unique identifier for the device associated 1193 * to this driver 1194 * 1195 * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 1196 */ 1197 void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid); 1198 1199 /*@}*/ 1200 1201 /** 1202 * \name GL_EXT_external_objects_fd interface 1203 */ 1204 /*@{*/ 1205 /** 1206 * Called to import a memory object. The caller relinquishes ownership 1207 * of fd after the call returns. 1208 * 1209 * Accessing fd after ImportMemoryObjectFd returns results in undefined 1210 * behaviour. This is consistent with EXT_external_object_fd. 1211 */ 1212 void (*ImportMemoryObjectFd)(struct gl_context *ctx, 1213 struct gl_memory_object *memObj, 1214 GLuint64 size, 1215 int fd); 1216 /*@}*/ 1217 1218 /** 1219 * \name GL_ARB_get_program_binary 1220 */ 1221 /*@{*/ 1222 /** 1223 * Calls to retrieve/store a binary serialized copy of the current program. 1224 */ 1225 void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1); 1226 1227 void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx, 1228 struct gl_shader_program *shProg, 1229 struct gl_program *prog); 1230 1231 void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx, 1232 struct gl_shader_program *shProg, 1233 struct gl_program *prog); 1234 /*@}*/ 1235 1236 /** 1237 * \name GL_EXT_semaphore interface 1238 */ 1239 /*@{*/ 1240 /** 1241 * Called to allocate a new semaphore object. Drivers will usually 1242 * allocate/return a subclass of gl_semaphore_object. 1243 */ 1244 struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx, 1245 GLuint name); 1246 /** 1247 * Called to delete/free a semaphore object. Drivers should free the 1248 * object and any associated resources. 1249 */ 1250 void (*DeleteSemaphoreObject)(struct gl_context *ctx, 1251 struct gl_semaphore_object *semObj); 1252 1253 /** 1254 * Introduce an operation to wait for the semaphore object in the GL 1255 * server's command stream 1256 */ 1257 void (*ServerWaitSemaphoreObject)(struct gl_context *ctx, 1258 struct gl_semaphore_object *semObj, 1259 GLuint numBufferBarriers, 1260 struct gl_buffer_object **bufObjs, 1261 GLuint numTextureBarriers, 1262 struct gl_texture_object **texObjs, 1263 const GLenum *srcLayouts); 1264 1265 /** 1266 * Introduce an operation to signal the semaphore object in the GL 1267 * server's command stream 1268 */ 1269 void (*ServerSignalSemaphoreObject)(struct gl_context *ctx, 1270 struct gl_semaphore_object *semObj, 1271 GLuint numBufferBarriers, 1272 struct gl_buffer_object **bufObjs, 1273 GLuint numTextureBarriers, 1274 struct gl_texture_object **texObjs, 1275 const GLenum *dstLayouts); 1276 /*@}*/ 1277 1278 /** 1279 * \name GL_EXT_semaphore_fd interface 1280 */ 1281 /*@{*/ 1282 /** 1283 * Called to import a semaphore object. The caller relinquishes ownership 1284 * of fd after the call returns. 1285 * 1286 * Accessing fd after ImportSemaphoreFd returns results in undefined 1287 * behaviour. This is consistent with EXT_semaphore_fd. 1288 */ 1289 void (*ImportSemaphoreFd)(struct gl_context *ctx, 1290 struct gl_semaphore_object *semObj, 1291 int fd); 1292 /*@}*/ 1293 1294 /** 1295 * \name Disk shader cache functions 1296 */ 1297 /*@{*/ 1298 /** 1299 * Called to initialize gl_program::driver_cache_blob (and size) with a 1300 * ralloc allocated buffer. 1301 * 1302 * This buffer will be saved and restored as part of the gl_program 1303 * serialization and deserialization. 1304 */ 1305 void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx, 1306 struct gl_program *prog); 1307 /*@}*/ 1308 1309 /** 1310 * \name Set the number of compiler threads for ARB_parallel_shader_compile 1311 */ 1312 void (*SetMaxShaderCompilerThreads)(struct gl_context *ctx, unsigned count); 1313 bool (*GetShaderProgramCompletionStatus)(struct gl_context *ctx, 1314 struct gl_shader_program *shprog); 1315 }; 1316 1317 1318 /** 1319 * Per-vertex functions. 1320 * 1321 * These are the functions which can appear between glBegin and glEnd. 1322 * Depending on whether we're inside or outside a glBegin/End pair 1323 * and whether we're in immediate mode or building a display list, these 1324 * functions behave differently. This structure allows us to switch 1325 * between those modes more easily. 1326 * 1327 * Generally, these pointers point to functions in the VBO module. 1328 */ 1329 typedef struct { 1330 void (GLAPIENTRYP ArrayElement)( GLint ); 1331 void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); 1332 void (GLAPIENTRYP Color3fv)( const GLfloat * ); 1333 void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1334 void (GLAPIENTRYP Color4fv)( const GLfloat * ); 1335 void (GLAPIENTRYP EdgeFlag)( GLboolean ); 1336 void (GLAPIENTRYP EvalCoord1f)( GLfloat ); 1337 void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); 1338 void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); 1339 void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); 1340 void (GLAPIENTRYP EvalPoint1)( GLint ); 1341 void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); 1342 void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); 1343 void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); 1344 void (GLAPIENTRYP Indexf)( GLfloat ); 1345 void (GLAPIENTRYP Indexfv)( const GLfloat * ); 1346 void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); 1347 void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); 1348 void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); 1349 void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); 1350 void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); 1351 void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); 1352 void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); 1353 void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); 1354 void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); 1355 void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); 1356 void (GLAPIENTRYP Normal3fv)( const GLfloat * ); 1357 void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); 1358 void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); 1359 void (GLAPIENTRYP TexCoord1f)( GLfloat ); 1360 void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); 1361 void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); 1362 void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); 1363 void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); 1364 void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); 1365 void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1366 void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); 1367 void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); 1368 void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); 1369 void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); 1370 void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); 1371 void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1372 void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); 1373 void (GLAPIENTRYP CallList)( GLuint ); 1374 void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); 1375 void (GLAPIENTRYP Begin)( GLenum ); 1376 void (GLAPIENTRYP End)( void ); 1377 void (GLAPIENTRYP PrimitiveRestartNV)( void ); 1378 /* Originally for GL_NV_vertex_program, now used only dlist.c and friends */ 1379 void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); 1380 void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); 1381 void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); 1382 void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v ); 1383 void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1384 void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); 1385 void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1386 void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); 1387 /* GL_ARB_vertex_program */ 1388 void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); 1389 void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); 1390 void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); 1391 void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v ); 1392 void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1393 void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); 1394 void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1395 void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); 1396 1397 /* GL_EXT_gpu_shader4 / GL 3.0 */ 1398 void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x); 1399 void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y); 1400 void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z); 1401 void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w); 1402 void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v); 1403 void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v); 1404 void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v); 1405 1406 void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x); 1407 void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y); 1408 void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z); 1409 void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); 1410 void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v); 1411 void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v); 1412 void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v); 1413 1414 /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */ 1415 void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value ); 1416 void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value); 1417 1418 void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value ); 1419 void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value); 1420 1421 void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value ); 1422 void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value); 1423 1424 void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords ); 1425 void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords ); 1426 1427 void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords ); 1428 void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords ); 1429 1430 void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords ); 1431 void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords ); 1432 1433 void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords ); 1434 void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords ); 1435 1436 void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords ); 1437 void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1438 void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords ); 1439 void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1440 void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords ); 1441 void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1442 void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords ); 1443 void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1444 1445 void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords ); 1446 void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords ); 1447 1448 void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color ); 1449 void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color ); 1450 1451 void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color ); 1452 void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color ); 1453 1454 void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color ); 1455 void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color ); 1456 1457 void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type, 1458 GLboolean normalized, GLuint value); 1459 void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type, 1460 GLboolean normalized, GLuint value); 1461 void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type, 1462 GLboolean normalized, GLuint value); 1463 void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type, 1464 GLboolean normalized, GLuint value); 1465 void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type, 1466 GLboolean normalized, 1467 const GLuint *value); 1468 void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type, 1469 GLboolean normalized, 1470 const GLuint *value); 1471 void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type, 1472 GLboolean normalized, 1473 const GLuint *value); 1474 void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type, 1475 GLboolean normalized, 1476 const GLuint *value); 1477 1478 /* GL_ARB_vertex_attrib_64bit / GL 4.1 */ 1479 void (GLAPIENTRYP VertexAttribL1d)( GLuint index, GLdouble x); 1480 void (GLAPIENTRYP VertexAttribL2d)( GLuint index, GLdouble x, GLdouble y); 1481 void (GLAPIENTRYP VertexAttribL3d)( GLuint index, GLdouble x, GLdouble y, GLdouble z); 1482 void (GLAPIENTRYP VertexAttribL4d)( GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); 1483 1484 1485 void (GLAPIENTRYP VertexAttribL1dv)( GLuint index, const GLdouble *v); 1486 void (GLAPIENTRYP VertexAttribL2dv)( GLuint index, const GLdouble *v); 1487 void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v); 1488 void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v); 1489 1490 void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x); 1491 void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v); 1492 } GLvertexformat; 1493 1494 1495 #endif /* DD_INCLUDED */ 1496