The irregular Nouveau-Development companion

Issue for October 28th

Intro

Here we go again: Prepare for issue number 29 of the TiNDC. This version is slightly updated to the version on Phoronix, as I forgot one importan fact.

When we were talking about our project's infrastructure in the last issues, it was mostly negative news (no scripts working, need to move to fd.o etc.). Finally, we can report something postive about it: We have HTML versions with links and colored nicks thanks to a script by MJules. That version was well received and even allowed tagging so that you could link to a certain line in the log (by entering '==== (topic)'). You can see which topics were tagged here: http://people.freedesktop.org/~ahuillet/irclogs/tags_index.htm

But the script gave some false positives and thus pachi went out and improved on it. The script is now able to add HTML anchors automatically based on time stamps. You can find both script, style sheet and the coloured logs at http://people.freedesktop.org/~ahuillet/irclogs .

This option should come in handy for the TiNDC. Let us know, whether you like this or not.

One last topic before we start with the progress report itself. The question came up, why there is such a long delay between phoronix.com publishing the TiNDC and me putting it up on the Wiki. It is simple:

A short grace period of a few hours

Different timezones (which fits well with reason 1)

And this time due to real life concerns, I wasn't able to get to my computer before Saturday noon (CEST). At that time KMeyer already was done.

At the end of the last issue we saw ahuillet, pmdata and p0g fighting the perils of texturing and coloring triangles and quads on NV1x. The result varied wildly (from changing colours over black squads to only partly of rendered texture (1 Texel)), just pick the failure of your choice and our developer can tell you that they already suffered through it.

But finally he had success, it was a missing bit for texturing in the init code.

P0g did more work on NV1x blending / transparency. First tries yielded black borders around icons instead of the background. He did some investigations and found the culprit: Transparency wasn't enabled, so he whipped up a patch [[!img http://peter.whoei.org/nouveau/icons-semi-working.png]

Another problem fixed was non power of two textures (textures with a width / height which is not a power of two) need to have an even size. Odd widths get rounded up.

Although those results are essential to get EXA working on NV1x (and rumor has it that texture may be put to good use later on in 3D) there were still some important parts missing: PictOps and masking.

Just before our editorial deadline, ahuillet got masking and some of the PictOps done. As NV1x has no shaders, he put register combiners to good use (see insert) However, the most important PictOp A8 + A8 (Alpha 8 bit) was not yet implemented. Reason is that NV1x doesn't support A8 as a destination. Until that is implemented, EXA on NV1x will not really feel accelerated. http://people.freedesktop.org/~ahuillet/irclogs/nouveau-2007-10-25.htm#1545

So ahuillet claimed victory over marcheu and jkolb in the race of which card would have EXA working first: NV1x (ahuillet, p0g) or NV3x (jkolb, marcheu).

So a few hours later he comitted a working fix for NV3x EXA which had all known issues ironed out. A8 op A8 was later fixed through a DRM update and is now working, and repeat of 1x1 areas is working as well. What is missing for full EXA completeness is repeat of > 1x1 areas, but it is not widely used and would require using a shader to compute the required coordinate wrapping. Unfortunately, real NV30 cards do not work currently as the init in the DRM seems to be incorrect (These would be GeForce 5800, Quadro FX1000). http://people.freedesktop.org/~marcheu/irclogs/nouveau-2007-10-26#0451)

Insert: Register Combiners

As NV1x is missing shaders of any type. So in order to accomplish similar things like modern cards do with shaders, you'll use register (or texture) combiners.

Although register combiners and texture combiners work differently in 3D operations, for our current 2D work they can be regarded as similar (if not equal). Register combiners are hardwired into the texturing stage of the hardware. So when you setup that part of the card, you automatically get them with the default behaviour.

Now what is default? If you render a pixel onto the screen it is texel modulated by the vertex color. If you want to modulate it by something else (say the alpha of another texture) you "just" setup the register combiners accordingly which would implement the IN operation which in turn is needed for masking.

After ahuillet claimed mostly working EXA, pq started testing NV10 EXA on his NV2x cards. Soon after testing he found out that DownloadFromScreen (abbreviated as DFS) was not working. He bisected back until the last binary api breakage and still found DFS not working.

jkolb and marcheu did some work on NV30. Some issue which got fixed:

EXA positioning and size of the rectangles was sometimes off.

The coordinates for EXA were not calculated correctly. The were transformed to be in the range [0..1] instead of [0..width]. Fixed by jkolb.
At that point the driver was unable to do transparency for e.g. icons. All transparent parts were painted black. After jkolb tried his luck and was defeated by the stubborness of the card, marcheu tried his luck and got luckyWW showed his professionalism:

Basically NV10 is now not very far behind the NV3x. It misses the A8+A8 PictOp.

Although darktama was quiet during the last weeks, he wasn't lazy. He did some work on a NV4x TTM and Gallium prototype (just research, that code won't be released as is). After talking with marcheu about the pros and cons of the architecture both came to the conclusion that Gallium is the way to go.

While marcheu and darktama were coming to a decision, pmdata wanted to start coding DRI function on NV1x but was asked by Marcheu not to. Reasoning:

Currently we want to get EXA working, with all the progress mentioned above, that won't take much longer

Gallium is different from current DRI, especially for NV2x and earlier cards. Working on DRI would be wasting time.

With that in mind, marcheu stopped all his other nouveau related projects and set out to add a generic infrastructure to Gallium which will allow older cards with non existant or fixed pipelines to offer acceleration. For Nouveau that would be all cards < NV30.

But as this work is generic, it will beneficial for all cards which miss vertex and shader pipelines (e.g. older radeons). After that pmdata can finally start working on DRI.

Stillunknown was pestered by KoalaBR until he finally gave in and offered to (try to) get NV50 / G84 mode setting working. In an act of revenge he enlisted KoalaBR as tester. First cautious tries to patch mode setting to a working state however yielded no change from the current situation. So we still can't switch back to text mode from X11.

Due to the problem we talked about in the previous issue, notifiers are now always created in PCI memory.

stillunknown added some video control registers to rules-ng for NV50.

pmdata is working on finding out which texture formats are supported on NV1x and he did help ahuillet and p0g with NV1x problems

DRM got a fix which prevents the card from hanging in case of an error.

careym did fix a few OpenGL bugs in renouveau

chowmeined did fix some modesettings on NV5x which resulted pink lines on the right side and at the bottom.
MmioTracing on nv50 cards may freeze the machine hard. Discovered by KoalaBR (but unable to reproduce it later), PQ can reproduce it and tries to investigate, but he would be happy to have someone with NV50 hardware who can trigger the crash and has a genuine serial port with a serial terminal (another computer) to go with it. The task does not require much programming knowledge, but it does require the skill to configure and install a custom kernel, applying patches and tolerating lots of hard crashes and reboots once in a while. This may be a long fight, so this person should be able to stay aboard for a few weeks minimum.

Help needed

stillunknown is looking for 7xx0 card owners who would be willing to run a few tests for him. Furthermore he is looking for people with dual head (whatever combination of VGA /DVI) who are willing to test randr1.2 / mode setting.