I've committed almost all the necessary bits for AGP texturing. Just one thing remains to be done before enabling the AGP heap in mach64_screen.c. When multitexturing, both textures must reside in either local card memory or AGP, since there is only a single tex_cntl register with one bit to specify the location of both textures. I have AGP textures working in my local tree, but it's a little ugly right now. To test it, I added a second version of UploadTextureImages called UploadMultiTexImages that gets called from the EmitHwStateLocked if two textures are bound and either one is dirty or they are on different heaps. The function follows the same algorithm as UploadTextureImages, but it ensures that both textures are on the same heap and that allocations succeed or fail as a pair. This requires some extra swapping/backtracking and there is surely a smarter way to do this. It might be useful if we could get the performance boxes working so we could look at texture swapping stats, etc. Ok, on to DMA...
I haven't commited these changes yet, but I think I'm ready to do this now. I fixed the hangup when exiting X with the interrupt handler enabled by calling the ioctl to uninstall it in ATIDRICloseScreen. Seems obvious, but for some reason the glint driver doesn't do this, so I thought it was called by one of the drm template functions. It turns out that the uninstall_irq function does get called on removing the module, but we need to disable interrupts before tearing down the kernel context in ATIDRICloseScreen. Right now I have commented out the handler function calls in the bottom half, but interrupts are being processed. I've also added XF86Config options for forcing PCI mode, forcing pseudo-DMA (MMIO) mode, and for setting agp mode, agp size and vertex buffer size (choice of 1 or 2 MB). This should make testing different paths easier since you won't have to recompile. I'd like to commit these changes soon so we have Frank's code in the branch and we can start working on filling out the implementation. One last thing: I haven't solved the segfault when the server closes (this is the old problem that Felix mentioned), but when I was trying to add some debug output, I saw a segfault occur in xf86PurgeUnlockedOffscreenAreas, which seems to be called in the callback chain of pScreen->CloseScreen. So the problem could be in freeing the offscreen areas allocated for DRI or the DDX. Maybe this is related to the lockups with XAA enabled? I'm still unclear on where the allocation is done for the XAA offscreen memory. The DRI code in atiscreen.c reserves 128 scan lines for XAA in the calculations, but that constant (ATI_DRI_XAA_LINES) isn't referred to anywhere else. -- Leif Delgass http://www.retinalburn.net _______________________________________________________________ Have big pipes? SourceForge.net is looking for download mirrors. We supply the hardware. You get the recognition. Email Us: [EMAIL PROTECTED] _______________________________________________ Dri-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dri-devel
