Hi there, seeing as lacking a memory manager is a pretty frustrating state of mind, I thought I'd explore this area a bit.
My goals are: - bring the r300_dri driver into a state that is more compatible with a proper in-kernel memory manager, - do so with as little breakage as possible, and - do so without changes to DRM or DDX (binary compatibility and all that) Basically, I want to have a development tree that is in almost-perfect condition almost all the time while moving towards memory management. My tree is here: http://cgit.freedesktop.org/~nh/mesa/ (on the master branch) Some comments about this tree: 1. I decided not to use an approach based on dri_bufmgr_fake yet. Instead, I based the bufmgr on the existing r300_mem which uses the RADEON_ALLOC/etc. ioctls to allocate buffers for DMA. 2. Textures are still handled in the old way - they will require dri_bufmgr_fake-like handling, probably more like airlied's approach. 3. The tree contains a lot of patches to unify the way command buffer emits are done. Basically, I introduced macros BEGIN_BATCH/OUT_BATCH/etc. similar to what we have in the DRM and the DDX - hopefully, this will reduce confusion for new people. There's a new macro called COMMIT_BATCH. The idea behind this macro is that BEGIN_BATCH can flush the command buffer at times where we really don't want the command buffer to be flushed (flushing between certain kinds of packet3 can cause lockups, etc.). The COMMIT_BATCH indicates a point in time where flushing the command buffer is unproblematic, and it should probably be used rarely. Together with r300EnsureCmdBufSpace there's a chance that it'll yield good results. 4. dri_bufmgr-API #1: Allocating space for the command buffer via DRM_RADEON_ALLOC would be kind of silly, but the command buffer has to be a dri_bo. So I "overloaded" the flags parameter of the dri_bo_alloc call to tell the bufmgr what kind of memory the caller wants. 5. dri_bufmgr-API #2: Radeon hardware has some very weird relocation requirements. So far, the only one I've dealt with is that the blitter command contains a dword which combines a buffer offset with a buffer pitch. I've "overloaded" the emit_reloc flags parameter to tell the bufmgr about the relocation type. I would like to go ahead with this work and merge it back to Mesa master pretty soon (that's the whole point of this little exercise), after making it more complete and running it through thorough testing. Please tell me if I'm running off in a completely stupid direction. cu, Nicolai ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev