#include "glheader.h"
+struct gl_bitmap_atlas;
struct gl_buffer_object;
struct gl_context;
struct gl_display_list;
struct gl_shader_program;
struct gl_texture_image;
struct gl_texture_object;
+struct gl_memory_info;
/* GL_ARB_vertex_buffer_object */
/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
* want to provoke the driver to throw away the old storage, we will
* respect the contents of already referenced data.
*/
-#define MESA_MAP_NOWAIT_BIT 0x0040
+#define MESA_MAP_NOWAIT_BIT 0x4000
/**
GLint x, GLint y, GLsizei width, GLsizei height,
const struct gl_pixelstore_attrib *unpack,
const GLubyte *bitmap );
+
+ /**
+ * Called by display list code for optimized glCallLists/glBitmap rendering
+ * The driver must support texture rectangles of width 1024 or more.
+ */
+ void (*DrawAtlasBitmaps)(struct gl_context *ctx,
+ const struct gl_bitmap_atlas *atlas,
+ GLuint count, const GLubyte *ids);
/*@}*/
GLenum srcFormat, GLenum srcType );
/**
- * Determine sample counts support for a particular target and format
+ * Queries different driver parameters for a particular target and format.
+ * Since ARB_internalformat_query2 introduced several new query parameters
+ * over ARB_internalformat_query, having one driver hook for each parameter
+ * is no longer feasible. So this is the generic entry-point for calls
+ * to glGetInternalFormativ and glGetInternalFormati64v, after Mesa has
+ * checked errors and default values.
*
* \param ctx GL context
* \param target GL target enum
* \param internalFormat GL format enum
- * \param samples Buffer to hold the returned sample counts.
- * Drivers \b must \b not return more than 16 counts.
- *
- * \returns
- * The number of sample counts actually written to \c samples. If
- * \c internaFormat is not renderable, zero is returned.
+ * \param pname GL enum that specifies the info to query.
+ * \param params Buffer to hold the result of the query.
*/
- size_t (*QuerySamplesForFormat)(struct gl_context *ctx,
- GLenum target,
- GLenum internalFormat,
- int samples[16]);
+ void (*QueryInternalFormat)(struct gl_context *ctx,
+ GLenum target,
+ GLenum internalFormat,
+ GLenum pname,
+ GLint *params);
/**
* Called by glTexImage[123]D() and glCopyTexImage[12]D()
* \return GL_TRUE if the image is OK, GL_FALSE if too large
*/
GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target,
- GLint level, mesa_format format,
+ GLuint numLevels, GLint level,
+ mesa_format format, GLuint numSamples,
GLint width, GLint height,
- GLint depth, GLint border);
+ GLint depth);
/*@}*/
GLuint id);
/** Delete a program */
void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);
+ /**
+ * Allocate a program to associate with the new ATI fragment shader (optional)
+ */
+ struct gl_program * (*NewATIfs)(struct gl_context *ctx,
+ struct ati_fragment_shader *curProg);
/**
* Notify driver that a program string (and GPU code) has been specified
* or modified. Return GL_TRUE or GL_FALSE to indicate if the program is
GLintptr readOffset, GLintptr writeOffset,
GLsizeiptr size );
+ void (*InvalidateBufferSubData)( struct gl_context *ctx,
+ struct gl_buffer_object *obj,
+ GLintptr offset,
+ GLsizeiptr length );
+
/* Returns pointer to the start of the mapped range.
* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
*/
void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q);
void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q);
void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q);
+ /*
+ * \pname the value requested to be written (GL_QUERY_RESULT, etc)
+ * \ptype the type of the value requested to be written:
+ * GL_UNSIGNED_INT, GL_UNSIGNED_INT64_ARB,
+ * GL_INT, GL_INT64_ARB
+ */
+ void (*StoreQueryResult)(struct gl_context *ctx, struct gl_query_object *q,
+ struct gl_buffer_object *buf, intptr_t offset,
+ GLenum pname, GLenum ptype);
/*@}*/
/**
* \name Performance monitors
*/
/*@{*/
+ void (*InitPerfMonitorGroups)(struct gl_context *ctx);
struct gl_perf_monitor_object * (*NewPerfMonitor)(struct gl_context *ctx);
void (*DeletePerfMonitor)(struct gl_context *ctx,
struct gl_perf_monitor_object *m);
* \name GLSL-related functions (ARB extensions and OpenGL 2.x)
*/
/*@{*/
- struct gl_shader *(*NewShader)(struct gl_context *ctx,
- GLuint name, GLenum type);
- void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg);
+ struct gl_linked_shader *(*NewShader)(gl_shader_stage stage);
/*@}*/
+ /**
+ * \name GREMEDY debug/marker functions
+ */
+ /*@{*/
+ void (*EmitStringMarker)(struct gl_context *ctx, const GLchar *string, GLsizei len);
+ /*@}*/
/**
* \name Support for multiple T&L engines
* \name GL_ARB_shader_image_load_store interface.
*/
/** @{ */
- void (*BindImageTexture)(struct gl_context *ctx,
- struct gl_image_unit *unit,
- struct gl_texture_object *texObj,
- GLint level, GLboolean layered, GLint layer,
- GLenum access, GLenum format);
-
void (*MemoryBarrier)(struct gl_context *ctx, GLbitfield barriers);
/** @} */
void (*DispatchCompute)(struct gl_context *ctx, const GLuint *num_groups);
void (*DispatchComputeIndirect)(struct gl_context *ctx, GLintptr indirect);
/*@}*/
+
+ /**
+ * Query information about memory. Device memory is e.g. VRAM. Staging
+ * memory is e.g. GART. All sizes are in kilobytes.
+ */
+ void (*QueryMemoryInfo)(struct gl_context *ctx,
+ struct gl_memory_info *info);
};