The XFree86-DGA extension is now supported. Note that XF86DGASetViewPort command is not fully implemented due to hardware limitations of the P9000. The SetViewPort and SetVidPage commands have been hacked to allow double buffering under certain conditions.
For cards with 1MB or modes where xres*yres*Bpp > 1024K, no double buffering is supported. In this case, the bank size returned is equal to the amount of video memory. Using the XF86DGASetViewPort and XF86DGASetVidPage commands have no results.
For cards with 2MB and for modes where virtualX*virtualY*Bpp < 1024K, the behaviors of SetViewPort and SetVidPage are modified to allow double buffering. The bank size returned by XF86DGAGetVideo is equal to xres*yres*Bpp. In this mode, there are two buffers which can be written to, read from, and displayed. The XF86DGASetVidPage command can be used to switch between buffers 0 and 1 for I/O. Whichever buffer is selected will be available through the linear aperture with no offset. If XF86DGASetViewPort is called with ypos < yres, it will cause buffer 0 to be displayed. If ypos >= yres, buffer 1 will be displayed. The result of this behavior is that programs which switch banks as necessary and which use two vertically adjacent banks should work with no P9000-specific changes.