I sat down tonight and did some maintenance work on the r128 2D driver.
This basically involved making the 2D driver use the same functionality
as the 3D driver, so that we don't have to shut the 3D engine down and
start it back up again after every block of 2D rendering.
As expected, this only took a couple of hours to get up and running. I
think the results speak for themselves:
System: 600MHz Duron, 128MB RAM, Rage 128 Pro 16MB
All tests run at 1024x768@.... Numbers are reps/sec. I just ran a
couple of benchmarks to give you an idea...
x11perf trunk, DRI off trunk, DRI on ati-5-0-1
-rect10 2000000.0 2000000.0 2690000.0
-rect100 156000.0 156000.0 2720000.0
-rect500 12500.0 12500.0 323000.0
-srect10 1560000.0 1560000.0 2520000.0
-srect100 85600.0 85500.0 2040000.0
-srect500 3960.0 3960.0 14600.0
rect* are rectangles, srect* are stippled rectangles.
Now, I realize you don't really give a crap about performance, so let me
explain why these numbers are good. The major cause of instability in
both the Rage 128 and Radeon drivers is the mix of MMIO 2D acceleration
and AGP DMA 3D acceleration. Switching back and forth can cause a lot
of problems -- indeed, it is so bad on the Radeon you basically can't do
it at all. The "recommended" usage of the Rage 128 driver has been to
enable the option "UseCCEFor2D", which prevents this switching from
occurring. However, it used to also disable 2D acceleration, as the AGP
DMA 2D acceleration was never implemented. Until now.
So, as this 2D acceleration code is used by default when the DRI is
enabled, there is no longer the option to do all that switching back and
forth. And, as a bonus, the 2D performance is significantly better when
you enable the DRI.
I'm just about to commit this stuff to the ati-5-0-1-branch of DRI CVS.
I doubt it will get into 4.0.3, but I think it would be useful to test
anyway (seeing as you have access to machines that break the driver).