/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
-struct gl_pixelstore_attrib;
+#include "glheader.h"
+
+struct gl_buffer_object;
+struct gl_context;
struct gl_display_list;
+struct gl_framebuffer;
+struct gl_pixelstore_attrib;
+struct gl_program;
+struct gl_renderbuffer;
+struct gl_renderbuffer_attachment;
+struct gl_shader;
+struct gl_shader_program;
+struct gl_texture_image;
+struct gl_texture_object;
/* GL_ARB_vertex_buffer_object */
/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
/*@{*/
/**
- * Choose texture format.
- *
- * This is called by the \c _mesa_store_tex[sub]image[123]d() fallback
- * functions. The driver should examine \p internalFormat and return a
- * gl_format value.
+ * Choose actual hardware texture format given the user-provided source
+ * image format and type and the desired internal format. In some
+ * cases, srcFormat and srcType can be GL_NONE.
+ * Called by glTexImage(), etc.
*/
- GLuint (*ChooseTextureFormat)( struct gl_context *ctx, GLint internalFormat,
+ gl_format (*ChooseTextureFormat)( struct gl_context *ctx, GLint internalFormat,
GLenum srcFormat, GLenum srcType );
/**
- * Called by glTexImage1D().
- *
- * \param target user specified.
- * \param format user specified.
- * \param type user specified.
- * \param pixels user specified.
- * \param packing indicates the image packing of pixels.
+ * Called by glTexImage1D(). Simply copy the source texture data into the
+ * destination texture memory. The gl_texture_image fields, etc. will be
+ * fully initialized.
+ * The parameters are the same as glTexImage1D(), plus:
+ * \param packing describes how to unpack the source data.
* \param texObj is the target texture object.
- * \param texImage is the target texture image. It will have the texture \p
- * width, \p height, \p depth, \p border and \p internalFormat information.
- *
- * \p retainInternalCopy is returned by this function and indicates whether
- * core Mesa should keep an internal copy of the texture image.
- *
- * Drivers should call a fallback routine from texstore.c if needed.
+ * \param texImage is the target texture image.
*/
void (*TexImage1D)( struct gl_context *ctx, GLenum target, GLint level,
GLint internalFormat,
struct gl_texture_image *texImage );
/**
- * Called by glTexSubImage1D().
- *
- * \param target user specified.
- * \param level user specified.
- * \param xoffset user specified.
- * \param yoffset user specified.
- * \param zoffset user specified.
- * \param width user specified.
- * \param height user specified.
- * \param depth user specified.
- * \param format user specified.
- * \param type user specified.
- * \param pixels user specified.
- * \param packing indicates the image packing of pixels.
- * \param texObj is the target texture object.
- * \param texImage is the target texture image. It will have the texture \p
- * width, \p height, \p border and \p internalFormat information.
- *
- * The driver should use a fallback routine from texstore.c if needed.
+ * Called by glTexSubImage1D(). Replace a subset of the target texture
+ * with new texel data.
+ * \sa dd_function_table::TexImage1D.
*/
void (*TexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level,
GLint xoffset, GLsizei width,
/**
* Called by glGetTexImage().
*/
- void (*GetTexImage)( struct gl_context *ctx, GLenum target, GLint level,
+ void (*GetTexImage)( struct gl_context *ctx,
GLenum format, GLenum type, GLvoid *pixels,
- struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
- /**
- * Called by glCopyTexImage1D().
- *
- * Drivers should use a fallback routine from texstore.c if needed.
- */
- void (*CopyTexImage1D)( struct gl_context *ctx, GLenum target, GLint level,
- GLenum internalFormat, GLint x, GLint y,
- GLsizei width, GLint border );
-
- /**
- * Called by glCopyTexImage2D().
- *
- * Drivers should use a fallback routine from texstore.c if needed.
- */
- void (*CopyTexImage2D)( struct gl_context *ctx, GLenum target, GLint level,
- GLenum internalFormat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border );
-
/**
* Called by glCopyTexSubImage1D().
*
*/
struct gl_texture_image * (*NewTextureImage)( struct gl_context *ctx );
+ /** Called to free a texture image object returned by NewTextureImage() */
+ void (*DeleteTextureImage)(struct gl_context *ctx,
+ struct gl_texture_image *);
+
+ /** Called to allocate memory for a single texture image */
+ GLboolean (*AllocTextureImageBuffer)(struct gl_context *ctx,
+ struct gl_texture_image *texImage,
+ gl_format format, GLsizei width,
+ GLsizei height, GLsizei depth);
+
/**
* Called to free tImage->Data.
*/
- void (*FreeTexImageData)( struct gl_context *ctx, struct gl_texture_image *tImage );
+ void (*FreeTextureImageBuffer)( struct gl_context *ctx, struct gl_texture_image *tImage );
+
+ /** Map a slice of a texture image into user space.
+ * \param texImage the texture image
+ * \param slice the 3D image slice or array texture slice
+ * \param x, y, w, h region of interest
+ * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT
+ * \param mapOut returns start of mapping of region of interest
+ * \param rowStrideOut returns row stride (in bytes)
+ */
+ void (*MapTextureImage)(struct gl_context *ctx,
+ struct gl_texture_image *texImage,
+ GLuint slice,
+ GLuint x, GLuint y, GLuint w, GLuint h,
+ GLbitfield mode,
+ GLubyte **mapOut, GLint *rowStrideOut);
+
+ void (*UnmapTextureImage)(struct gl_context *ctx,
+ struct gl_texture_image *texImage,
+ GLuint slice);
/** Map texture image data into user space */
void (*MapTexture)( struct gl_context *ctx, struct gl_texture_object *tObj );
*/
GLboolean (*IsTextureResident)( struct gl_context *ctx,
struct gl_texture_object *t );
-
- /**
- * Called when the texture's color lookup table is changed.
- *
- * If \p tObj is NULL then the shared texture palette
- * gl_texture_object::Palette is to be updated.
- */
- void (*UpdateTexturePalette)( struct gl_context *ctx,
- struct gl_texture_object *tObj );
- /*@}*/
-
-
- /**
- * \name Imaging functionality
- */
- /*@{*/
- void (*CopyColorTable)( struct gl_context *ctx,
- GLenum target, GLenum internalformat,
- GLint x, GLint y, GLsizei width );
-
- void (*CopyColorSubTable)( struct gl_context *ctx,
- GLenum target, GLsizei start,
- GLint x, GLint y, GLsizei width );
/*@}*/
* \name GLSL shader/program functions.
*/
/*@{*/
- /**
- * Called when a shader is compiled.
- *
- * Note that not all shader objects get ShaderCompile called on
- * them. Notably, the shaders containing builtin functions do not
- * have CompileShader() called, so if lowering passes are done they
- * need to also be performed in LinkShader().
- */
- GLboolean (*CompileShader)(struct gl_context *ctx, struct gl_shader *shader);
/**
* Called when a shader program is linked.
*
void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]);
/** Set the blend equation */
void (*BlendEquationSeparate)(struct gl_context *ctx, GLenum modeRGB, GLenum modeA);
+ void (*BlendEquationSeparatei)(struct gl_context *ctx, GLuint buffer,
+ GLenum modeRGB, GLenum modeA);
/** Specify pixel arithmetic */
void (*BlendFuncSeparate)(struct gl_context *ctx,
GLenum sfactorRGB, GLenum dfactorRGB,
GLenum sfactorA, GLenum dfactorA);
+ void (*BlendFuncSeparatei)(struct gl_context *ctx, GLuint buffer,
+ GLenum sfactorRGB, GLenum dfactorRGB,
+ GLenum sfactorA, GLenum dfactorA);
/** Specify clear values for the color buffers */
- void (*ClearColor)(struct gl_context *ctx, const GLfloat color[4]);
+ void (*ClearColor)(struct gl_context *ctx,
+ const union gl_color_union color);
/** Specify the clear value for the depth buffer */
void (*ClearDepth)(struct gl_context *ctx, GLclampd d);
/** Specify the clear value for the stencil buffer */
const GLvoid *data, GLenum usage,
struct gl_buffer_object *obj );
- void (*BufferSubData)( struct gl_context *ctx, GLenum target, GLintptrARB offset,
+ void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset,
GLsizeiptrARB size, const GLvoid *data,
struct gl_buffer_object *obj );
- void (*GetBufferSubData)( struct gl_context *ctx, GLenum target,
+ void (*GetBufferSubData)( struct gl_context *ctx,
GLintptrARB offset, GLsizeiptrARB size,
GLvoid *data, struct gl_buffer_object *obj );
- void * (*MapBuffer)( struct gl_context *ctx, GLenum target, GLenum access,
- struct gl_buffer_object *obj );
-
void (*CopyBufferSubData)( struct gl_context *ctx,
struct gl_buffer_object *src,
struct gl_buffer_object *dst,
/* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
*/
- void * (*MapBufferRange)( struct gl_context *ctx, GLenum target, GLintptr offset,
+ void * (*MapBufferRange)( struct gl_context *ctx, GLintptr offset,
GLsizeiptr length, GLbitfield access,
struct gl_buffer_object *obj);
- void (*FlushMappedBufferRange)(struct gl_context *ctx, GLenum target,
+ void (*FlushMappedBufferRange)(struct gl_context *ctx,
GLintptr offset, GLsizeiptr length,
struct gl_buffer_object *obj);
- GLboolean (*UnmapBuffer)( struct gl_context *ctx, GLenum target,
+ GLboolean (*UnmapBuffer)( struct gl_context *ctx,
struct gl_buffer_object *obj );
/*@}*/
*/
/*@{*/
- /**
- * Bitmask of state changes that require the current T&L module to be
- * validated, using ValidateTnlModule() below.
- */
- GLuint NeedValidate;
-
- /**
- * Validate the current T&L module.
- *
- * This is called directly after UpdateState() when a state change that has
- * occurred matches the dd_function_table::NeedValidate bitmask above. This
- * ensures all computed values are up to date, thus allowing the driver to
- * decide if the current T&L module needs to be swapped out.
- *
- * This must be non-NULL if a driver installs a custom T&L module and sets
- * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
- */
- void (*ValidateTnlModule)( struct gl_context *ctx, GLuint new_state );
-
-
-#define PRIM_OUTSIDE_BEGIN_END (GL_POLYGON+1)
-#define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
-#define PRIM_UNKNOWN (GL_POLYGON+3)
-
/**
* Set by the driver-supplied T&L engine.
*
struct gl_transform_feedback_object *obj);
void (*DrawTransformFeedback)(struct gl_context *ctx, GLenum mode,
struct gl_transform_feedback_object *obj);
+
+ /**
+ * \name GL_NV_texture_barrier interface
+ */
+ void (*TextureBarrier)(struct gl_context *ctx);
+
+ /**
+ * \name GL_ARB_sampler_objects
+ */
+ struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx,
+ GLuint name);
+ void (*DeleteSamplerObject)(struct gl_context *ctx,
+ struct gl_sampler_object *samp);
};
void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
+
+ /* GL_EXT_gpu_shader4 / GL 3.0 */
+ void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x);
+ void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y);
+ void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z);
+ void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w);
+ void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v);
+ void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v);
+ void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v);
+
+ void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x);
+ void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y);
+ void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z);
+ void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+ void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v);
+ void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v);
+ void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v);
+
+ /* GL_ARB_vertex_type_10_10_10_2_rev / GL3.3 */
+ void (GLAPIENTRYP VertexP2ui)( GLenum type, GLuint value );
+ void (GLAPIENTRYP VertexP2uiv)( GLenum type, const GLuint *value);
+
+ void (GLAPIENTRYP VertexP3ui)( GLenum type, GLuint value );
+ void (GLAPIENTRYP VertexP3uiv)( GLenum type, const GLuint *value);
+
+ void (GLAPIENTRYP VertexP4ui)( GLenum type, GLuint value );
+ void (GLAPIENTRYP VertexP4uiv)( GLenum type, const GLuint *value);
+
+ void (GLAPIENTRYP TexCoordP1ui)( GLenum type, GLuint coords );
+ void (GLAPIENTRYP TexCoordP1uiv)( GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP TexCoordP2ui)( GLenum type, GLuint coords );
+ void (GLAPIENTRYP TexCoordP2uiv)( GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP TexCoordP3ui)( GLenum type, GLuint coords );
+ void (GLAPIENTRYP TexCoordP3uiv)( GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP TexCoordP4ui)( GLenum type, GLuint coords );
+ void (GLAPIENTRYP TexCoordP4uiv)( GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP MultiTexCoordP1ui)( GLenum texture, GLenum type, GLuint coords );
+ void (GLAPIENTRYP MultiTexCoordP1uiv)( GLenum texture, GLenum type, const GLuint *coords );
+ void (GLAPIENTRYP MultiTexCoordP2ui)( GLenum texture, GLenum type, GLuint coords );
+ void (GLAPIENTRYP MultiTexCoordP2uiv)( GLenum texture, GLenum type, const GLuint *coords );
+ void (GLAPIENTRYP MultiTexCoordP3ui)( GLenum texture, GLenum type, GLuint coords );
+ void (GLAPIENTRYP MultiTexCoordP3uiv)( GLenum texture, GLenum type, const GLuint *coords );
+ void (GLAPIENTRYP MultiTexCoordP4ui)( GLenum texture, GLenum type, GLuint coords );
+ void (GLAPIENTRYP MultiTexCoordP4uiv)( GLenum texture, GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP NormalP3ui)( GLenum type, GLuint coords );
+ void (GLAPIENTRYP NormalP3uiv)( GLenum type, const GLuint *coords );
+
+ void (GLAPIENTRYP ColorP3ui)( GLenum type, GLuint color );
+ void (GLAPIENTRYP ColorP3uiv)( GLenum type, const GLuint *color );
+
+ void (GLAPIENTRYP ColorP4ui)( GLenum type, GLuint color );
+ void (GLAPIENTRYP ColorP4uiv)( GLenum type, const GLuint *color );
+
+ void (GLAPIENTRYP SecondaryColorP3ui)( GLenum type, GLuint color );
+ void (GLAPIENTRYP SecondaryColorP3uiv)( GLenum type, const GLuint *color );
+
+ void (GLAPIENTRYP VertexAttribP1ui)( GLuint index, GLenum type,
+ GLboolean normalized, GLuint value);
+ void (GLAPIENTRYP VertexAttribP2ui)( GLuint index, GLenum type,
+ GLboolean normalized, GLuint value);
+ void (GLAPIENTRYP VertexAttribP3ui)( GLuint index, GLenum type,
+ GLboolean normalized, GLuint value);
+ void (GLAPIENTRYP VertexAttribP4ui)( GLuint index, GLenum type,
+ GLboolean normalized, GLuint value);
+ void (GLAPIENTRYP VertexAttribP1uiv)( GLuint index, GLenum type,
+ GLboolean normalized,
+ const GLuint *value);
+ void (GLAPIENTRYP VertexAttribP2uiv)( GLuint index, GLenum type,
+ GLboolean normalized,
+ const GLuint *value);
+ void (GLAPIENTRYP VertexAttribP3uiv)( GLuint index, GLenum type,
+ GLboolean normalized,
+ const GLuint *value);
+ void (GLAPIENTRYP VertexAttribP4uiv)( GLuint index, GLenum type,
+ GLboolean normalized,
+ const GLuint *value);
+
/*@}*/
void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count,
GLenum type, const GLvoid *indices,
GLsizei primcount);
+ void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count,
+ GLenum type, const GLvoid *indices,
+ GLsizei primcount, GLint basevertex);
/*@}*/
/**