Merge commit 'origin/gallium-master-merge'
[mesa.git] / src / mesa / vbo / vbo.h
index 80f7a3322bf4a8ea970821150083cdd3e9b72254..5362226c2f935df1da316cb6f0834baf35c1f889 100644 (file)
@@ -32,7 +32,7 @@
 #ifndef _VBO_H
 #define _VBO_H
 
-#include "mtypes.h"
+#include "main/mtypes.h"
 
 struct _mesa_prim {
    GLuint mode:8;
@@ -55,7 +55,6 @@ struct _mesa_index_buffer {
    GLenum type;
    struct gl_buffer_object *obj;
    const void *ptr;
-   GLuint rebase;
 };
 
 
@@ -65,4 +64,75 @@ void _vbo_DestroyContext( GLcontext *ctx );
 void _vbo_InvalidateState( GLcontext *ctx, GLuint new_state );
 
 
+typedef void (*vbo_draw_func)( GLcontext *ctx,
+                              const struct gl_client_array **arrays,
+                              const struct _mesa_prim *prims,
+                              GLuint nr_prims,
+                              const struct _mesa_index_buffer *ib,
+                              GLuint min_index,
+                              GLuint max_index );
+
+
+
+
+/* Utility function to cope with various constraints on tnl modules or
+ * hardware.  This can be used to split an incoming set of arrays and
+ * primitives against the following constraints:
+ *    - Maximum number of indices in index buffer.
+ *    - Maximum number of vertices referenced by index buffer.
+ *    - Maximum hardware vertex buffer size.
+ */
+struct split_limits {
+   GLuint max_verts;
+   GLuint max_indices;
+   GLuint max_vb_size;         /* bytes */
+};
+
+
+void vbo_split_prims( GLcontext *ctx,
+                     const struct gl_client_array *arrays[],
+                     const struct _mesa_prim *prim,
+                     GLuint nr_prims,
+                     const struct _mesa_index_buffer *ib,
+                     GLuint min_index,
+                     GLuint max_index,
+                     vbo_draw_func draw,
+                     const struct split_limits *limits );
+
+
+/* Helpers for dealing translating away non-zero min_index.
+ */
+GLboolean vbo_all_varyings_in_vbos( const struct gl_client_array *arrays[] );
+
+void vbo_rebase_prims( GLcontext *ctx,
+                      const struct gl_client_array *arrays[],
+                      const struct _mesa_prim *prim,
+                      GLuint nr_prims,
+                      const struct _mesa_index_buffer *ib,
+                      GLuint min_index,
+                      GLuint max_index,
+                      vbo_draw_func draw );
+
+
+void vbo_use_buffer_objects(GLcontext *ctx);
+
+
+void vbo_set_draw_func(GLcontext *ctx, vbo_draw_func func);
+
+
+void GLAPIENTRY
+_vbo_Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a);
+
+void GLAPIENTRY
+_vbo_Normal3f(GLfloat x, GLfloat y, GLfloat z);
+
+void GLAPIENTRY
+_vbo_MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+
+void GLAPIENTRY
+_vbo_Materialfv(GLenum face, GLenum pname, const GLfloat *params);
+
+void GLAPIENTRY
+_vbo_VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+
 #endif