new radeon tiling patch
Roland Scheidegger
rscheidegger_lists at hispeed.ch
Thu Jan 13 06:25:46 PST 2005
Ok, here's a new version. It also contains a supposed patch for
mergedfb-pageflip (untested, but I need that for color tiling, otherwise
I'd need to redo the crtc address calculation in the drm).
http://homepage.hispeed.ch/rscheidegger/dri_experimental/radeon_tiling_drm7.diff
http://homepage.hispeed.ch/rscheidegger/dri_experimental/radeon_tiling_ddx7.diff
http://homepage.hispeed.ch/rscheidegger/dri_experimental/radeon_tiling_dri7.diff
Actually, I've decided to stick with the tiled frontbuffer, untiled for
the rest of the graphic memory scheme. It is now fully working, as far
as I can see. Granted, it's cheating poor old XAA a bit, but it seemed
actually like less hassle (with everything tiled, surface allocation
gets problematic, since you need to define exceptions for cursor, xv,
and need to make sure you don't get problems at the borders between
tiled and untiled regions).
This scheme could potentially have a slight performance impact for 2d
use (will do some measurements later today) but I don't expect anything
noticeable.
As a side effect, this means that switching between tiled and untiled
resolutions is fully working, except you need to cleanup the screen
manually after you do so, which is one of the few remaining problems.
Still couldn't figure out how to solve that really, I'm still tempted to
throw out interlaced and doublescan resolutions (I believe currently
there's a second issue with regard to these resolutions, in clone and
mergedfb modes).
Also, vesa fb console is now working, as are things like starting one
tiled X server and an untiled one in a different VT (can't test dual-head).
There's also an issue with pageflip and scrolling in virtual
resolutions. Once the kernel has initialized the FLIP_CNTL bit, you get
some ugly flickering when you scroll around. As far as I could see, this
is because the crtc will now get the new offset after each hsync, but
will not get the new offset_cntl value (which needs to be changed in
tiled mode when you scroll around) until a vsync. I tried to insert a
RADEON_WAIT_CRTC_PFLIP condition but it didn't work.
I'm still looking for pointers how to implement handshaking between
drm/ddx/dri. Otherwise, I'll just go ahead and up the ddx major version.
Could someone please look at the patches? Especially the drm/ddx
interaction and the ddx changes could probably really need some review.
Testing is also welcome of course (in fact wrt to scrolling in a virtual
resolution, it seems not all cards need the exact same offset
calculation, and it's unknown which cards need which one), just don't
forget to actually enable tiling :-).
Roland
More information about the xorg
mailing list