nv40: mark fp dirty even when only consts updated
authorBen Skeggs <skeggsb@gmail.com>
Sun, 30 Mar 2008 19:13:06 +0000 (05:13 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Sun, 30 Mar 2008 19:13:06 +0000 (05:13 +1000)
Fixes arbfplight "sticking".

src/gallium/drivers/nv40/nv40_fragprog.c

index 87bca41cf64a9a4d7abaa73a75d6ded7bd7952ea..4b7667e03811b118d7d08cd064fb1a1e53ffc4b5 100644 (file)
@@ -919,6 +919,7 @@ nv40_fragprog_validate(struct nv40_context *nv40)
                nv40->constbuf[PIPE_SHADER_FRAGMENT];
        struct pipe_winsys *ws = nv40->pipe.winsys;
        struct nouveau_stateobj *so;
+       boolean new_consts = FALSE;
        int i;
 
        if (fp->translated)
@@ -945,7 +946,6 @@ nv40_fragprog_validate(struct nv40_context *nv40)
 
 update_constants:
        if (fp->nr_consts) {
-               boolean new_consts = FALSE;
                float *map;
                
                map = ws->buffer_map(ws, constbuf, PIPE_BUFFER_USAGE_CPU_READ);
@@ -965,7 +965,7 @@ update_constants:
                        nv40_fragprog_upload(nv40, fp);
        }
 
-       if (fp->so != nv40->state.hw[NV40_STATE_FRAGPROG]) {
+       if (new_consts || fp->so != nv40->state.hw[NV40_STATE_FRAGPROG]) {
                so_ref(fp->so, &nv40->state.hw[NV40_STATE_FRAGPROG]);
                return TRUE;
        }