dd.h revision 01e04c3f
17117f1b4Smrg/** 27117f1b4Smrg * \file dd.h 37117f1b4Smrg * Device driver interfaces. 47117f1b4Smrg */ 57117f1b4Smrg 67117f1b4Smrg/* 77117f1b4Smrg * Mesa 3-D graphics library 87117f1b4Smrg * 97117f1b4Smrg * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 107117f1b4Smrg * 117117f1b4Smrg * Permission is hereby granted, free of charge, to any person obtaining a 127117f1b4Smrg * copy of this software and associated documentation files (the "Software"), 137117f1b4Smrg * to deal in the Software without restriction, including without limitation 147117f1b4Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 157117f1b4Smrg * and/or sell copies of the Software, and to permit persons to whom the 167117f1b4Smrg * Software is furnished to do so, subject to the following conditions: 177117f1b4Smrg * 187117f1b4Smrg * The above copyright notice and this permission notice shall be included 197117f1b4Smrg * in all copies or substantial portions of the Software. 207117f1b4Smrg * 217117f1b4Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 227117f1b4Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 237117f1b4Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24af69d88dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 25af69d88dSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 26af69d88dSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27af69d88dSmrg * OTHER DEALINGS IN THE SOFTWARE. 287117f1b4Smrg */ 297117f1b4Smrg 307117f1b4Smrg 317117f1b4Smrg#ifndef DD_INCLUDED 327117f1b4Smrg#define DD_INCLUDED 337117f1b4Smrg 343464ebd5Sriastradh#include "glheader.h" 3501e04c3fSmrg#include "formats.h" 3601e04c3fSmrg#include "menums.h" 374a49301eSmrg 3801e04c3fSmrgstruct gl_bitmap_atlas; 393464ebd5Sriastradhstruct gl_buffer_object; 403464ebd5Sriastradhstruct gl_context; 413464ebd5Sriastradhstruct gl_display_list; 423464ebd5Sriastradhstruct gl_framebuffer; 43af69d88dSmrgstruct gl_image_unit; 443464ebd5Sriastradhstruct gl_pixelstore_attrib; 453464ebd5Sriastradhstruct gl_program; 463464ebd5Sriastradhstruct gl_renderbuffer; 473464ebd5Sriastradhstruct gl_renderbuffer_attachment; 483464ebd5Sriastradhstruct gl_shader; 493464ebd5Sriastradhstruct gl_shader_program; 503464ebd5Sriastradhstruct gl_texture_image; 513464ebd5Sriastradhstruct gl_texture_object; 5201e04c3fSmrgstruct gl_memory_info; 5301e04c3fSmrgstruct gl_transform_feedback_object; 5401e04c3fSmrgstruct ati_fragment_shader; 5501e04c3fSmrgstruct util_queue_monitoring; 5601e04c3fSmrgstruct _mesa_prim; 5701e04c3fSmrgstruct _mesa_index_buffer; 583464ebd5Sriastradh 593464ebd5Sriastradh/* GL_ARB_vertex_buffer_object */ 604a49301eSmrg/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return 614a49301eSmrg * NULL) if buffer is unavailable for immediate mapping. 624a49301eSmrg * 634a49301eSmrg * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it 644a49301eSmrg * would require more book-keeping in the driver than seems necessary 654a49301eSmrg * at this point. 664a49301eSmrg * 674a49301eSmrg * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't 684a49301eSmrg * want to provoke the driver to throw away the old storage, we will 694a49301eSmrg * respect the contents of already referenced data. 704a49301eSmrg */ 7101e04c3fSmrg#define MESA_MAP_NOWAIT_BIT 0x4000 724a49301eSmrg 737117f1b4Smrg 747117f1b4Smrg/** 757117f1b4Smrg * Device driver function table. 767117f1b4Smrg * Core Mesa uses these function pointers to call into device drivers. 777117f1b4Smrg * Most of these functions directly correspond to OpenGL state commands. 787117f1b4Smrg * Core Mesa will call these functions after error checking has been done 797117f1b4Smrg * so that the drivers don't have to worry about error testing. 807117f1b4Smrg * 817117f1b4Smrg * Vertex transformation/clipping/lighting is patched into the T&L module. 827117f1b4Smrg * Rasterization functions are patched into the swrast module. 837117f1b4Smrg * 847117f1b4Smrg * Note: when new functions are added here, the drivers/common/driverfuncs.c 857117f1b4Smrg * file should be updated too!!! 867117f1b4Smrg */ 877117f1b4Smrgstruct dd_function_table { 887117f1b4Smrg /** 897117f1b4Smrg * Return a string as needed by glGetString(). 907117f1b4Smrg * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be 917117f1b4Smrg * returned. 927117f1b4Smrg */ 933464ebd5Sriastradh const GLubyte * (*GetString)( struct gl_context *ctx, GLenum name ); 947117f1b4Smrg 957117f1b4Smrg /** 967117f1b4Smrg * Notify the driver after Mesa has made some internal state changes. 977117f1b4Smrg * 987117f1b4Smrg * This is in addition to any state change callbacks Mesa may already have 997117f1b4Smrg * made. 1007117f1b4Smrg */ 10101e04c3fSmrg void (*UpdateState)(struct gl_context *ctx); 1027117f1b4Smrg 1037117f1b4Smrg /** 1047117f1b4Smrg * This is called whenever glFinish() is called. 1057117f1b4Smrg */ 1063464ebd5Sriastradh void (*Finish)( struct gl_context *ctx ); 1077117f1b4Smrg 1087117f1b4Smrg /** 1097117f1b4Smrg * This is called whenever glFlush() is called. 1107117f1b4Smrg */ 1113464ebd5Sriastradh void (*Flush)( struct gl_context *ctx ); 1127117f1b4Smrg 1137117f1b4Smrg /** 1147117f1b4Smrg * Clear the color/depth/stencil/accum buffer(s). 1157117f1b4Smrg * \param buffers a bitmask of BUFFER_BIT_* flags indicating which 1167117f1b4Smrg * renderbuffers need to be cleared. 1177117f1b4Smrg */ 1183464ebd5Sriastradh void (*Clear)( struct gl_context *ctx, GLbitfield buffers ); 1197117f1b4Smrg 120c1f859d4Smrg /** 121c1f859d4Smrg * Execute glRasterPos, updating the ctx->Current.Raster fields 122c1f859d4Smrg */ 1233464ebd5Sriastradh void (*RasterPos)( struct gl_context *ctx, const GLfloat v[4] ); 124c1f859d4Smrg 1257117f1b4Smrg /** 1267117f1b4Smrg * \name Image-related functions 1277117f1b4Smrg */ 1287117f1b4Smrg /*@{*/ 1297117f1b4Smrg 1307117f1b4Smrg /** 1317117f1b4Smrg * Called by glDrawPixels(). 1327117f1b4Smrg * \p unpack describes how to unpack the source image data. 1337117f1b4Smrg */ 1343464ebd5Sriastradh void (*DrawPixels)( struct gl_context *ctx, 1357117f1b4Smrg GLint x, GLint y, GLsizei width, GLsizei height, 1367117f1b4Smrg GLenum format, GLenum type, 1377117f1b4Smrg const struct gl_pixelstore_attrib *unpack, 1387117f1b4Smrg const GLvoid *pixels ); 1397117f1b4Smrg 1407117f1b4Smrg /** 1417117f1b4Smrg * Called by glReadPixels(). 1427117f1b4Smrg */ 1433464ebd5Sriastradh void (*ReadPixels)( struct gl_context *ctx, 1447117f1b4Smrg GLint x, GLint y, GLsizei width, GLsizei height, 1457117f1b4Smrg GLenum format, GLenum type, 1467117f1b4Smrg const struct gl_pixelstore_attrib *unpack, 1477117f1b4Smrg GLvoid *dest ); 1487117f1b4Smrg 1497117f1b4Smrg /** 1507117f1b4Smrg * Called by glCopyPixels(). 1517117f1b4Smrg */ 1523464ebd5Sriastradh void (*CopyPixels)( struct gl_context *ctx, GLint srcx, GLint srcy, 1537117f1b4Smrg GLsizei width, GLsizei height, 1547117f1b4Smrg GLint dstx, GLint dsty, GLenum type ); 1557117f1b4Smrg 1567117f1b4Smrg /** 1577117f1b4Smrg * Called by glBitmap(). 1587117f1b4Smrg */ 1593464ebd5Sriastradh void (*Bitmap)( struct gl_context *ctx, 1607117f1b4Smrg GLint x, GLint y, GLsizei width, GLsizei height, 1617117f1b4Smrg const struct gl_pixelstore_attrib *unpack, 1627117f1b4Smrg const GLubyte *bitmap ); 16301e04c3fSmrg 16401e04c3fSmrg /** 16501e04c3fSmrg * Called by display list code for optimized glCallLists/glBitmap rendering 16601e04c3fSmrg * The driver must support texture rectangles of width 1024 or more. 16701e04c3fSmrg */ 16801e04c3fSmrg void (*DrawAtlasBitmaps)(struct gl_context *ctx, 16901e04c3fSmrg const struct gl_bitmap_atlas *atlas, 17001e04c3fSmrg GLuint count, const GLubyte *ids); 1717117f1b4Smrg /*@}*/ 1727117f1b4Smrg 1737117f1b4Smrg 1747117f1b4Smrg /** 1757117f1b4Smrg * \name Texture image functions 1767117f1b4Smrg */ 1777117f1b4Smrg /*@{*/ 1787117f1b4Smrg 1797117f1b4Smrg /** 180af69d88dSmrg * Choose actual hardware texture format given the texture target, the 181af69d88dSmrg * user-provided source image format and type and the desired internal 182af69d88dSmrg * format. In some cases, srcFormat and srcType can be GL_NONE. 183af69d88dSmrg * Note: target may be GL_TEXTURE_CUBE_MAP, but never 184af69d88dSmrg * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ]. 185af69d88dSmrg * Called by glTexImage(), etc. 1867117f1b4Smrg */ 187af69d88dSmrg mesa_format (*ChooseTextureFormat)(struct gl_context *ctx, 188af69d88dSmrg GLenum target, GLint internalFormat, 189af69d88dSmrg GLenum srcFormat, GLenum srcType ); 1907117f1b4Smrg 1917117f1b4Smrg /** 19201e04c3fSmrg * Queries different driver parameters for a particular target and format. 19301e04c3fSmrg * Since ARB_internalformat_query2 introduced several new query parameters 19401e04c3fSmrg * over ARB_internalformat_query, having one driver hook for each parameter 19501e04c3fSmrg * is no longer feasible. So this is the generic entry-point for calls 19601e04c3fSmrg * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has 19701e04c3fSmrg * checked errors and default values. 1987117f1b4Smrg * 199af69d88dSmrg * \param ctx GL context 200af69d88dSmrg * \param target GL target enum 201af69d88dSmrg * \param internalFormat GL format enum 20201e04c3fSmrg * \param pname GL enum that specifies the info to query. 20301e04c3fSmrg * \param params Buffer to hold the result of the query. 204af69d88dSmrg */ 20501e04c3fSmrg void (*QueryInternalFormat)(struct gl_context *ctx, 20601e04c3fSmrg GLenum target, 20701e04c3fSmrg GLenum internalFormat, 20801e04c3fSmrg GLenum pname, 20901e04c3fSmrg GLint *params); 210af69d88dSmrg 2117117f1b4Smrg /** 212af69d88dSmrg * Called by glTexImage[123]D() and glCopyTexImage[12]D() 213af69d88dSmrg * Allocate texture memory and copy the user's image to the buffer. 214af69d88dSmrg * The gl_texture_image fields, etc. will be fully initialized. 215af69d88dSmrg * The parameters are the same as glTexImage3D(), plus: 216af69d88dSmrg * \param dims 1, 2, or 3 indicating glTexImage1/2/3D() 217af69d88dSmrg * \param packing describes how to unpack the source data. 218af69d88dSmrg * \param texImage is the destination texture image. 219af69d88dSmrg */ 220af69d88dSmrg void (*TexImage)(struct gl_context *ctx, GLuint dims, 221af69d88dSmrg struct gl_texture_image *texImage, 222af69d88dSmrg GLenum format, GLenum type, const GLvoid *pixels, 223af69d88dSmrg const struct gl_pixelstore_attrib *packing); 224af69d88dSmrg 2257117f1b4Smrg /** 226af69d88dSmrg * Called by glTexSubImage[123]D(). 227af69d88dSmrg * Replace a subset of the target texture with new texel data. 2287117f1b4Smrg */ 229af69d88dSmrg void (*TexSubImage)(struct gl_context *ctx, GLuint dims, 230af69d88dSmrg struct gl_texture_image *texImage, 231af69d88dSmrg GLint xoffset, GLint yoffset, GLint zoffset, 232af69d88dSmrg GLsizei width, GLsizei height, GLint depth, 233af69d88dSmrg GLenum format, GLenum type, 234af69d88dSmrg const GLvoid *pixels, 235af69d88dSmrg const struct gl_pixelstore_attrib *packing); 236af69d88dSmrg 2377117f1b4Smrg 2387117f1b4Smrg /** 23901e04c3fSmrg * Called by glGetTexImage(), glGetTextureSubImage(). 2407117f1b4Smrg */ 24101e04c3fSmrg void (*GetTexSubImage)(struct gl_context *ctx, 24201e04c3fSmrg GLint xoffset, GLint yoffset, GLint zoffset, 24301e04c3fSmrg GLsizei width, GLsizei height, GLsizei depth, 24401e04c3fSmrg GLenum format, GLenum type, GLvoid *pixels, 24501e04c3fSmrg struct gl_texture_image *texImage); 2467117f1b4Smrg 2477117f1b4Smrg /** 248af69d88dSmrg * Called by glClearTex[Sub]Image 249af69d88dSmrg * 250af69d88dSmrg * Clears a rectangular region of the image to a given value. The 251af69d88dSmrg * clearValue argument is either NULL or points to a single texel to use as 252af69d88dSmrg * the clear value in the same internal format as the texture image. If it 253af69d88dSmrg * is NULL then the texture should be cleared to zeroes. 2547117f1b4Smrg */ 255af69d88dSmrg void (*ClearTexSubImage)(struct gl_context *ctx, 256af69d88dSmrg struct gl_texture_image *texImage, 257af69d88dSmrg GLint xoffset, GLint yoffset, GLint zoffset, 258af69d88dSmrg GLsizei width, GLsizei height, GLsizei depth, 259af69d88dSmrg const GLvoid *clearValue); 2607117f1b4Smrg 2617117f1b4Smrg /** 262af69d88dSmrg * Called by glCopyTex[Sub]Image[123]D(). 263af69d88dSmrg * 264af69d88dSmrg * This function should copy a rectangular region in the rb to a single 265af69d88dSmrg * destination slice, specified by @slice. In the case of 1D array 266af69d88dSmrg * textures (where one GL call can potentially affect multiple destination 267af69d88dSmrg * slices), core mesa takes care of calling this function multiple times, 268af69d88dSmrg * once for each scanline to be copied. 2697117f1b4Smrg */ 270af69d88dSmrg void (*CopyTexSubImage)(struct gl_context *ctx, GLuint dims, 271af69d88dSmrg struct gl_texture_image *texImage, 272af69d88dSmrg GLint xoffset, GLint yoffset, GLint slice, 273af69d88dSmrg struct gl_renderbuffer *rb, 274af69d88dSmrg GLint x, GLint y, 275af69d88dSmrg GLsizei width, GLsizei height); 2767117f1b4Smrg /** 277af69d88dSmrg * Called by glCopyImageSubData(). 278af69d88dSmrg * 27901e04c3fSmrg * This function should copy one 2-D slice from src_teximage or 28001e04c3fSmrg * src_renderbuffer to dst_teximage or dst_renderbuffer. Either the 28101e04c3fSmrg * teximage or renderbuffer pointer will be non-null to indicate which 28201e04c3fSmrg * is the real src/dst. 28301e04c3fSmrg * 28401e04c3fSmrg * If one of the textures is 3-D or is a 1-D or 2-D array 285af69d88dSmrg * texture, this function will be called multiple times: once for each 286af69d88dSmrg * slice. If one of the textures is a cube map, this function will be 287af69d88dSmrg * called once for each face to be copied. 2887117f1b4Smrg */ 289af69d88dSmrg void (*CopyImageSubData)(struct gl_context *ctx, 29001e04c3fSmrg struct gl_texture_image *src_teximage, 29101e04c3fSmrg struct gl_renderbuffer *src_renderbuffer, 292af69d88dSmrg int src_x, int src_y, int src_z, 29301e04c3fSmrg struct gl_texture_image *dst_teximage, 29401e04c3fSmrg struct gl_renderbuffer *dst_renderbuffer, 295af69d88dSmrg int dst_x, int dst_y, int dst_z, 296af69d88dSmrg int src_width, int src_height); 2977117f1b4Smrg 298c1f859d4Smrg /** 299c1f859d4Smrg * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled. 300af69d88dSmrg * Note that if the texture is a cube map, the <target> parameter will 301af69d88dSmrg * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z). 302af69d88dSmrg * texObj->BaseLevel is the level from which to generate the remaining 303af69d88dSmrg * mipmap levels. 304c1f859d4Smrg */ 3053464ebd5Sriastradh void (*GenerateMipmap)(struct gl_context *ctx, GLenum target, 306c1f859d4Smrg struct gl_texture_object *texObj); 307c1f859d4Smrg 3087117f1b4Smrg /** 309af69d88dSmrg * Called by glTexImage, glCompressedTexImage, glCopyTexImage 310af69d88dSmrg * and glTexStorage to check if the dimensions of the texture image 311af69d88dSmrg * are too large. 312af69d88dSmrg * \param target any GL_PROXY_TEXTURE_x target 313af69d88dSmrg * \return GL_TRUE if the image is OK, GL_FALSE if too large 3147117f1b4Smrg */ 3153464ebd5Sriastradh GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target, 31601e04c3fSmrg GLuint numLevels, GLint level, 31701e04c3fSmrg mesa_format format, GLuint numSamples, 3187117f1b4Smrg GLint width, GLint height, 31901e04c3fSmrg GLint depth); 3207117f1b4Smrg /*@}*/ 3217117f1b4Smrg 3227117f1b4Smrg 3237117f1b4Smrg /** 3247117f1b4Smrg * \name Compressed texture functions 3257117f1b4Smrg */ 3267117f1b4Smrg /*@{*/ 3277117f1b4Smrg 3287117f1b4Smrg /** 329af69d88dSmrg * Called by glCompressedTexImage[123]D(). 3307117f1b4Smrg */ 331af69d88dSmrg void (*CompressedTexImage)(struct gl_context *ctx, GLuint dims, 332af69d88dSmrg struct gl_texture_image *texImage, 333af69d88dSmrg GLsizei imageSize, const GLvoid *data); 334af69d88dSmrg 3357117f1b4Smrg /** 336af69d88dSmrg * Called by glCompressedTexSubImage[123]D(). 3377117f1b4Smrg */ 338af69d88dSmrg void (*CompressedTexSubImage)(struct gl_context *ctx, GLuint dims, 339af69d88dSmrg struct gl_texture_image *texImage, 340af69d88dSmrg GLint xoffset, GLint yoffset, GLint zoffset, 34101e04c3fSmrg GLsizei width, GLsizei height, GLsizei depth, 342af69d88dSmrg GLenum format, 343af69d88dSmrg GLsizei imageSize, const GLvoid *data); 3447117f1b4Smrg /*@}*/ 3457117f1b4Smrg 3467117f1b4Smrg /** 347af69d88dSmrg * \name Texture object / image functions 3487117f1b4Smrg */ 3497117f1b4Smrg /*@{*/ 3507117f1b4Smrg 3517117f1b4Smrg /** 352af69d88dSmrg * Called by glBindTexture() and glBindTextures(). 3537117f1b4Smrg */ 354af69d88dSmrg void (*BindTexture)( struct gl_context *ctx, GLuint texUnit, 355af69d88dSmrg GLenum target, struct gl_texture_object *tObj ); 3567117f1b4Smrg 3577117f1b4Smrg /** 358af69d88dSmrg * Called to allocate a new texture object. Drivers will usually 359af69d88dSmrg * allocate/return a subclass of gl_texture_object. 3607117f1b4Smrg */ 361af69d88dSmrg struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx, 362af69d88dSmrg GLuint name, GLenum target); 3637117f1b4Smrg /** 364af69d88dSmrg * Called to delete/free a texture object. Drivers should free the 365af69d88dSmrg * object and any image data it contains. 3667117f1b4Smrg */ 367af69d88dSmrg void (*DeleteTexture)(struct gl_context *ctx, 368af69d88dSmrg struct gl_texture_object *texObj); 3697117f1b4Smrg 370af69d88dSmrg /** Called to allocate a new texture image object. */ 371af69d88dSmrg struct gl_texture_image * (*NewTextureImage)(struct gl_context *ctx); 3727117f1b4Smrg 373af69d88dSmrg /** Called to free a texture image object returned by NewTextureImage() */ 374af69d88dSmrg void (*DeleteTextureImage)(struct gl_context *ctx, 375af69d88dSmrg struct gl_texture_image *); 3767117f1b4Smrg 377af69d88dSmrg /** Called to allocate memory for a single texture image */ 378af69d88dSmrg GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx, 379af69d88dSmrg struct gl_texture_image *texImage); 3807117f1b4Smrg 381af69d88dSmrg /** Free the memory for a single texture image */ 382af69d88dSmrg void (*FreeTextureImageBuffer)(struct gl_context *ctx, 383af69d88dSmrg struct gl_texture_image *texImage); 384af69d88dSmrg 385af69d88dSmrg /** Map a slice of a texture image into user space. 386af69d88dSmrg * Note: for GL_TEXTURE_1D_ARRAY, height must be 1, y must be 0 and slice 387af69d88dSmrg * indicates the 1D array index. 388af69d88dSmrg * \param texImage the texture image 389af69d88dSmrg * \param slice the 3D image slice or array texture slice 390af69d88dSmrg * \param x, y, w, h region of interest 391af69d88dSmrg * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and 392af69d88dSmrg * GL_MAP_INVALIDATE_RANGE_BIT (if writing) 393af69d88dSmrg * \param mapOut returns start of mapping of region of interest 394af69d88dSmrg * \param rowStrideOut returns row stride (in bytes). In the case of a 395af69d88dSmrg * compressed texture, this is the byte stride between one row of blocks 396af69d88dSmrg * and another. 3977117f1b4Smrg */ 398af69d88dSmrg void (*MapTextureImage)(struct gl_context *ctx, 399af69d88dSmrg struct gl_texture_image *texImage, 400af69d88dSmrg GLuint slice, 401af69d88dSmrg GLuint x, GLuint y, GLuint w, GLuint h, 402af69d88dSmrg GLbitfield mode, 403af69d88dSmrg GLubyte **mapOut, GLint *rowStrideOut); 4047117f1b4Smrg 405af69d88dSmrg void (*UnmapTextureImage)(struct gl_context *ctx, 406af69d88dSmrg struct gl_texture_image *texImage, 407af69d88dSmrg GLuint slice); 408af69d88dSmrg 409af69d88dSmrg /** For GL_ARB_texture_storage. Allocate memory for whole mipmap stack. 410af69d88dSmrg * All the gl_texture_images in the texture object will have their 411af69d88dSmrg * dimensions, format, etc. initialized already. 4127117f1b4Smrg */ 413af69d88dSmrg GLboolean (*AllocTextureStorage)(struct gl_context *ctx, 414af69d88dSmrg struct gl_texture_object *texObj, 415af69d88dSmrg GLsizei levels, GLsizei width, 416af69d88dSmrg GLsizei height, GLsizei depth); 417af69d88dSmrg 418af69d88dSmrg /** Called as part of glTextureView to add views to origTexObj */ 419af69d88dSmrg GLboolean (*TextureView)(struct gl_context *ctx, 420af69d88dSmrg struct gl_texture_object *texObj, 421af69d88dSmrg struct gl_texture_object *origTexObj); 4227117f1b4Smrg 4237117f1b4Smrg /** 424af69d88dSmrg * Map a renderbuffer into user space. 425af69d88dSmrg * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT and 426af69d88dSmrg * GL_MAP_INVALIDATE_RANGE_BIT (if writing) 4277117f1b4Smrg */ 428af69d88dSmrg void (*MapRenderbuffer)(struct gl_context *ctx, 429af69d88dSmrg struct gl_renderbuffer *rb, 430af69d88dSmrg GLuint x, GLuint y, GLuint w, GLuint h, 431af69d88dSmrg GLbitfield mode, 43201e04c3fSmrg GLubyte **mapOut, GLint *rowStrideOut, 43301e04c3fSmrg bool flip_y); 434af69d88dSmrg 435af69d88dSmrg void (*UnmapRenderbuffer)(struct gl_context *ctx, 436af69d88dSmrg struct gl_renderbuffer *rb); 4377117f1b4Smrg 4387117f1b4Smrg /** 439af69d88dSmrg * Optional driver entrypoint that binds a non-texture renderbuffer's 440af69d88dSmrg * contents to a texture image. 4417117f1b4Smrg */ 442af69d88dSmrg GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx, 443af69d88dSmrg struct gl_renderbuffer *rb, 444af69d88dSmrg struct gl_texture_image *texImage); 4457117f1b4Smrg /*@}*/ 4467117f1b4Smrg 4477117f1b4Smrg 4487117f1b4Smrg /** 4497117f1b4Smrg * \name Vertex/fragment program functions 4507117f1b4Smrg */ 4517117f1b4Smrg /*@{*/ 4527117f1b4Smrg /** Allocate a new program */ 453af69d88dSmrg struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, 45401e04c3fSmrg GLuint id, bool is_arb_asm); 4557117f1b4Smrg /** Delete a program */ 4563464ebd5Sriastradh void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); 45701e04c3fSmrg /** 45801e04c3fSmrg * Allocate a program to associate with the new ATI fragment shader (optional) 45901e04c3fSmrg */ 46001e04c3fSmrg struct gl_program * (*NewATIfs)(struct gl_context *ctx, 46101e04c3fSmrg struct ati_fragment_shader *curProg); 462cdc920a0Smrg /** 463cdc920a0Smrg * Notify driver that a program string (and GPU code) has been specified 464cdc920a0Smrg * or modified. Return GL_TRUE or GL_FALSE to indicate if the program is 465cdc920a0Smrg * supported by the driver. 466cdc920a0Smrg */ 4673464ebd5Sriastradh GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target, 468cdc920a0Smrg struct gl_program *prog); 4697117f1b4Smrg 470af69d88dSmrg /** 471af69d88dSmrg * Notify driver that the sampler uniforms for the current program have 472af69d88dSmrg * changed. On some drivers, this may require shader recompiles. 473af69d88dSmrg */ 474af69d88dSmrg void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target, 475af69d88dSmrg struct gl_program *prog); 476af69d88dSmrg 4777117f1b4Smrg /** Query if program can be loaded onto hardware */ 4783464ebd5Sriastradh GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target, 4797117f1b4Smrg struct gl_program *prog); 4807117f1b4Smrg 4817117f1b4Smrg /*@}*/ 4827117f1b4Smrg 4833464ebd5Sriastradh /** 4843464ebd5Sriastradh * \name GLSL shader/program functions. 4853464ebd5Sriastradh */ 4863464ebd5Sriastradh /*@{*/ 4873464ebd5Sriastradh /** 4883464ebd5Sriastradh * Called when a shader program is linked. 4893464ebd5Sriastradh * 4903464ebd5Sriastradh * This gives drivers an opportunity to clone the IR and make their 4913464ebd5Sriastradh * own transformations on it for the purposes of code generation. 4923464ebd5Sriastradh */ 493af69d88dSmrg GLboolean (*LinkShader)(struct gl_context *ctx, 494af69d88dSmrg struct gl_shader_program *shader); 4953464ebd5Sriastradh /*@}*/ 4967117f1b4Smrg 49701e04c3fSmrg 49801e04c3fSmrg /** 49901e04c3fSmrg * \name Draw functions. 50001e04c3fSmrg */ 50101e04c3fSmrg /*@{*/ 50201e04c3fSmrg /** 50301e04c3fSmrg * For indirect array drawing: 50401e04c3fSmrg * 50501e04c3fSmrg * typedef struct { 50601e04c3fSmrg * GLuint count; 50701e04c3fSmrg * GLuint primCount; 50801e04c3fSmrg * GLuint first; 50901e04c3fSmrg * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise 51001e04c3fSmrg * } DrawArraysIndirectCommand; 51101e04c3fSmrg * 51201e04c3fSmrg * For indirect indexed drawing: 51301e04c3fSmrg * 51401e04c3fSmrg * typedef struct { 51501e04c3fSmrg * GLuint count; 51601e04c3fSmrg * GLuint primCount; 51701e04c3fSmrg * GLuint firstIndex; 51801e04c3fSmrg * GLint baseVertex; 51901e04c3fSmrg * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise 52001e04c3fSmrg * } DrawElementsIndirectCommand; 52101e04c3fSmrg */ 52201e04c3fSmrg 52301e04c3fSmrg /** 52401e04c3fSmrg * Draw a number of primitives. 52501e04c3fSmrg * \param prims array [nr_prims] describing what to draw (prim type, 52601e04c3fSmrg * vertex count, first index, instance count, etc). 52701e04c3fSmrg * \param ib index buffer for indexed drawing, NULL for array drawing 52801e04c3fSmrg * \param index_bounds_valid are min_index and max_index valid? 52901e04c3fSmrg * \param min_index lowest vertex index used 53001e04c3fSmrg * \param max_index highest vertex index used 53101e04c3fSmrg * \param tfb_vertcount if non-null, indicates which transform feedback 53201e04c3fSmrg * object has the vertex count. 53301e04c3fSmrg * \param tfb_stream If called via DrawTransformFeedbackStream, specifies 53401e04c3fSmrg * the vertex stream buffer from which to get the vertex 53501e04c3fSmrg * count. 53601e04c3fSmrg * \param indirect If any prims are indirect, this specifies the buffer 53701e04c3fSmrg * to find the "DrawArrays/ElementsIndirectCommand" data. 53801e04c3fSmrg * This may be deprecated in the future 53901e04c3fSmrg */ 54001e04c3fSmrg void (*Draw)(struct gl_context *ctx, 54101e04c3fSmrg const struct _mesa_prim *prims, GLuint nr_prims, 54201e04c3fSmrg const struct _mesa_index_buffer *ib, 54301e04c3fSmrg GLboolean index_bounds_valid, 54401e04c3fSmrg GLuint min_index, GLuint max_index, 54501e04c3fSmrg struct gl_transform_feedback_object *tfb_vertcount, 54601e04c3fSmrg unsigned tfb_stream, struct gl_buffer_object *indirect); 54701e04c3fSmrg 54801e04c3fSmrg 54901e04c3fSmrg /** 55001e04c3fSmrg * Draw a primitive, getting the vertex count, instance count, start 55101e04c3fSmrg * vertex, etc. from a buffer object. 55201e04c3fSmrg * \param mode GL_POINTS, GL_LINES, GL_TRIANGLE_STRIP, etc. 55301e04c3fSmrg * \param indirect_data buffer to get "DrawArrays/ElementsIndirectCommand" 55401e04c3fSmrg * data 55501e04c3fSmrg * \param indirect_offset offset of first primitive in indrect_data buffer 55601e04c3fSmrg * \param draw_count number of primitives to draw 55701e04c3fSmrg * \param stride stride, in bytes, between 55801e04c3fSmrg * "DrawArrays/ElementsIndirectCommand" objects 55901e04c3fSmrg * \param indirect_draw_count_buffer if non-NULL specifies a buffer to get 56001e04c3fSmrg * the real draw_count value. Used for 56101e04c3fSmrg * GL_ARB_indirect_parameters. 56201e04c3fSmrg * \param indirect_draw_count_offset offset to the draw_count value in 56301e04c3fSmrg * indirect_draw_count_buffer 56401e04c3fSmrg * \param ib index buffer for indexed drawing, NULL otherwise. 56501e04c3fSmrg */ 56601e04c3fSmrg void (*DrawIndirect)(struct gl_context *ctx, GLuint mode, 56701e04c3fSmrg struct gl_buffer_object *indirect_data, 56801e04c3fSmrg GLsizeiptr indirect_offset, unsigned draw_count, 56901e04c3fSmrg unsigned stride, 57001e04c3fSmrg struct gl_buffer_object *indirect_draw_count_buffer, 57101e04c3fSmrg GLsizeiptr indirect_draw_count_offset, 57201e04c3fSmrg const struct _mesa_index_buffer *ib); 57301e04c3fSmrg /*@}*/ 57401e04c3fSmrg 57501e04c3fSmrg 5767117f1b4Smrg /** 5777117f1b4Smrg * \name State-changing functions. 5787117f1b4Smrg * 5797117f1b4Smrg * \note drawing functions are above. 5807117f1b4Smrg * 5817117f1b4Smrg * These functions are called by their corresponding OpenGL API functions. 5827117f1b4Smrg * They are \e also called by the gl_PopAttrib() function!!! 5837117f1b4Smrg * May add more functions like these to the device driver in the future. 5847117f1b4Smrg */ 5857117f1b4Smrg /*@{*/ 5867117f1b4Smrg /** Specify the alpha test function */ 5873464ebd5Sriastradh void (*AlphaFunc)(struct gl_context *ctx, GLenum func, GLfloat ref); 5887117f1b4Smrg /** Set the blend color */ 5893464ebd5Sriastradh void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]); 5907117f1b4Smrg /** Set the blend equation */ 591af69d88dSmrg void (*BlendEquationSeparate)(struct gl_context *ctx, 592af69d88dSmrg GLenum modeRGB, GLenum modeA); 5937117f1b4Smrg /** Specify pixel arithmetic */ 5943464ebd5Sriastradh void (*BlendFuncSeparate)(struct gl_context *ctx, 5957117f1b4Smrg GLenum sfactorRGB, GLenum dfactorRGB, 5967117f1b4Smrg GLenum sfactorA, GLenum dfactorA); 5977117f1b4Smrg /** Specify a plane against which all geometry is clipped */ 598af69d88dSmrg void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq); 5997117f1b4Smrg /** Enable and disable writing of frame buffer color components */ 6003464ebd5Sriastradh void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask, 6017117f1b4Smrg GLboolean bmask, GLboolean amask ); 6027117f1b4Smrg /** Cause a material color to track the current color */ 6033464ebd5Sriastradh void (*ColorMaterial)(struct gl_context *ctx, GLenum face, GLenum mode); 6047117f1b4Smrg /** Specify whether front- or back-facing facets can be culled */ 6053464ebd5Sriastradh void (*CullFace)(struct gl_context *ctx, GLenum mode); 6067117f1b4Smrg /** Define front- and back-facing polygons */ 6073464ebd5Sriastradh void (*FrontFace)(struct gl_context *ctx, GLenum mode); 6087117f1b4Smrg /** Specify the value used for depth buffer comparisons */ 6093464ebd5Sriastradh void (*DepthFunc)(struct gl_context *ctx, GLenum func); 6107117f1b4Smrg /** Enable or disable writing into the depth buffer */ 6113464ebd5Sriastradh void (*DepthMask)(struct gl_context *ctx, GLboolean flag); 6127117f1b4Smrg /** Specify mapping of depth values from NDC to window coordinates */ 613af69d88dSmrg void (*DepthRange)(struct gl_context *ctx); 6147117f1b4Smrg /** Specify the current buffer for writing */ 61501e04c3fSmrg void (*DrawBuffer)(struct gl_context *ctx); 61601e04c3fSmrg /** Used to allocated any buffers with on-demand creation */ 61701e04c3fSmrg void (*DrawBufferAllocate)(struct gl_context *ctx); 6187117f1b4Smrg /** Enable or disable server-side gl capabilities */ 6193464ebd5Sriastradh void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); 6207117f1b4Smrg /** Specify fog parameters */ 6213464ebd5Sriastradh void (*Fogfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); 6227117f1b4Smrg /** Set light source parameters. 6237117f1b4Smrg * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already 6247117f1b4Smrg * been transformed to eye-space. 6257117f1b4Smrg */ 6263464ebd5Sriastradh void (*Lightfv)(struct gl_context *ctx, GLenum light, 6277117f1b4Smrg GLenum pname, const GLfloat *params ); 6287117f1b4Smrg /** Set the lighting model parameters */ 629af69d88dSmrg void (*LightModelfv)(struct gl_context *ctx, GLenum pname, 630af69d88dSmrg const GLfloat *params); 6317117f1b4Smrg /** Specify the line stipple pattern */ 6323464ebd5Sriastradh void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern ); 6337117f1b4Smrg /** Specify the width of rasterized lines */ 6343464ebd5Sriastradh void (*LineWidth)(struct gl_context *ctx, GLfloat width); 6357117f1b4Smrg /** Specify a logical pixel operation for color index rendering */ 63601e04c3fSmrg void (*LogicOpcode)(struct gl_context *ctx, enum gl_logicop_mode opcode); 6373464ebd5Sriastradh void (*PointParameterfv)(struct gl_context *ctx, GLenum pname, 6387117f1b4Smrg const GLfloat *params); 6397117f1b4Smrg /** Specify the diameter of rasterized points */ 6403464ebd5Sriastradh void (*PointSize)(struct gl_context *ctx, GLfloat size); 6417117f1b4Smrg /** Select a polygon rasterization mode */ 6423464ebd5Sriastradh void (*PolygonMode)(struct gl_context *ctx, GLenum face, GLenum mode); 6437117f1b4Smrg /** Set the scale and units used to calculate depth values */ 64401e04c3fSmrg void (*PolygonOffset)(struct gl_context *ctx, GLfloat factor, GLfloat units, GLfloat clamp); 6457117f1b4Smrg /** Set the polygon stippling pattern */ 6463464ebd5Sriastradh void (*PolygonStipple)(struct gl_context *ctx, const GLubyte *mask ); 6477117f1b4Smrg /* Specifies the current buffer for reading */ 6483464ebd5Sriastradh void (*ReadBuffer)( struct gl_context *ctx, GLenum buffer ); 6497117f1b4Smrg /** Set rasterization mode */ 6503464ebd5Sriastradh void (*RenderMode)(struct gl_context *ctx, GLenum mode ); 6517117f1b4Smrg /** Define the scissor box */ 652af69d88dSmrg void (*Scissor)(struct gl_context *ctx); 6537117f1b4Smrg /** Select flat or smooth shading */ 6543464ebd5Sriastradh void (*ShadeModel)(struct gl_context *ctx, GLenum mode); 6557117f1b4Smrg /** OpenGL 2.0 two-sided StencilFunc */ 6563464ebd5Sriastradh void (*StencilFuncSeparate)(struct gl_context *ctx, GLenum face, GLenum func, 6577117f1b4Smrg GLint ref, GLuint mask); 6587117f1b4Smrg /** OpenGL 2.0 two-sided StencilMask */ 6593464ebd5Sriastradh void (*StencilMaskSeparate)(struct gl_context *ctx, GLenum face, GLuint mask); 6607117f1b4Smrg /** OpenGL 2.0 two-sided StencilOp */ 6613464ebd5Sriastradh void (*StencilOpSeparate)(struct gl_context *ctx, GLenum face, GLenum fail, 6627117f1b4Smrg GLenum zfail, GLenum zpass); 6637117f1b4Smrg /** Control the generation of texture coordinates */ 6643464ebd5Sriastradh void (*TexGen)(struct gl_context *ctx, GLenum coord, GLenum pname, 6657117f1b4Smrg const GLfloat *params); 6667117f1b4Smrg /** Set texture environment parameters */ 6673464ebd5Sriastradh void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, 6687117f1b4Smrg const GLfloat *param); 66901e04c3fSmrg /** Set texture parameter (callee gets param value from the texObj) */ 670af69d88dSmrg void (*TexParameter)(struct gl_context *ctx, 67101e04c3fSmrg struct gl_texture_object *texObj, GLenum pname); 6727117f1b4Smrg /** Set the viewport */ 673af69d88dSmrg void (*Viewport)(struct gl_context *ctx); 6747117f1b4Smrg /*@}*/ 6757117f1b4Smrg 6767117f1b4Smrg 6777117f1b4Smrg /** 6787117f1b4Smrg * \name Vertex/pixel buffer object functions 6797117f1b4Smrg */ 6807117f1b4Smrg /*@{*/ 681af69d88dSmrg struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx, 68201e04c3fSmrg GLuint buffer); 6837117f1b4Smrg 6843464ebd5Sriastradh void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); 6857117f1b4Smrg 686af69d88dSmrg GLboolean (*BufferData)(struct gl_context *ctx, GLenum target, 687af69d88dSmrg GLsizeiptrARB size, const GLvoid *data, GLenum usage, 688af69d88dSmrg GLenum storageFlags, struct gl_buffer_object *obj); 6897117f1b4Smrg 690af69d88dSmrg void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset, 6917117f1b4Smrg GLsizeiptrARB size, const GLvoid *data, 6927117f1b4Smrg struct gl_buffer_object *obj ); 6937117f1b4Smrg 694af69d88dSmrg void (*GetBufferSubData)( struct gl_context *ctx, 6957117f1b4Smrg GLintptrARB offset, GLsizeiptrARB size, 6967117f1b4Smrg GLvoid *data, struct gl_buffer_object *obj ); 6977117f1b4Smrg 698af69d88dSmrg void (*ClearBufferSubData)( struct gl_context *ctx, 699af69d88dSmrg GLintptr offset, GLsizeiptr size, 700af69d88dSmrg const GLvoid *clearValue, 701af69d88dSmrg GLsizeiptr clearValueSize, 702af69d88dSmrg struct gl_buffer_object *obj ); 7037117f1b4Smrg 7043464ebd5Sriastradh void (*CopyBufferSubData)( struct gl_context *ctx, 7054a49301eSmrg struct gl_buffer_object *src, 7064a49301eSmrg struct gl_buffer_object *dst, 7074a49301eSmrg GLintptr readOffset, GLintptr writeOffset, 7084a49301eSmrg GLsizeiptr size ); 7094a49301eSmrg 71001e04c3fSmrg void (*InvalidateBufferSubData)( struct gl_context *ctx, 71101e04c3fSmrg struct gl_buffer_object *obj, 71201e04c3fSmrg GLintptr offset, 71301e04c3fSmrg GLsizeiptr length ); 71401e04c3fSmrg 715af69d88dSmrg /* Returns pointer to the start of the mapped range. 716af69d88dSmrg * May return NULL if MESA_MAP_NOWAIT_BIT is set in access: 7174a49301eSmrg */ 718af69d88dSmrg void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset, 719cdc920a0Smrg GLsizeiptr length, GLbitfield access, 720af69d88dSmrg struct gl_buffer_object *obj, 721af69d88dSmrg gl_map_buffer_index index); 7224a49301eSmrg 723af69d88dSmrg void (*FlushMappedBufferRange)(struct gl_context *ctx, 724cdc920a0Smrg GLintptr offset, GLsizeiptr length, 725af69d88dSmrg struct gl_buffer_object *obj, 726af69d88dSmrg gl_map_buffer_index index); 7274a49301eSmrg 728af69d88dSmrg GLboolean (*UnmapBuffer)( struct gl_context *ctx, 729af69d88dSmrg struct gl_buffer_object *obj, 730af69d88dSmrg gl_map_buffer_index index); 7317117f1b4Smrg /*@}*/ 7327117f1b4Smrg 733cdc920a0Smrg /** 734cdc920a0Smrg * \name Functions for GL_APPLE_object_purgeable 735cdc920a0Smrg */ 736cdc920a0Smrg /*@{*/ 737cdc920a0Smrg /* variations on ObjectPurgeable */ 738af69d88dSmrg GLenum (*BufferObjectPurgeable)(struct gl_context *ctx, 739af69d88dSmrg struct gl_buffer_object *obj, GLenum option); 740af69d88dSmrg GLenum (*RenderObjectPurgeable)(struct gl_context *ctx, 741af69d88dSmrg struct gl_renderbuffer *obj, GLenum option); 742af69d88dSmrg GLenum (*TextureObjectPurgeable)(struct gl_context *ctx, 743af69d88dSmrg struct gl_texture_object *obj, 744af69d88dSmrg GLenum option); 745cdc920a0Smrg 746cdc920a0Smrg /* variations on ObjectUnpurgeable */ 747af69d88dSmrg GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx, 748af69d88dSmrg struct gl_buffer_object *obj, 749af69d88dSmrg GLenum option); 750af69d88dSmrg GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx, 751af69d88dSmrg struct gl_renderbuffer *obj, 752af69d88dSmrg GLenum option); 753af69d88dSmrg GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx, 754af69d88dSmrg struct gl_texture_object *obj, 755af69d88dSmrg GLenum option); 756cdc920a0Smrg /*@}*/ 757cdc920a0Smrg 7587117f1b4Smrg /** 759af69d88dSmrg * \name Functions for GL_EXT_framebuffer_{object,blit,discard}. 7607117f1b4Smrg */ 7617117f1b4Smrg /*@{*/ 762af69d88dSmrg struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, 763af69d88dSmrg GLuint name); 764af69d88dSmrg struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, 765af69d88dSmrg GLuint name); 7663464ebd5Sriastradh void (*BindFramebuffer)(struct gl_context *ctx, GLenum target, 767cdc920a0Smrg struct gl_framebuffer *drawFb, 768cdc920a0Smrg struct gl_framebuffer *readFb); 7693464ebd5Sriastradh void (*FramebufferRenderbuffer)(struct gl_context *ctx, 7707117f1b4Smrg struct gl_framebuffer *fb, 7717117f1b4Smrg GLenum attachment, 7727117f1b4Smrg struct gl_renderbuffer *rb); 7733464ebd5Sriastradh void (*RenderTexture)(struct gl_context *ctx, 7747117f1b4Smrg struct gl_framebuffer *fb, 7757117f1b4Smrg struct gl_renderbuffer_attachment *att); 7763464ebd5Sriastradh void (*FinishRenderTexture)(struct gl_context *ctx, 777af69d88dSmrg struct gl_renderbuffer *rb); 7783464ebd5Sriastradh void (*ValidateFramebuffer)(struct gl_context *ctx, 7794a49301eSmrg struct gl_framebuffer *fb); 7807117f1b4Smrg /*@}*/ 7813464ebd5Sriastradh void (*BlitFramebuffer)(struct gl_context *ctx, 78201e04c3fSmrg struct gl_framebuffer *readFb, 78301e04c3fSmrg struct gl_framebuffer *drawFb, 7847117f1b4Smrg GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 7857117f1b4Smrg GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 7867117f1b4Smrg GLbitfield mask, GLenum filter); 787af69d88dSmrg void (*DiscardFramebuffer)(struct gl_context *ctx, 788af69d88dSmrg GLenum target, GLsizei numAttachments, 789af69d88dSmrg const GLenum *attachments); 7907117f1b4Smrg 79101e04c3fSmrg /** 79201e04c3fSmrg * \name Functions for GL_ARB_sample_locations 79301e04c3fSmrg */ 79401e04c3fSmrg void (*GetProgrammableSampleCaps)(struct gl_context *ctx, 79501e04c3fSmrg const struct gl_framebuffer *fb, 79601e04c3fSmrg GLuint *bits, GLuint *width, GLuint *height); 79701e04c3fSmrg void (*EvaluateDepthValues)(struct gl_context *ctx); 79801e04c3fSmrg 7997117f1b4Smrg /** 8007117f1b4Smrg * \name Query objects 8017117f1b4Smrg */ 8027117f1b4Smrg /*@{*/ 8033464ebd5Sriastradh struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id); 8043464ebd5Sriastradh void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q); 8053464ebd5Sriastradh void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q); 806af69d88dSmrg void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q); 8073464ebd5Sriastradh void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q); 8083464ebd5Sriastradh void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q); 8093464ebd5Sriastradh void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q); 81001e04c3fSmrg /* 81101e04c3fSmrg * \pname the value requested to be written (GL_QUERY_RESULT, etc) 81201e04c3fSmrg * \ptype the type of the value requested to be written: 81301e04c3fSmrg * GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB, 81401e04c3fSmrg * GL_INT, GL_INT64_ARB 81501e04c3fSmrg */ 81601e04c3fSmrg void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q, 81701e04c3fSmrg struct gl_buffer_object *buf, intptr_t offset, 81801e04c3fSmrg GLenum pname, GLenum ptype); 8197117f1b4Smrg /*@}*/ 8207117f1b4Smrg 821af69d88dSmrg /** 822af69d88dSmrg * \name Performance monitors 823af69d88dSmrg */ 824af69d88dSmrg /*@{*/ 82501e04c3fSmrg void (*InitPerfMonitorGroups)(struct gl_context *ctx); 826af69d88dSmrg struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx); 827af69d88dSmrg void (*DeletePerfMonitor)(struct gl_context *ctx, 828af69d88dSmrg struct gl_perf_monitor_object *m); 829af69d88dSmrg GLboolean (*BeginPerfMonitor)(struct gl_context *ctx, 830af69d88dSmrg struct gl_perf_monitor_object *m); 831af69d88dSmrg 832af69d88dSmrg /** Stop an active performance monitor, discarding results. */ 833af69d88dSmrg void (*ResetPerfMonitor)(struct gl_context *ctx, 834af69d88dSmrg struct gl_perf_monitor_object *m); 835af69d88dSmrg void (*EndPerfMonitor)(struct gl_context *ctx, 836af69d88dSmrg struct gl_perf_monitor_object *m); 837af69d88dSmrg GLboolean (*IsPerfMonitorResultAvailable)(struct gl_context *ctx, 838af69d88dSmrg struct gl_perf_monitor_object *m); 839af69d88dSmrg void (*GetPerfMonitorResult)(struct gl_context *ctx, 840af69d88dSmrg struct gl_perf_monitor_object *m, 841af69d88dSmrg GLsizei dataSize, 842af69d88dSmrg GLuint *data, 843af69d88dSmrg GLint *bytesWritten); 844af69d88dSmrg /*@}*/ 845af69d88dSmrg 8467117f1b4Smrg /** 84701e04c3fSmrg * \name Performance Query objects 8487117f1b4Smrg */ 8497117f1b4Smrg /*@{*/ 85001e04c3fSmrg unsigned (*InitPerfQueryInfo)(struct gl_context *ctx); 85101e04c3fSmrg void (*GetPerfQueryInfo)(struct gl_context *ctx, 85201e04c3fSmrg unsigned queryIndex, 85301e04c3fSmrg const char **name, 85401e04c3fSmrg GLuint *dataSize, 85501e04c3fSmrg GLuint *numCounters, 85601e04c3fSmrg GLuint *numActive); 85701e04c3fSmrg void (*GetPerfCounterInfo)(struct gl_context *ctx, 85801e04c3fSmrg unsigned queryIndex, 85901e04c3fSmrg unsigned counterIndex, 86001e04c3fSmrg const char **name, 86101e04c3fSmrg const char **desc, 86201e04c3fSmrg GLuint *offset, 86301e04c3fSmrg GLuint *data_size, 86401e04c3fSmrg GLuint *type_enum, 86501e04c3fSmrg GLuint *data_type_enum, 86601e04c3fSmrg GLuint64 *raw_max); 86701e04c3fSmrg struct gl_perf_query_object * (*NewPerfQueryObject)(struct gl_context *ctx, 86801e04c3fSmrg unsigned queryIndex); 86901e04c3fSmrg void (*DeletePerfQuery)(struct gl_context *ctx, 87001e04c3fSmrg struct gl_perf_query_object *obj); 87101e04c3fSmrg bool (*BeginPerfQuery)(struct gl_context *ctx, 87201e04c3fSmrg struct gl_perf_query_object *obj); 87301e04c3fSmrg void (*EndPerfQuery)(struct gl_context *ctx, 87401e04c3fSmrg struct gl_perf_query_object *obj); 87501e04c3fSmrg void (*WaitPerfQuery)(struct gl_context *ctx, 87601e04c3fSmrg struct gl_perf_query_object *obj); 87701e04c3fSmrg bool (*IsPerfQueryReady)(struct gl_context *ctx, 87801e04c3fSmrg struct gl_perf_query_object *obj); 87901e04c3fSmrg void (*GetPerfQueryData)(struct gl_context *ctx, 88001e04c3fSmrg struct gl_perf_query_object *obj, 88101e04c3fSmrg GLsizei dataSize, 88201e04c3fSmrg GLuint *data, 88301e04c3fSmrg GLuint *bytesWritten); 8847117f1b4Smrg /*@}*/ 8857117f1b4Smrg 88601e04c3fSmrg 8877117f1b4Smrg /** 88801e04c3fSmrg * \name GREMEDY debug/marker functions 8897117f1b4Smrg */ 8907117f1b4Smrg /*@{*/ 89101e04c3fSmrg void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len); 8927117f1b4Smrg /*@}*/ 8937117f1b4Smrg 8947117f1b4Smrg /** 8957117f1b4Smrg * \name Support for multiple T&L engines 8967117f1b4Smrg */ 8977117f1b4Smrg /*@{*/ 8987117f1b4Smrg 8997117f1b4Smrg /** 9007117f1b4Smrg * Set by the driver-supplied T&L engine. 9017117f1b4Smrg * 9027117f1b4Smrg * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). 9037117f1b4Smrg */ 9047117f1b4Smrg GLuint CurrentExecPrimitive; 9057117f1b4Smrg 9067117f1b4Smrg /** 907af69d88dSmrg * Current glBegin state of an in-progress compilation. May be 908af69d88dSmrg * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END 909af69d88dSmrg * or PRIM_UNKNOWN. 9107117f1b4Smrg */ 9117117f1b4Smrg GLuint CurrentSavePrimitive; 9127117f1b4Smrg 9137117f1b4Smrg 9147117f1b4Smrg#define FLUSH_STORED_VERTICES 0x1 9157117f1b4Smrg#define FLUSH_UPDATE_CURRENT 0x2 9167117f1b4Smrg /** 9177117f1b4Smrg * Set by the driver-supplied T&L engine whenever vertices are buffered 918af69d88dSmrg * between glBegin()/glEnd() objects or __struct gl_contextRec::Current 919af69d88dSmrg * is not updated. A bitmask of the FLUSH_x values above. 9207117f1b4Smrg * 9217117f1b4Smrg * The dd_function_table::FlushVertices call below may be used to resolve 9227117f1b4Smrg * these conditions. 9237117f1b4Smrg */ 924af69d88dSmrg GLbitfield NeedFlush; 9257117f1b4Smrg 92601e04c3fSmrg /** Need to call vbo_save_SaveFlushVertices() upon state change? */ 927af69d88dSmrg GLboolean SaveNeedFlush; 9284a49301eSmrg 9297117f1b4Smrg /** 9307117f1b4Smrg * Notify driver that the special derived value _NeedEyeCoords has 9317117f1b4Smrg * changed. 9327117f1b4Smrg */ 9333464ebd5Sriastradh void (*LightingSpaceChange)( struct gl_context *ctx ); 9347117f1b4Smrg 935af69d88dSmrg /**@}*/ 9364a49301eSmrg 9374a49301eSmrg /** 9384a49301eSmrg * \name GL_ARB_sync interfaces 9394a49301eSmrg */ 9404a49301eSmrg /*@{*/ 94101e04c3fSmrg struct gl_sync_object * (*NewSyncObject)(struct gl_context *); 942af69d88dSmrg void (*FenceSync)(struct gl_context *, struct gl_sync_object *, 943af69d88dSmrg GLenum, GLbitfield); 9443464ebd5Sriastradh void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); 9453464ebd5Sriastradh void (*CheckSync)(struct gl_context *, struct gl_sync_object *); 9463464ebd5Sriastradh void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, 9474a49301eSmrg GLbitfield, GLuint64); 9483464ebd5Sriastradh void (*ServerWaitSync)(struct gl_context *, struct gl_sync_object *, 9494a49301eSmrg GLbitfield, GLuint64); 9504a49301eSmrg /*@}*/ 951cdc920a0Smrg 952cdc920a0Smrg /** GL_NV_conditional_render */ 953af69d88dSmrg void (*BeginConditionalRender)(struct gl_context *ctx, 954af69d88dSmrg struct gl_query_object *q, 955cdc920a0Smrg GLenum mode); 956af69d88dSmrg void (*EndConditionalRender)(struct gl_context *ctx, 957af69d88dSmrg struct gl_query_object *q); 958cdc920a0Smrg 959cdc920a0Smrg /** 960cdc920a0Smrg * \name GL_OES_draw_texture interface 961cdc920a0Smrg */ 962cdc920a0Smrg /*@{*/ 9633464ebd5Sriastradh void (*DrawTex)(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 964cdc920a0Smrg GLfloat width, GLfloat height); 965cdc920a0Smrg /*@}*/ 966cdc920a0Smrg 9673464ebd5Sriastradh /** 9683464ebd5Sriastradh * \name GL_OES_EGL_image interface 9693464ebd5Sriastradh */ 9703464ebd5Sriastradh void (*EGLImageTargetTexture2D)(struct gl_context *ctx, GLenum target, 971cdc920a0Smrg struct gl_texture_object *texObj, 972cdc920a0Smrg struct gl_texture_image *texImage, 973cdc920a0Smrg GLeglImageOES image_handle); 9743464ebd5Sriastradh void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx, 975cdc920a0Smrg struct gl_renderbuffer *rb, 976cdc920a0Smrg void *image_handle); 977cdc920a0Smrg 9783464ebd5Sriastradh /** 9793464ebd5Sriastradh * \name GL_EXT_transform_feedback interface 9803464ebd5Sriastradh */ 9813464ebd5Sriastradh struct gl_transform_feedback_object * 9823464ebd5Sriastradh (*NewTransformFeedback)(struct gl_context *ctx, GLuint name); 9833464ebd5Sriastradh void (*DeleteTransformFeedback)(struct gl_context *ctx, 9843464ebd5Sriastradh struct gl_transform_feedback_object *obj); 9853464ebd5Sriastradh void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode, 9863464ebd5Sriastradh struct gl_transform_feedback_object *obj); 9873464ebd5Sriastradh void (*EndTransformFeedback)(struct gl_context *ctx, 9883464ebd5Sriastradh struct gl_transform_feedback_object *obj); 9893464ebd5Sriastradh void (*PauseTransformFeedback)(struct gl_context *ctx, 9903464ebd5Sriastradh struct gl_transform_feedback_object *obj); 9913464ebd5Sriastradh void (*ResumeTransformFeedback)(struct gl_context *ctx, 9923464ebd5Sriastradh struct gl_transform_feedback_object *obj); 993af69d88dSmrg 994af69d88dSmrg /** 995af69d88dSmrg * Return the number of vertices written to a stream during the last 996af69d88dSmrg * Begin/EndTransformFeedback block. 997af69d88dSmrg */ 998af69d88dSmrg GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx, 999af69d88dSmrg struct gl_transform_feedback_object *obj, 1000af69d88dSmrg GLuint stream); 10013464ebd5Sriastradh 10023464ebd5Sriastradh /** 10033464ebd5Sriastradh * \name GL_NV_texture_barrier interface 10043464ebd5Sriastradh */ 10053464ebd5Sriastradh void (*TextureBarrier)(struct gl_context *ctx); 10063464ebd5Sriastradh 10073464ebd5Sriastradh /** 10083464ebd5Sriastradh * \name GL_ARB_sampler_objects 10093464ebd5Sriastradh */ 10103464ebd5Sriastradh struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx, 10113464ebd5Sriastradh GLuint name); 1012af69d88dSmrg 1013af69d88dSmrg /** 1014af69d88dSmrg * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query. 1015af69d88dSmrg * This should be equivalent to glGetInteger64v(GL_TIMESTAMP); 1016af69d88dSmrg */ 1017af69d88dSmrg uint64_t (*GetTimestamp)(struct gl_context *ctx); 1018af69d88dSmrg 1019af69d88dSmrg /** 1020af69d88dSmrg * \name GL_ARB_texture_multisample 1021af69d88dSmrg */ 1022af69d88dSmrg void (*GetSamplePosition)(struct gl_context *ctx, 1023af69d88dSmrg struct gl_framebuffer *fb, 1024af69d88dSmrg GLuint index, 1025af69d88dSmrg GLfloat *outValue); 1026af69d88dSmrg 1027af69d88dSmrg /** 1028af69d88dSmrg * \name NV_vdpau_interop interface 1029af69d88dSmrg */ 1030af69d88dSmrg void (*VDPAUMapSurface)(struct gl_context *ctx, GLenum target, 1031af69d88dSmrg GLenum access, GLboolean output, 1032af69d88dSmrg struct gl_texture_object *texObj, 1033af69d88dSmrg struct gl_texture_image *texImage, 1034af69d88dSmrg const GLvoid *vdpSurface, GLuint index); 1035af69d88dSmrg void (*VDPAUUnmapSurface)(struct gl_context *ctx, GLenum target, 1036af69d88dSmrg GLenum access, GLboolean output, 1037af69d88dSmrg struct gl_texture_object *texObj, 1038af69d88dSmrg struct gl_texture_image *texImage, 1039af69d88dSmrg const GLvoid *vdpSurface, GLuint index); 1040af69d88dSmrg 1041af69d88dSmrg /** 1042af69d88dSmrg * Query reset status for GL_ARB_robustness 1043af69d88dSmrg * 1044af69d88dSmrg * Per \c glGetGraphicsResetStatusARB, this function should return a 1045af69d88dSmrg * non-zero value once after a reset. If a reset is non-atomic, the 1046af69d88dSmrg * non-zero status should be returned for the duration of the reset. 1047af69d88dSmrg */ 1048af69d88dSmrg GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx); 1049af69d88dSmrg 1050af69d88dSmrg /** 1051af69d88dSmrg * \name GL_ARB_shader_image_load_store interface. 1052af69d88dSmrg */ 1053af69d88dSmrg /** @{ */ 1054af69d88dSmrg void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers); 1055af69d88dSmrg /** @} */ 105601e04c3fSmrg 105701e04c3fSmrg /** 105801e04c3fSmrg * GL_EXT_shader_framebuffer_fetch_non_coherent rendering barrier. 105901e04c3fSmrg * 106001e04c3fSmrg * On return from this function any framebuffer contents written by 106101e04c3fSmrg * previous draw commands are guaranteed to be visible from subsequent 106201e04c3fSmrg * fragment shader invocations using the 106301e04c3fSmrg * EXT_shader_framebuffer_fetch_non_coherent interface. 106401e04c3fSmrg */ 106501e04c3fSmrg /** @{ */ 106601e04c3fSmrg void (*FramebufferFetchBarrier)(struct gl_context *ctx); 106701e04c3fSmrg /** @} */ 106801e04c3fSmrg 106901e04c3fSmrg /** 107001e04c3fSmrg * \name GL_ARB_compute_shader interface 107101e04c3fSmrg */ 107201e04c3fSmrg /*@{*/ 107301e04c3fSmrg void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups); 107401e04c3fSmrg void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect); 107501e04c3fSmrg /*@}*/ 107601e04c3fSmrg 107701e04c3fSmrg /** 107801e04c3fSmrg * \name GL_ARB_compute_variable_group_size interface 107901e04c3fSmrg */ 108001e04c3fSmrg /*@{*/ 108101e04c3fSmrg void (*DispatchComputeGroupSize)(struct gl_context *ctx, 108201e04c3fSmrg const GLuint *num_groups, 108301e04c3fSmrg const GLuint *group_size); 108401e04c3fSmrg /*@}*/ 108501e04c3fSmrg 108601e04c3fSmrg /** 108701e04c3fSmrg * Query information about memory. Device memory is e.g. VRAM. Staging 108801e04c3fSmrg * memory is e.g. GART. All sizes are in kilobytes. 108901e04c3fSmrg */ 109001e04c3fSmrg void (*QueryMemoryInfo)(struct gl_context *ctx, 109101e04c3fSmrg struct gl_memory_info *info); 109201e04c3fSmrg 109301e04c3fSmrg /** 109401e04c3fSmrg * Indicate that this thread is being used by Mesa as a background drawing 109501e04c3fSmrg * thread for the given GL context. 109601e04c3fSmrg * 109701e04c3fSmrg * If this function is called more than once from any given thread, each 109801e04c3fSmrg * subsequent call overrides the context that was passed in the previous 109901e04c3fSmrg * call. Mesa takes advantage of this to re-use a background thread to 110001e04c3fSmrg * perform drawing on behalf of multiple contexts. 110101e04c3fSmrg * 110201e04c3fSmrg * Mesa may sometimes call this function from a non-background thread 110301e04c3fSmrg * (i.e. a thread that has already been bound to a context using 110401e04c3fSmrg * __DriverAPIRec::MakeCurrent()); when this happens, ctx will be equal to 110501e04c3fSmrg * the context that is bound to this thread. 110601e04c3fSmrg * 110701e04c3fSmrg * Mesa will only call this function if GL multithreading is enabled. 110801e04c3fSmrg */ 110901e04c3fSmrg void (*SetBackgroundContext)(struct gl_context *ctx, 111001e04c3fSmrg struct util_queue_monitoring *queue_info); 111101e04c3fSmrg 111201e04c3fSmrg /** 111301e04c3fSmrg * \name GL_ARB_sparse_buffer interface 111401e04c3fSmrg */ 111501e04c3fSmrg /*@{*/ 111601e04c3fSmrg void (*BufferPageCommitment)(struct gl_context *ctx, 111701e04c3fSmrg struct gl_buffer_object *bufferObj, 111801e04c3fSmrg GLintptr offset, GLsizeiptr size, 111901e04c3fSmrg GLboolean commit); 112001e04c3fSmrg /*@}*/ 112101e04c3fSmrg 112201e04c3fSmrg /** 112301e04c3fSmrg * \name GL_ARB_bindless_texture interface 112401e04c3fSmrg */ 112501e04c3fSmrg /*@{*/ 112601e04c3fSmrg GLuint64 (*NewTextureHandle)(struct gl_context *ctx, 112701e04c3fSmrg struct gl_texture_object *texObj, 112801e04c3fSmrg struct gl_sampler_object *sampObj); 112901e04c3fSmrg void (*DeleteTextureHandle)(struct gl_context *ctx, GLuint64 handle); 113001e04c3fSmrg void (*MakeTextureHandleResident)(struct gl_context *ctx, GLuint64 handle, 113101e04c3fSmrg bool resident); 113201e04c3fSmrg GLuint64 (*NewImageHandle)(struct gl_context *ctx, 113301e04c3fSmrg struct gl_image_unit *imgObj); 113401e04c3fSmrg void (*DeleteImageHandle)(struct gl_context *ctx, GLuint64 handle); 113501e04c3fSmrg void (*MakeImageHandleResident)(struct gl_context *ctx, GLuint64 handle, 113601e04c3fSmrg GLenum access, bool resident); 113701e04c3fSmrg /*@}*/ 113801e04c3fSmrg 113901e04c3fSmrg 114001e04c3fSmrg /** 114101e04c3fSmrg * \name GL_EXT_external_objects interface 114201e04c3fSmrg */ 114301e04c3fSmrg /*@{*/ 114401e04c3fSmrg /** 114501e04c3fSmrg * Called to allocate a new memory object. Drivers will usually 114601e04c3fSmrg * allocate/return a subclass of gl_memory_object. 114701e04c3fSmrg */ 114801e04c3fSmrg struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx, 114901e04c3fSmrg GLuint name); 115001e04c3fSmrg /** 115101e04c3fSmrg * Called to delete/free a memory object. Drivers should free the 115201e04c3fSmrg * object and any image data it contains. 115301e04c3fSmrg */ 115401e04c3fSmrg void (*DeleteMemoryObject)(struct gl_context *ctx, 115501e04c3fSmrg struct gl_memory_object *memObj); 115601e04c3fSmrg 115701e04c3fSmrg /** 115801e04c3fSmrg * Set the given memory object as the texture's storage. 115901e04c3fSmrg */ 116001e04c3fSmrg GLboolean (*SetTextureStorageForMemoryObject)(struct gl_context *ctx, 116101e04c3fSmrg struct gl_texture_object *tex_obj, 116201e04c3fSmrg struct gl_memory_object *mem_obj, 116301e04c3fSmrg GLsizei levels, GLsizei width, 116401e04c3fSmrg GLsizei height, GLsizei depth, 116501e04c3fSmrg GLuint64 offset); 116601e04c3fSmrg 116701e04c3fSmrg /** 116801e04c3fSmrg * Use a memory object as the backing data for a buffer object 116901e04c3fSmrg */ 117001e04c3fSmrg GLboolean (*BufferDataMem)(struct gl_context *ctx, 117101e04c3fSmrg GLenum target, 117201e04c3fSmrg GLsizeiptrARB size, 117301e04c3fSmrg struct gl_memory_object *memObj, 117401e04c3fSmrg GLuint64 offset, 117501e04c3fSmrg GLenum usage, 117601e04c3fSmrg struct gl_buffer_object *bufObj); 117701e04c3fSmrg 117801e04c3fSmrg /** 117901e04c3fSmrg * Fill uuid with an unique identifier for this driver 118001e04c3fSmrg * 118101e04c3fSmrg * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 118201e04c3fSmrg */ 118301e04c3fSmrg void (*GetDriverUuid)(struct gl_context *ctx, char *uuid); 118401e04c3fSmrg 118501e04c3fSmrg /** 118601e04c3fSmrg * Fill uuid with an unique identifier for the device associated 118701e04c3fSmrg * to this driver 118801e04c3fSmrg * 118901e04c3fSmrg * uuid must point to GL_UUID_SIZE_EXT bytes of available memory 119001e04c3fSmrg */ 119101e04c3fSmrg void (*GetDeviceUuid)(struct gl_context *ctx, char *uuid); 119201e04c3fSmrg 119301e04c3fSmrg /*@}*/ 119401e04c3fSmrg 119501e04c3fSmrg /** 119601e04c3fSmrg * \name GL_EXT_external_objects_fd interface 119701e04c3fSmrg */ 119801e04c3fSmrg /*@{*/ 119901e04c3fSmrg /** 120001e04c3fSmrg * Called to import a memory object. The caller relinquishes ownership 120101e04c3fSmrg * of fd after the call returns. 120201e04c3fSmrg * 120301e04c3fSmrg * Accessing fd after ImportMemoryObjectFd returns results in undefined 120401e04c3fSmrg * behaviour. This is consistent with EXT_external_object_fd. 120501e04c3fSmrg */ 120601e04c3fSmrg void (*ImportMemoryObjectFd)(struct gl_context *ctx, 120701e04c3fSmrg struct gl_memory_object *memObj, 120801e04c3fSmrg GLuint64 size, 120901e04c3fSmrg int fd); 121001e04c3fSmrg /*@}*/ 121101e04c3fSmrg 121201e04c3fSmrg /** 121301e04c3fSmrg * \name GL_ARB_get_program_binary 121401e04c3fSmrg */ 121501e04c3fSmrg /*@{*/ 121601e04c3fSmrg /** 121701e04c3fSmrg * Calls to retrieve/store a binary serialized copy of the current program. 121801e04c3fSmrg */ 121901e04c3fSmrg void (*GetProgramBinaryDriverSHA1)(struct gl_context *ctx, uint8_t *sha1); 122001e04c3fSmrg 122101e04c3fSmrg void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx, 122201e04c3fSmrg struct gl_shader_program *shProg, 122301e04c3fSmrg struct gl_program *prog); 122401e04c3fSmrg 122501e04c3fSmrg void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx, 122601e04c3fSmrg struct gl_shader_program *shProg, 122701e04c3fSmrg struct gl_program *prog); 122801e04c3fSmrg /*@}*/ 122901e04c3fSmrg 123001e04c3fSmrg /** 123101e04c3fSmrg * \name GL_EXT_semaphore interface 123201e04c3fSmrg */ 123301e04c3fSmrg /*@{*/ 123401e04c3fSmrg /** 123501e04c3fSmrg * Called to allocate a new semaphore object. Drivers will usually 123601e04c3fSmrg * allocate/return a subclass of gl_semaphore_object. 123701e04c3fSmrg */ 123801e04c3fSmrg struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx, 123901e04c3fSmrg GLuint name); 124001e04c3fSmrg /** 124101e04c3fSmrg * Called to delete/free a semaphore object. Drivers should free the 124201e04c3fSmrg * object and any associated resources. 124301e04c3fSmrg */ 124401e04c3fSmrg void (*DeleteSemaphoreObject)(struct gl_context *ctx, 124501e04c3fSmrg struct gl_semaphore_object *semObj); 124601e04c3fSmrg 124701e04c3fSmrg /** 124801e04c3fSmrg * Introduce an operation to wait for the semaphore object in the GL 124901e04c3fSmrg * server's command stream 125001e04c3fSmrg */ 125101e04c3fSmrg void (*ServerWaitSemaphoreObject)(struct gl_context *ctx, 125201e04c3fSmrg struct gl_semaphore_object *semObj, 125301e04c3fSmrg GLuint numBufferBarriers, 125401e04c3fSmrg struct gl_buffer_object **bufObjs, 125501e04c3fSmrg GLuint numTextureBarriers, 125601e04c3fSmrg struct gl_texture_object **texObjs, 125701e04c3fSmrg const GLenum *srcLayouts); 125801e04c3fSmrg 125901e04c3fSmrg /** 126001e04c3fSmrg * Introduce an operation to signal the semaphore object in the GL 126101e04c3fSmrg * server's command stream 126201e04c3fSmrg */ 126301e04c3fSmrg void (*ServerSignalSemaphoreObject)(struct gl_context *ctx, 126401e04c3fSmrg struct gl_semaphore_object *semObj, 126501e04c3fSmrg GLuint numBufferBarriers, 126601e04c3fSmrg struct gl_buffer_object **bufObjs, 126701e04c3fSmrg GLuint numTextureBarriers, 126801e04c3fSmrg struct gl_texture_object **texObjs, 126901e04c3fSmrg const GLenum *dstLayouts); 127001e04c3fSmrg /*@}*/ 127101e04c3fSmrg 127201e04c3fSmrg /** 127301e04c3fSmrg * \name GL_EXT_semaphore_fd interface 127401e04c3fSmrg */ 127501e04c3fSmrg /*@{*/ 127601e04c3fSmrg /** 127701e04c3fSmrg * Called to import a semaphore object. The caller relinquishes ownership 127801e04c3fSmrg * of fd after the call returns. 127901e04c3fSmrg * 128001e04c3fSmrg * Accessing fd after ImportSemaphoreFd returns results in undefined 128101e04c3fSmrg * behaviour. This is consistent with EXT_semaphore_fd. 128201e04c3fSmrg */ 128301e04c3fSmrg void (*ImportSemaphoreFd)(struct gl_context *ctx, 128401e04c3fSmrg struct gl_semaphore_object *semObj, 128501e04c3fSmrg int fd); 128601e04c3fSmrg /*@}*/ 128701e04c3fSmrg 128801e04c3fSmrg /** 128901e04c3fSmrg * \name Disk shader cache functions 129001e04c3fSmrg */ 129101e04c3fSmrg /*@{*/ 129201e04c3fSmrg /** 129301e04c3fSmrg * Called to initialize gl_program::driver_cache_blob (and size) with a 129401e04c3fSmrg * ralloc allocated buffer. 129501e04c3fSmrg * 129601e04c3fSmrg * This buffer will be saved and restored as part of the gl_program 129701e04c3fSmrg * serialization and deserialization. 129801e04c3fSmrg */ 129901e04c3fSmrg void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx, 130001e04c3fSmrg struct gl_program *prog); 130101e04c3fSmrg /*@}*/ 13027117f1b4Smrg}; 13037117f1b4Smrg 13047117f1b4Smrg 13057117f1b4Smrg/** 1306af69d88dSmrg * Per-vertex functions. 13077117f1b4Smrg * 1308af69d88dSmrg * These are the functions which can appear between glBegin and glEnd. 1309af69d88dSmrg * Depending on whether we're inside or outside a glBegin/End pair 1310af69d88dSmrg * and whether we're in immediate mode or building a display list, these 1311af69d88dSmrg * functions behave differently. This structure allows us to switch 1312af69d88dSmrg * between those modes more easily. 13137117f1b4Smrg * 1314af69d88dSmrg * Generally, these pointers point to functions in the VBO module. 13157117f1b4Smrg */ 13167117f1b4Smrgtypedef struct { 13173464ebd5Sriastradh void (GLAPIENTRYP ArrayElement)( GLint ); 13187117f1b4Smrg void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); 13197117f1b4Smrg void (GLAPIENTRYP Color3fv)( const GLfloat * ); 13207117f1b4Smrg void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 13217117f1b4Smrg void (GLAPIENTRYP Color4fv)( const GLfloat * ); 13227117f1b4Smrg void (GLAPIENTRYP EdgeFlag)( GLboolean ); 13233464ebd5Sriastradh void (GLAPIENTRYP EvalCoord1f)( GLfloat ); 13243464ebd5Sriastradh void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); 13253464ebd5Sriastradh void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); 13263464ebd5Sriastradh void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); 13273464ebd5Sriastradh void (GLAPIENTRYP EvalPoint1)( GLint ); 13283464ebd5Sriastradh void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); 13297117f1b4Smrg void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); 13307117f1b4Smrg void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); 13317117f1b4Smrg void (GLAPIENTRYP Indexf)( GLfloat ); 13327117f1b4Smrg void (GLAPIENTRYP Indexfv)( const GLfloat * ); 13333464ebd5Sriastradh void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); 13347117f1b4Smrg void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); 13357117f1b4Smrg void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); 13367117f1b4Smrg void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); 13377117f1b4Smrg void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); 13387117f1b4Smrg void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); 13397117f1b4Smrg void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); 13407117f1b4Smrg void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); 13417117f1b4Smrg void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); 13427117f1b4Smrg void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); 13437117f1b4Smrg void (GLAPIENTRYP Normal3fv)( const GLfloat * ); 13447117f1b4Smrg void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); 13457117f1b4Smrg void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); 13467117f1b4Smrg void (GLAPIENTRYP TexCoord1f)( GLfloat ); 13477117f1b4Smrg void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); 13487117f1b4Smrg void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); 13497117f1b4Smrg void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); 13507117f1b4Smrg void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); 13517117f1b4Smrg void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); 13527117f1b4Smrg void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 13537117f1b4Smrg void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); 13547117f1b4Smrg void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); 13557117f1b4Smrg void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); 13567117f1b4Smrg void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); 13577117f1b4Smrg void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); 13587117f1b4Smrg void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 13597117f1b4Smrg void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); 13603464ebd5Sriastradh void (GLAPIENTRYP CallList)( GLuint ); 13613464ebd5Sriastradh void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); 13627117f1b4Smrg void (GLAPIENTRYP Begin)( GLenum ); 13637117f1b4Smrg void (GLAPIENTRYP End)( void ); 13643464ebd5Sriastradh void (GLAPIENTRYP PrimitiveRestartNV)( void ); 1365af69d88dSmrg /* Originally for GL_NV_vertex_program, now used only dlist.c and friends */ 13667117f1b4Smrg void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); 13677117f1b4Smrg void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); 13687117f1b4Smrg void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); 13697117f1b4Smrg void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v ); 13707117f1b4Smrg void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 13717117f1b4Smrg void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); 13727117f1b4Smrg void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 13737117f1b4Smrg void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); 13743464ebd5Sriastradh /* GL_ARB_vertex_program */ 13757117f1b4Smrg void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); 13767117f1b4Smrg void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); 13777117f1b4Smrg void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); 13787117f1b4Smrg void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v ); 13797117f1b4Smrg void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 13807117f1b4Smrg void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); 13817117f1b4Smrg void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 13827117f1b4Smrg void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); 13833464ebd5Sriastradh 13843464ebd5Sriastradh /* GL_EXT_gpu_shader4 / GL 3.0 */ 13853464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x); 13863464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y); 13873464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z); 13883464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w); 13893464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v); 13903464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v); 13913464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v); 13923464ebd5Sriastradh 13933464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x); 13943464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y); 13953464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z); 13963464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); 13973464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v); 13983464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v); 13993464ebd5Sriastradh void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v); 14003464ebd5Sriastradh 1401af69d88dSmrg /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */ 1402af69d88dSmrg void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value ); 1403af69d88dSmrg void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value); 1404af69d88dSmrg 1405af69d88dSmrg void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value ); 1406af69d88dSmrg void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value); 1407af69d88dSmrg 1408af69d88dSmrg void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value ); 1409af69d88dSmrg void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value); 1410af69d88dSmrg 1411af69d88dSmrg void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords ); 1412af69d88dSmrg void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords ); 1413af69d88dSmrg 1414af69d88dSmrg void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords ); 1415af69d88dSmrg void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords ); 1416af69d88dSmrg 1417af69d88dSmrg void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords ); 1418af69d88dSmrg void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords ); 1419af69d88dSmrg 1420af69d88dSmrg void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords ); 1421af69d88dSmrg void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords ); 1422af69d88dSmrg 1423af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords ); 1424af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1425af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords ); 1426af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1427af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords ); 1428af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1429af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords ); 1430af69d88dSmrg void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords ); 1431af69d88dSmrg 1432af69d88dSmrg void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords ); 1433af69d88dSmrg void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords ); 1434af69d88dSmrg 1435af69d88dSmrg void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color ); 1436af69d88dSmrg void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color ); 1437af69d88dSmrg 1438af69d88dSmrg void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color ); 1439af69d88dSmrg void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color ); 1440af69d88dSmrg 1441af69d88dSmrg void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color ); 1442af69d88dSmrg void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color ); 1443af69d88dSmrg 1444af69d88dSmrg void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type, 1445af69d88dSmrg GLboolean normalized, GLuint value); 1446af69d88dSmrg void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type, 1447af69d88dSmrg GLboolean normalized, GLuint value); 1448af69d88dSmrg void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type, 1449af69d88dSmrg GLboolean normalized, GLuint value); 1450af69d88dSmrg void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type, 1451af69d88dSmrg GLboolean normalized, GLuint value); 1452af69d88dSmrg void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type, 1453af69d88dSmrg GLboolean normalized, 1454af69d88dSmrg const GLuint *value); 1455af69d88dSmrg void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type, 1456af69d88dSmrg GLboolean normalized, 1457af69d88dSmrg const GLuint *value); 1458af69d88dSmrg void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type, 1459af69d88dSmrg GLboolean normalized, 1460af69d88dSmrg const GLuint *value); 1461af69d88dSmrg void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type, 1462af69d88dSmrg GLboolean normalized, 1463af69d88dSmrg const GLuint *value); 146401e04c3fSmrg 146501e04c3fSmrg /* GL_ARB_vertex_attrib_64bit / GL 4.1 */ 146601e04c3fSmrg void (GLAPIENTRYP VertexAttribL1d)( GLuint index, GLdouble x); 146701e04c3fSmrg void (GLAPIENTRYP VertexAttribL2d)( GLuint index, GLdouble x, GLdouble y); 146801e04c3fSmrg void (GLAPIENTRYP VertexAttribL3d)( GLuint index, GLdouble x, GLdouble y, GLdouble z); 146901e04c3fSmrg void (GLAPIENTRYP VertexAttribL4d)( GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); 147001e04c3fSmrg 147101e04c3fSmrg 147201e04c3fSmrg void (GLAPIENTRYP VertexAttribL1dv)( GLuint index, const GLdouble *v); 147301e04c3fSmrg void (GLAPIENTRYP VertexAttribL2dv)( GLuint index, const GLdouble *v); 147401e04c3fSmrg void (GLAPIENTRYP VertexAttribL3dv)( GLuint index, const GLdouble *v); 147501e04c3fSmrg void (GLAPIENTRYP VertexAttribL4dv)( GLuint index, const GLdouble *v); 147601e04c3fSmrg 147701e04c3fSmrg void (GLAPIENTRYP VertexAttribL1ui64ARB)( GLuint index, GLuint64EXT x); 147801e04c3fSmrg void (GLAPIENTRYP VertexAttribL1ui64vARB)( GLuint index, const GLuint64EXT *v); 14797117f1b4Smrg} GLvertexformat; 14807117f1b4Smrg 14817117f1b4Smrg 14827117f1b4Smrg#endif /* DD_INCLUDED */ 1483