nv40: force reupload of all consts on vtxprog change
authorBen Skeggs <skeggsb@gmail.com>
Tue, 20 Nov 2007 11:34:55 +0000 (22:34 +1100)
committerBen Skeggs <skeggsb@gmail.com>
Tue, 20 Nov 2007 11:34:55 +0000 (22:34 +1100)
src/mesa/pipe/nv40/nv40_state_emit.c

index a29c70538f5337ea9fb0eb3cac94942e66ba6303..3224c8299942212d9510e59c7aa17e3634e005bb 100644 (file)
@@ -42,11 +42,14 @@ nv40_state_update_vertprog(struct nv40_context *nv40)
        struct pipe_context *pipe = (struct pipe_context *)nv40;
        struct nv40_vertex_program *vp = nv40->vertprog.vp;
        float *map;
-       int i;
+       int i, force_consts = 0;
 
        if (!nv40->vertprog.vp->translated)
                nv40_vertprog_translate(nv40, nv40->vertprog.vp);
 
+       if (nv40->vertprog.vp != nv40->vertprog.active_vp)
+               force_consts = 1;
+
        if (vp->num_consts) {
                map = pipe->winsys->buffer_map(pipe->winsys,
                                               nv40->vertprog.constant_buf,
@@ -55,7 +58,8 @@ nv40_state_update_vertprog(struct nv40_context *nv40)
                        uint pid = vp->consts[i].pipe_id;
 
                        if (pid >= 0) {
-                               if (!memcmp(vp->consts[i].value, &map[pid*4],
+                               if (!force_consts &&
+                                   !memcmp(vp->consts[i].value, &map[pid*4],
                                            4 * sizeof(float)))
                                        continue;
                                memcpy(vp->consts[i].value, &map[pid*4],