RING_3D creates a method start for subchannel 7.
Bind the 3D engine to a fixed subchannel to make it work
This is much faster than the old BEGIN_RING, since we don't need
to waste cycles trying to "autobind" stuff, when a fast static binding
is perfectly good.
Subchannel 7 is chosen because the kernel takes up the lowest ones.
+static __inline__ unsigned
+RING_3D(unsigned mthd, unsigned size)
+{
+ return (7 << 13) | (size << 18) | mthd;
+}
+
+static __inline__ unsigned
+RING_3D_NI(unsigned mthd, unsigned size)
+{
+ return 0x40000000 | (7 << 13) | (size << 18) | mthd;
+}
+
#endif
return NULL;
}
+ /* this is necessary for the new RING_3D / statebuffer code */
+ BIND_RING(chan, screen->tesla, 7);
+
/* Sync notifier */
ret = nouveau_notifier_alloc(chan, 0xbeef0301, 1, &screen->sync);
if (ret) {
return NULL;
}
+ BIND_RING(chan, screen->eng3d, 7);
+
/* Static eng3d initialisation */
/* make the so big and don't worry about exact values
since we it will be thrown away immediately after use */