mesa: added ctx->Driver.ValidateFramebuffer() callback
[mesa.git] / src / mesa / main / dd.h
index b1c78f2232c14e905a2f2fdc52a5c59eb5bac4f6..989791f39f19baa59bcf408e95cad3279cc1b09a 100644 (file)
@@ -5,9 +5,9 @@
 
 /*
  * Mesa 3-D graphics library
- * Version:  6.5
+ * Version:  6.5.2
  *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -52,8 +52,7 @@ struct mesa_display_list;
 struct dd_function_table {
    /**
     * Return a string as needed by glGetString().
-    *
-    * Only the GL_RENDERER token must be implemented.  Otherwise, NULL can be
+    * Only the GL_RENDERER query must be implemented.  Otherwise, NULL can be
     * returned.
     */
    const GLubyte * (*GetString)( GLcontext *ctx, GLenum name );
@@ -70,19 +69,20 @@ struct dd_function_table {
     * Get the width and height of the named buffer/window.
     *
     * Mesa uses this to determine when the driver's window size has changed.
+    * XXX OBSOLETE: this function will be removed in the future.
     */
    void (*GetBufferSize)( GLframebuffer *buffer,
                           GLuint *width, GLuint *height );
 
    /**
     * Resize the given framebuffer to the given size.
+    * XXX OBSOLETE: this function will be removed in the future.
     */
    void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb,
                           GLuint width, GLuint height);
 
    /**
     * Called whenever an error is generated.  
-    *
     * __GLcontextRec::ErrorValue contains the error value.
     */
    void (*Error)( GLcontext *ctx );
@@ -99,40 +99,29 @@ struct dd_function_table {
 
    /**
     * Clear the color/depth/stencil/accum buffer(s).
-    *
-    * \param mask a bitmask of the DD_*_BIT values defined above that indicates
-    * which buffers need to be cleared.
-    * \param all if true then clear the whole buffer, else clear only the
-    * region defined by <tt>(x, y, width, height)</tt>.
-    * 
-    * This function must obey the glColorMask(), glIndexMask() and
-    * glStencilMask() settings!
-    * Software Mesa can do masked clears if the device driver can't.
+    * \param buffers  a bitmask of BUFFER_BIT_* flags indicating which
+    *                 renderbuffers need to be cleared.
     */
-   void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all,
-                 GLint x, GLint y, GLint width, GLint height );
-
+   void (*Clear)( GLcontext *ctx, GLbitfield buffers );
 
    /**
-    * \name For hardware accumulation buffer
+    * Execute glAccum command.
     */
-   /*@{*/
+   void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value );
+
+
    /**
-    * Execute glAccum command within the given scissor region.
+    * Execute glRasterPos, updating the ctx->Current.Raster fields
     */
-   void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value,
-                 GLint xpos, GLint ypos, GLint width, GLint height );
-   /*@}*/
-
+   void (*RasterPos)( GLcontext *ctx, const GLfloat v[4] );
 
    /**
-    * \name glDraw(), glRead(), glCopyPixels() and glBitmap() functions
+    * \name Image-related functions
     */
    /*@{*/
 
    /**
-    * This is called by glDrawPixels().
-    *
+    * Called by glDrawPixels().
     * \p unpack describes how to unpack the source image data.
     */
    void (*DrawPixels)( GLcontext *ctx,
@@ -151,19 +140,14 @@ struct dd_function_table {
                       GLvoid *dest );
 
    /**
-    * Do a glCopyPixels().  
-    *
-    * This function must respect all rasterization state, glPixelTransfer(),
-    * glPixelZoom(), etc.
+    * Called by glCopyPixels().  
     */
    void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy,
                        GLsizei width, GLsizei height,
                        GLint dstx, GLint dsty, GLenum type );
 
    /**
-    * This is called by glBitmap().  
-    *
-    * Works the same as dd_function_table::DrawPixels, above.
+    * Called by glBitmap().  
     */
    void (*Bitmap)( GLcontext *ctx,
                   GLint x, GLint y, GLsizei width, GLsizei height,
@@ -348,6 +332,12 @@ struct dd_function_table {
                               GLint x, GLint y,
                               GLsizei width, GLsizei height );
 
+   /**
+    * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
+    */
+   void (*GenerateMipmap)(GLcontext *ctx, GLenum target,
+                          struct gl_texture_object *texObj);
+
    /**
     * Called by glTexImage[123]D when user specifies a proxy texture
     * target.  
@@ -466,8 +456,8 @@ struct dd_function_table {
     */
    void (*GetCompressedTexImage)(GLcontext *ctx, GLenum target, GLint level,
                                  GLvoid *img,
-                                 const struct gl_texture_object *texObj,
-                                 const struct gl_texture_image *texImage);
+                                 struct gl_texture_object *texObj,
+                                 struct gl_texture_image *texImage);
 
    /**
     * Called to query number of bytes of storage needed to store the
@@ -514,6 +504,11 @@ struct dd_function_table {
     */
    void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
 
+   /** Map texture image data into user space */
+   void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+   /** Unmap texture images from user space */
+   void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+
    /**
     * Note: no context argument.  This function doesn't initially look
     * like it belongs here, except that the driver is the only entity
@@ -583,20 +578,21 @@ struct dd_function_table {
     */
    /*@{*/
    /** Bind a vertex/fragment program */
-   void (*BindProgram)(GLcontext *ctx, GLenum target, struct program *prog);
+   void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog);
    /** Allocate a new program */
-   struct program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
+   struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
    /** Delete a program */
-   void (*DeleteProgram)(GLcontext *ctx, struct program *prog);   
+   void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog);   
    /** Notify driver that a program string has been specified. */
    void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 
-                              struct program *prog);
-   
-
+                              struct gl_program *prog);
+   /** Get value of a program register during program execution. */
+   void (*GetProgramRegister)(GLcontext *ctx, enum register_file file,
+                              GLuint index, GLfloat val[4]);
 
    /** Query if program can be loaded onto hardware */
    GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 
-                               struct program *prog);
+                               struct gl_program *prog);
    
    /*@}*/
 
@@ -802,7 +798,7 @@ struct dd_function_table {
    struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
    struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
    void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
-                           struct gl_framebuffer *fb);
+                           struct gl_framebuffer *fb, struct gl_framebuffer *fbread);
    void (*FramebufferRenderbuffer)(GLcontext *ctx, 
                                    struct gl_framebuffer *fb,
                                    GLenum attachment,
@@ -812,6 +808,8 @@ struct dd_function_table {
                          struct gl_renderbuffer_attachment *att);
    void (*FinishRenderTexture)(GLcontext *ctx,
                                struct gl_renderbuffer_attachment *att);
+   void (*ValidateFramebuffer)(GLcontext *ctx,
+                               struct gl_framebuffer *fb);
    /*@}*/
 #endif
 #if FEATURE_EXT_framebuffer_blit
@@ -826,9 +824,75 @@ struct dd_function_table {
     */
    /*@{*/
    struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
-   void (*BeginQuery)(GLcontext *ctx, GLenum target,
-                      struct gl_query_object *q);
-   void (*EndQuery)(GLcontext *ctx, GLenum target, struct gl_query_object *q);
+   void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
+   void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
+   void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
+   void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
+   void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
+   /*@}*/
+
+
+   /**
+    * \name Vertex Array objects
+    */
+   /*@{*/
+   struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
+   void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
+   void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
+   /*@}*/
+
+   /**
+    * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
+    */
+   /*@{*/
+   void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
+   void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
+                              const GLcharARB *name);
+   void (*CompileShader)(GLcontext *ctx, GLuint shader);
+   GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
+   GLuint (*CreateProgram)(GLcontext *ctx);
+   void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
+   void (*DeleteShader)(GLcontext *ctx, GLuint shader);
+   void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
+   void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
+                           GLsizei maxLength, GLsizei * length, GLint * size,
+                           GLenum * type, GLcharARB * name);
+   void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
+                            GLsizei maxLength, GLsizei *length, GLint *size,
+                            GLenum *type, GLcharARB *name);
+   void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
+                              GLsizei *count, GLuint *obj);
+   GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
+                              const GLcharARB *name);
+   GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
+   void (*GetProgramiv)(GLcontext *ctx, GLuint program,
+                        GLenum pname, GLint *params);
+   void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
+                             GLsizei *length, GLchar *infoLog);
+   void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
+                       GLenum pname, GLint *params);
+   void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
+                            GLsizei *length, GLchar *infoLog);
+   void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
+                           GLsizei *length, GLcharARB *sourceOut);
+   void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
+                        GLfloat *params);
+   void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
+                        GLint *params);
+   GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
+                               const GLcharARB *name);
+   GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
+   GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
+   void (*LinkProgram)(GLcontext *ctx, GLuint program);
+   void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
+   void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
+                   const GLvoid *values, GLenum type);
+   void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
+                         GLenum matrixType, GLint location, GLsizei count,
+                         GLboolean transpose, const GLfloat *values);
+   void (*UseProgram)(GLcontext *ctx, GLuint program);
+   void (*ValidateProgram)(GLcontext *ctx, GLuint program);
+   /* XXX many more to come */
    /*@}*/
 
 
@@ -857,9 +921,9 @@ struct dd_function_table {
    void (*ValidateTnlModule)( GLcontext *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
+#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.  
@@ -975,7 +1039,6 @@ typedef struct {
    void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
    void (GLAPIENTRYP Color4fv)( const GLfloat * );
    void (GLAPIENTRYP EdgeFlag)( GLboolean );
-   void (GLAPIENTRYP EdgeFlagv)( const GLboolean * );
    void (GLAPIENTRYP EvalCoord1f)( GLfloat );          /* NOTE */
    void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
    void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */