Ymanton has been working on video decoding, especially XvMC, via shader instructions creating the reference implementation with Gallium3D as his Google Summer of Code (GSoC) project. Ymanton comments:
"GSoC has treated me very well, marcheu is an excellent mentor and the rest of the Nouveau contributors have also been a big help, the SoC project would not have gone as well as it did without all the good work that went into the project before I started."
Since the summer is indeed over school has retaken most of ymanton's time, but he is still trying to determine why decoding is not as fast as expected. "Current consensus is that it's because we're using linear textures instead of tiled, so I've been trying to figure out how to get tiled textures and the related DMA functionality working." To do that we need to look at how we do DMA in Xv and the 2D driver and how we do it on NV50.
Ymanton wrote a simple OpenGL program that goes through the same steps as our decoding process and tested it on the blob. The blob "tears through 720p" at around 60 fps so we know the hardware (NV40) is capable of doing this.
It has been tested to not to crash on NV30, but without shader support it will not actually display anything. Ymanton does not have an NV50 card so he has not tested that, and he does not believe it is finished enough, yet.
Ymanton's Gallium3D video decoder currently gets 18-20 fps with the Nouveau driver on NV40. Xv is still a better option for now, as the CPU spikes because it does not get to 24 fps. 1080p has memory issues and will be worked on once 720p achieves reasonable performance.
Based on the DDX "ng" code, darktama has started which is a library for factoring out all the common parts in the DDX and Nouveau Gallium3D code related to interfacing with the DRM and the hardware (FreeDesktop.org cgit). Also all nvXX_demo programs are candidate users of this library.
Slowness with Nouveau, when not related to having software-only 3D rendering, can be due to having an old version of X.org server. The version 1.5.2 or later is recommended, and you can even try a git X server.
VT switching is nowadays more solid, but still relies on some assumptions that might not hold, especially when direct 3D acceleration comes into the picture. On NV50 cards and later, VT switching is still using real mode BIOS calls, which are not portable.
Nouveau's RandR 1.2 support is nearly perfect. Or it should be. If you find any problems with it, you should file a bug. Multi-card or multi-GPU setups on the other hand are not supported yet, and likely will not work even with luck. Another thing not yet supported at all is TV-out. Developers welcome :-)
NV50 class cards now have EXA acceleration and Xv texture adapter, thanks to darktama. The catch is, you need to use a compositing window manager to have those working. The reason for that was briefly mentioned in the end of the KMS section: our frame-buffer is not tiled yet. This milestone brings NV50 2D-support feature-wise on par with all the older card families, and is only lacking testing by end-users, that is finding and fixing bugs.
Please, if and when you file bugs, acknowledge the fact that you need to spend some time helping the poor developers to solve your issues. It will involve trying things and testing patches. The developers do not have your setup and might not be able to reproduce the problem themselves. Also be precise when describing the problem and do attach full kernel and X.org logs to the bug. Thank you.
There are no releases planned for Nouveau yet. Before that can even be thought of, Nouveau's DRM interface must stabilize. That means KMS has to be done first, and the memory manager work must be practically completed. It is still a long way to go for even just a 2D-only release, but 3D-enabled release might not be too far when that point is reached.
That's it for this time, folks! Thank you for your continued interest, and please, turn some stones and try to find us a couple more developers, will you? :-)
Discuss this article in our forums, IRC channel, or email the author. You can also follow our content via RSS and on social networks like Facebook, Identi.ca, and Twitter (@Phoronix and @MichaelLarabel). Subscribe to Phoronix Premium to view our content without advertisements, view entire articles on a single page, and experience other benefits.