vbo: mark vertex arrays as dirty when re-binding
authorMarek Olšák <maraeo@gmail.com>
Mon, 7 Mar 2011 18:34:34 +0000 (19:34 +0100)
committerMarek Olšák <maraeo@gmail.com>
Tue, 8 Mar 2011 21:14:47 +0000 (22:14 +0100)
This fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=34378

src/mesa/vbo/vbo_exec_array.c

index 5818b13..98d6bad 100644 (file)
@@ -461,6 +461,14 @@ recalculate_input_bindings(struct gl_context *ctx)
         inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i];
          const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i);
       }
+
+      /* There is no need to make _NEW_ARRAY dirty here for the TnL program,
+       * because it already takes care of invalidating the state necessary
+       * to revalidate vertex arrays. Not marking the state as dirty also
+       * improves performance (quite significantly in some apps).
+       */
+      if (!ctx->VertexProgram._MaintainTnlProgram)
+         ctx->NewState |= _NEW_ARRAY;
       break;
 
    case VP_NV:
@@ -486,6 +494,8 @@ recalculate_input_bindings(struct gl_context *ctx)
         inputs[i] = &vbo->generic_currval[i - VERT_ATTRIB_GENERIC0];
          const_inputs |= 1 << i;
       }
+
+      ctx->NewState |= _NEW_ARRAY;
       break;
 
    case VP_ARB:
@@ -521,8 +531,9 @@ recalculate_input_bindings(struct gl_context *ctx)
            inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i];
             const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i);
          }
-
       }
+
+      ctx->NewState |= _NEW_ARRAY;
       break;
    }