nv50: a couple more bits'n'pieces
authorBen Skeggs <skeggsb@gmail.com>
Mon, 16 Jun 2008 02:55:53 +0000 (12:55 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Sun, 29 Jun 2008 05:46:18 +0000 (15:46 +1000)
src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nv50/nv50_program.h

index 845fc611905440d2e75dbbdd981ec94a6d601fb9..2fe60ad51ff550a544ed3a97081246e1e42cd8c5 100644 (file)
@@ -93,6 +93,11 @@ alloc_reg(struct nv50_pc *pc, struct nv50_reg *reg)
 {
        int i;
 
+       if (reg->type == P_RESULT) {
+               if (pc->p->cfg.high_result < (reg->hw + 1))
+                       pc->p->cfg.high_result = reg->hw + 1;
+       }
+
        if (reg->type != P_TEMP)
                return;
 
@@ -1558,6 +1563,8 @@ nv50_vertprog_validate(struct nv50_context *nv50)
        so_method(so, tesla, 0x1650, 2);
        so_data  (so, p->cfg.vp.attr[0]);
        so_data  (so, p->cfg.vp.attr[1]);
+       so_method(so, tesla, 0x16b8, 1);
+       so_data  (so, p->cfg.high_result);
        so_method(so, tesla, 0x16ac, 2);
        so_data  (so, 8);
        so_data  (so, p->cfg.high_temp);
@@ -1594,9 +1601,10 @@ nv50_fragprog_validate(struct nv50_context *nv50)
        so_data  (so, 0x00000004);
        so_data  (so, 0x00000000);
        so_data  (so, 0x00000000);
-       so_method(so, tesla, 0x16bc, 2); /*XXX: fixme */
+       so_method(so, tesla, 0x16bc, 3); /*XXX: fixme */
        so_data  (so, 0x03020100);
        so_data  (so, 0x07060504);
+       so_data  (so, 0x0b0a0908);
        so_method(so, tesla, 0x1988, 2);
        so_data  (so, 0x08040404); /* p: 0x0f000401 */
        so_data  (so, p->cfg.high_temp);
index d143ae97979bb4e5c33126fc503a86c90df5b39c..d643e8db21821b8b6036815354268c2d38ce64a5 100644 (file)
@@ -35,6 +35,7 @@ struct nv50_program {
 
        struct {
                unsigned high_temp;
+               unsigned high_result;
                struct {
                        unsigned attr[2];
                } vp;