Merge commit 'origin/gallium-draw-retval'
[mesa.git] / src / gallium / drivers / nv30 / nv30_state_emit.c
index 40fed621b24037062bc1b0858eb0f73af9bea877..ac52d946f021232356e8912b47041080fe19d049 100644 (file)
@@ -21,14 +21,6 @@ static void
 nv30_state_do_validate(struct nv30_context *nv30,
                       struct nv30_state_entry **states)
 {
-       const struct pipe_framebuffer_state *fb = &nv30->framebuffer;
-       unsigned i;
-
-       for (i = 0; i < fb->num_cbufs; i++)
-               fb->cbufs[i]->status = PIPE_SURFACE_STATUS_DEFINED;
-       if (fb->zsbuf)
-               fb->zsbuf->status = PIPE_SURFACE_STATUS_DEFINED;
-
        while (*states) {
                struct nv30_state_entry *e = *states;
 
@@ -46,10 +38,11 @@ nv30_state_do_validate(struct nv30_context *nv30,
 void
 nv30_state_emit(struct nv30_context *nv30)
 {
+       struct nouveau_channel *chan = nv30->screen->base.channel;
        struct nv30_state *state = &nv30->state;
        struct nv30_screen *screen = nv30->screen;
-       unsigned i, samplers;
-       uint64 states;
+       unsigned i;
+       uint64_t states;
 
        if (nv30->pctx_id != screen->cur_pctx) {
                for (i = 0; i < NV30_STATE_MAX; i++) {
@@ -65,23 +58,31 @@ nv30_state_emit(struct nv30_context *nv30)
                        continue;
                so_ref (state->hw[i], &nv30->screen->state[i]);
                if (state->hw[i])
-                       so_emit(nv30->nvws, nv30->screen->state[i]);
+                       so_emit(chan, nv30->screen->state[i]);
                states &= ~(1ULL << i);
        }
 
        state->dirty = 0;
+}
+
+void
+nv30_state_flush_notify(struct nouveau_channel *chan)
+{
+       struct nv30_context *nv30 = chan->user_private;
+       struct nv30_state *state = &nv30->state;
+       unsigned i, samplers;
 
-       so_emit_reloc_markers(nv30->nvws, state->hw[NV30_STATE_FB]);
+       so_emit_reloc_markers(chan, state->hw[NV30_STATE_FB]);
        for (i = 0, samplers = state->fp_samplers; i < 16 && samplers; i++) {
                if (!(samplers & (1 << i)))
                        continue;
-               so_emit_reloc_markers(nv30->nvws,
+               so_emit_reloc_markers(chan,
                                      state->hw[NV30_STATE_FRAGTEX0+i]);
                samplers &= ~(1ULL << i);
        }
-       so_emit_reloc_markers(nv30->nvws, state->hw[NV30_STATE_FRAGPROG]);
+       so_emit_reloc_markers(chan, state->hw[NV30_STATE_FRAGPROG]);
        if (state->hw[NV30_STATE_VTXBUF] /*&& nv30->render_mode == HW*/)
-               so_emit_reloc_markers(nv30->nvws, state->hw[NV30_STATE_VTXBUF]);
+               so_emit_reloc_markers(chan, state->hw[NV30_STATE_VTXBUF]);
 }
 
 boolean