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. Read more from the IRC logs.
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). Unfortunately, marcheu noted a few hours later that NV1x EXA can't handle XBGR which (according to his numbers) would mean that most of the EXA calls would hit software fallbacks. Read more here.
So a few hours later, he committed 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). Read more in the IRC log.
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 behavior.
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
· 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 stubbornness of the card, marcheu tried his luck and got lucky^W^W showed his professionalism: Basically NV10 is now not very far behind the NV3x. It misses the A8+A8 PictOp.