vbo: call UpdateState directly when notifying a driver about _NEW_ARRAY
authorMarek Olšák <maraeo@gmail.com>
Sun, 22 Apr 2012 17:21:45 +0000 (19:21 +0200)
committerMarek Olšák <maraeo@gmail.com>
Mon, 23 Apr 2012 20:58:02 +0000 (22:58 +0200)
Core Mesa doesn't need to know about this.

This also removes the hack in recalculate_input_bindings.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/vbo/vbo_exec.h
src/mesa/vbo/vbo_exec_array.c
src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_save_draw.c

index 5cdf5ced912c1b9bd5fa2ecafcb21bca71db6561..be9f3d78d2b0a045e0c5adeefd9c72794cef80a5 100644 (file)
@@ -189,7 +189,8 @@ static inline void
 vbo_draw_method(struct vbo_exec_context *exec, enum draw_method method)
 {
    if (exec->last_draw_method != method) {
-      exec->ctx->NewState |= _NEW_ARRAY;
+      struct gl_context *ctx = exec->ctx;
+      ctx->Driver.UpdateState(ctx, _NEW_ARRAY);
       exec->last_draw_method = method;
    }
 }
index 28019afeb81043aeecefd6db7901c3ac767f4589..2dcfb8e5b8cd687c39f602b989250ff8e2bbb274 100644 (file)
@@ -438,14 +438,6 @@ recalculate_input_bindings(struct gl_context *ctx)
         inputs[VERT_ATTRIB_GENERIC(i)] = &vbo->currval[VBO_ATTRIB_GENERIC0+i];
          const_inputs |= VERT_BIT_GENERIC(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:
@@ -472,8 +464,6 @@ recalculate_input_bindings(struct gl_context *ctx)
         inputs[VERT_ATTRIB_GENERIC(i)] = &vbo->currval[VBO_ATTRIB_GENERIC0+i];
          const_inputs |= VERT_BIT_GENERIC(i);
       }
-
-      ctx->NewState |= _NEW_ARRAY;
       break;
 
    case VP_ARB:
@@ -512,11 +502,11 @@ recalculate_input_bindings(struct gl_context *ctx)
       }
 
       inputs[VERT_ATTRIB_GENERIC0] = inputs[0];
-      ctx->NewState |= _NEW_ARRAY;
       break;
    }
 
    _mesa_set_varying_vp_inputs( ctx, VERT_BIT_ALL & (~const_inputs) );
+   ctx->Driver.UpdateState(ctx, _NEW_ARRAY);
 }
 
 
index 5cc6586b3173a5e80e81a61956103fbf8111edcf..da5ca695eaf46db59176d7b70a98bc0e450fef55 100644 (file)
@@ -253,11 +253,11 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
         arrays[attr]._MaxElement = count; /* ??? */
 
          varying_inputs |= VERT_BIT(attr);
-         ctx->NewState |= _NEW_ARRAY;
       }
    }
 
    _mesa_set_varying_vp_inputs( ctx, varying_inputs );
+   ctx->Driver.UpdateState(ctx, _NEW_ARRAY);
 }
 
 
index 57186de64608dc39dd35e210eaffa56b9c25ae3f..88a9a7e346292c3e69a344bdc3f4907e18e4030e 100644 (file)
@@ -209,11 +209,11 @@ static void vbo_bind_vertex_list(struct gl_context *ctx,
 
         buffer_offset += node_attrsz[src] * sizeof(GLfloat);
          varying_inputs |= VERT_BIT(attr);
-         ctx->NewState |= _NEW_ARRAY;
       }
    }
 
    _mesa_set_varying_vp_inputs( ctx, varying_inputs );
+   ctx->Driver.UpdateState(ctx, _NEW_ARRAY);
 }