nv30: set fp samplers with fragprog generation
authorPatrice Mandin <pmandin@caramail.com>
Sun, 31 Aug 2008 09:10:08 +0000 (11:10 +0200)
committerPatrice Mandin <pmandin@caramail.com>
Sun, 31 Aug 2008 09:10:08 +0000 (11:10 +0200)
src/gallium/drivers/nv30/nv30_fragprog.c
src/gallium/drivers/nv30/nv30_state_emit.c

index 02f30ad9bad01dcb86d38fa64011e048ccaa2c9c..320ba3f4bf42c0ba20b1f5538fbfa6cdd6aadcf9 100644 (file)
@@ -852,7 +852,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
        fp->buffer = ws->buffer_create(ws, 0x100, 0, fp->insn_len * 4);
        nv30_fragprog_upload(nv30, fp);
 
-       so = so_new(6, 1);
+       so = so_new(8, 1);
        so_method(so, nv30->screen->rankine, NV34TCL_FP_ACTIVE_PROGRAM, 1);
        so_reloc (so, fp->buffer, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_GART |
                  NOUVEAU_BO_RD | NOUVEAU_BO_LOW | NOUVEAU_BO_OR,
@@ -861,6 +861,8 @@ nv30_fragprog_validate(struct nv30_context *nv30)
        so_data  (so, fp->fp_control);
        so_method(so, nv30->screen->rankine, NV34TCL_FP_REG_CONTROL, 1);
        so_data  (so, fp->fp_reg_control);
+       so_method(so, nv30->screen->rankine, NV34TCL_TX_UNITS_ENABLE, 1);
+       so_data  (so, fp->samplers);
        so_ref(so, &fp->so);
 
 update_constants:
index 9c96085408efa08b7fde435970c4cfd8d42f7df1..40fed621b24037062bc1b0858eb0f73af9bea877 100644 (file)
@@ -71,10 +71,6 @@ nv30_state_emit(struct nv30_context *nv30)
 
        state->dirty = 0;
 
-       /* FIXME/TODO: Try to find a way to reemit only when changed */
-       BEGIN_RING(rankine, NV34TCL_TX_UNITS_ENABLE, 1);
-       OUT_RING(state->fp_samplers);
-
        so_emit_reloc_markers(nv30->nvws, state->hw[NV30_STATE_FB]);
        for (i = 0, samplers = state->fp_samplers; i < 16 && samplers; i++) {
                if (!(samplers & (1 << i)))