Merge branch 'master' of git://anongit.freedesktop.org/mesa/mesa
[mesa.git] / src / mesa / vbo / vbo_context.h
index bf405eb69338fb44851b7111d1c77fc3a8b723f3..2ded6ccbff27eb5116a4b7b3efc34a607d7cb496 100644 (file)
 #ifndef _VBO_CONTEXT_H
 #define _VBO_CONTEXT_H
 
+#include "main/mfeatures.h"
 #include "vbo.h"
 #include "vbo_attrib.h"
 #include "vbo_exec.h"
-#if FEATURE_dlist
 #include "vbo_save.h"
-#endif
 
 
 struct vbo_context {
@@ -68,8 +67,8 @@ struct vbo_context {
    struct gl_client_array *generic_currval;
    struct gl_client_array *mat_currval;
 
-   GLuint map_vp_none[32];
-   GLuint map_vp_arb[32];
+   GLuint map_vp_none[VERT_ATTRIB_MAX];
+   GLuint map_vp_arb[VERT_ATTRIB_MAX];
 
    GLfloat *current[VBO_ATTRIB_MAX]; /* points into ctx->Current, ctx->Light.Material */
    GLfloat CurrentFloatEdgeFlag;
@@ -87,21 +86,23 @@ struct vbo_context {
 };
 
 
-static INLINE struct vbo_context *vbo_context(GLcontext *ctx) 
+static INLINE struct vbo_context *vbo_context(struct gl_context *ctx) 
 {
    return (struct vbo_context *)(ctx->swtnl_im);
 }
 
-enum {
-   VP_NONE = 1,
-   VP_NV,
-   VP_ARB
-};
 
-static INLINE GLuint get_program_mode( GLcontext *ctx )
+/**
+ * Return VP_x token to indicate whether we're running fixed-function
+ * vertex transformation, an NV vertex program or ARB vertex program/shader.
+ */
+static INLINE enum vp_mode
+get_program_mode( struct gl_context *ctx )
 {
    if (!ctx->VertexProgram._Current)
       return VP_NONE;
+   else if (ctx->VertexProgram._Current == ctx->VertexProgram._TnlProgram)
+      return VP_NONE;
    else if (ctx->VertexProgram._Current->IsNVProgram)
       return VP_NV;
    else