The 42nd edition of the Nouveau Companion is now available to provide an update on the status of this community project to provide an open-source 2D/3D driver for all of NVIDIA's graphics hardware. Covered in this developer update is the status of the Nouveau driver on newer NVIDIA hardware, work underway on NV20 Gallium3D code, the LLVM back-end for Gallium3D progressing, the work that's left on kernel mode-setting support, and the GEM / TTM memory management work. The lack of a stabilized memory manager for the Nouveau kernel mode-setting driver is what's postponing a stable 2D driver release.
Happy New Year to all of you, thanks for reading our companion once again.
Well, once again destiny decided to put work on the TiNDC on a back burner, a bad flu followed by lumbago tied me nearly 2 weeks to the bed. So let's not waste any more time in getting to the meat of the TiNDC, the (still not so) current status.
The last issue stopped monitoring the logs on October, 30th so what has happened in November and December?
An important news first: Darktama was hired by Red Hat Australia, moved to Brisbane and started working full time on X.Org and Nouveau. Congratulations to him!
And as always: Thanks to my reviewers of the TiNDC who once again took on the task to let me look much more competent than I am. PQ and Darktama fixed the most glaring bug in this draft.
Tronic reported a hang in Nouveau for an original 8800 card. The first ones were slightly different from later cards (like e.g. 8600GT). Every code supporting those first generation NV5x cards with Nouveau was deduced from MMioTraces. After getting Kernel and X logs Darktama found that it was indeed the acceleration code and did buy a card on EBay. The bug was then promptly fixed, the 8600GTS is now in darktama's primary desktop.
PQ started working on NV20 Gallium code. First thing getting to work was glxinfo. Rendering a simple triangle however proved harder as vertex buffers were not yet implemented. Additionally, resizing the rendering window caused an assertion. Further investigation suggested the idea that handling clip rectangles in Nouveau was broken, giving out uninitialized structs. A few days later he still had problems to understand the code fully, as he was missing how Gallium attributes (e.g. Pos and Color) were sent to the FIFO. Marcheu told him that currently there was no assignment. We just copy those attributes to the FIFO and the same sequence we get them handed down through Gallium. After much trial and error (plus additional feedback from p0g and marcheu) pq finally managed to get NV20 to render a simple triangle: However, this code was emitting and using NV10 objects. When in early December everything pq converted all objects to NV20 objects and is fighting since then to get everything working again, but the card does not report any errors.
Marcheu is still working on the LLVM back-end. LLVM is a compiler framework which takes shader op codes, generates an internal representation from it, does optimization for it, and hands it finally out to the hardware specific back-end. Normally that would be x86, PPC etc. code but in case of Gallium the code is turned into shader code for NVidia cards (there is another back end in development by Corbin Simpson, which works for AMD/ ATI cards). Currently he is working on NV4x shaders, but adding additional should be a no brainer once everything is in place. Much more information about the current status will told at FOSDEM, as Marcheu holds two talks (about Nouveau and LLVM) there.
One of those things in place was the merge from our repos with the Gallium master repos. After some discussion with Darktama, Marcheu finally merged our code with master mid November.