- struct nouveau_grobj *surf3d = hw->surf3d;
- struct nouveau_grobj *eng3d = hw->eng3d;
- struct nouveau_grobj *eng3dm = hw->eng3dm;
-
- BIND_RING(chan, surf3d, 7);
- BEGIN_RING(chan, surf3d, NV04_CONTEXT_SURFACES_3D_DMA_NOTIFY, 3);
- OUT_RING(chan, hw->ntfy->handle);
- OUT_RING(chan, chan->vram->handle);
- OUT_RING(chan, chan->vram->handle);
-
- BEGIN_RING(chan, eng3d, NV04_TEXTURED_TRIANGLE_DMA_NOTIFY, 4);
- OUT_RING(chan, hw->ntfy->handle);
- OUT_RING(chan, chan->vram->handle);
- OUT_RING(chan, chan->gart->handle);
- OUT_RING(chan, surf3d->handle);
-
- BEGIN_RING(chan, eng3dm, NV04_MULTITEX_TRIANGLE_DMA_NOTIFY, 4);
- OUT_RING(chan, hw->ntfy->handle);
- OUT_RING(chan, chan->vram->handle);
- OUT_RING(chan, chan->gart->handle);
- OUT_RING(chan, surf3d->handle);
-
- FIRE_RING(chan);
+ struct nouveau_pushbuf *push = context_push(ctx);
+ struct nv04_fifo *fifo = hw->chan->data;
+
+ BEGIN_NV04(push, NV01_SUBC(SURF, OBJECT), 1);
+ PUSH_DATA (push, hw->surf3d->handle);
+ BEGIN_NV04(push, NV04_SF3D(DMA_NOTIFY), 3);
+ PUSH_DATA (push, hw->ntfy->handle);
+ PUSH_DATA (push, fifo->vram);
+ PUSH_DATA (push, fifo->vram);
+
+ BEGIN_NV04(push, NV01_SUBC(3D, OBJECT), 1);
+ PUSH_DATA (push, hw->eng3d->handle);
+ BEGIN_NV04(push, NV04_TTRI(DMA_NOTIFY), 4);
+ PUSH_DATA (push, hw->ntfy->handle);
+ PUSH_DATA (push, fifo->vram);
+ PUSH_DATA (push, fifo->gart);
+ PUSH_DATA (push, hw->surf3d->handle);
+
+ BEGIN_NV04(push, NV01_SUBC(3D, OBJECT), 1);
+ PUSH_DATA (push, hw->eng3dm->handle);
+ BEGIN_NV04(push, NV04_MTRI(DMA_NOTIFY), 4);
+ PUSH_DATA (push, hw->ntfy->handle);
+ PUSH_DATA (push, fifo->vram);
+ PUSH_DATA (push, fifo->gart);
+ PUSH_DATA (push, hw->surf3d->handle);
+
+ PUSH_KICK (push);