drm/nv50: write tic/tsc setup to correct slots when skipping units
authorBen Skeggs <bskeggs@redhat.com>
Wed, 7 Oct 2009 06:07:34 +0000 (16:07 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Sun, 18 Oct 2009 23:49:02 +0000 (09:49 +1000)
src/gallium/drivers/nv50/nv50_state_validate.c
src/gallium/drivers/nv50/nv50_tex.c

index fd276203710f570f3cfc40dd3cea681ad5e671ff..9079de918d0086a4424c584e6bb6151354f0e305 100644 (file)
@@ -356,13 +356,14 @@ viewport_uptodate:
        if (nv50->dirty & NV50_NEW_SAMPLER) {
                int i;
 
-               so = so_new(nv50->sampler_nr * 9 + 2, 0);
-               so_method(so, tesla, NV50TCL_CB_ADDR, 1);
-               so_data  (so, NV50_CB_TSC);
+               so = so_new(nv50->sampler_nr * 11, 0);
                for (i = 0; i < nv50->sampler_nr; i++) {
                        if (!nv50->sampler[i])
                                continue;
 
+                       so_method(so, tesla, NV50TCL_CB_ADDR, 1);
+                       so_data  (so, ((i * 8) << NV50TCL_CB_ADDR_ID_SHIFT) |
+                                     NV50_CB_TSC);
                        so_method(so, tesla, NV50TCL_CB_DATA(0) | (2<<29), 8);
                        so_datap (so, nv50->sampler[i]->tsc, 8);
                }
index 72d33150af1abbb5d0da32e09ab52ff324f51bb3..ca2b883e9b12d09ab26ff7001af3e89da48388c7 100644 (file)
@@ -148,18 +148,19 @@ nv50_tex_validate(struct nv50_context *nv50)
        struct nouveau_stateobj *so;
        int unit, push;
 
-       push  = nv50->miptree_nr * 9 + 2;
+       push  = nv50->miptree_nr * 11;
        push += MAX2(nv50->miptree_nr, nv50->state.miptree_nr) * 2;
 
        so = so_new(push, nv50->miptree_nr * 2);
-       so_method(so, tesla, NV50TCL_CB_ADDR, 1);
-       so_data  (so, NV50_CB_TIC);
        for (unit = 0; unit < nv50->miptree_nr; unit++) {
                struct nv50_miptree *mt = nv50->miptree[unit];
 
                if (!mt)
                        continue;
 
+               so_method(so, tesla, NV50TCL_CB_ADDR, 1);
+               so_data  (so, ((unit * 8) << NV50TCL_CB_ADDR_ID_SHIFT) |
+                             NV50_CB_TIC);
                so_method(so, tesla, NV50TCL_CB_DATA(0) | 0x40000000, 8);
                if (nv50_tex_construct(nv50, so, mt, unit)) {
                        NOUVEAU_ERR("failed tex validate\n");