Some things 3d drivers might want in a generic api:
memory management of arbitrary, hierarchical objects. a driver will
want to allocate memory for framebuffer, texture, pixmap, cursor, etc.
some of that memory will be AGP/dma'able, some of that memory will be on
the card, etc.
locking primitives, to ensure a working state on SMP machines, and also
for cards which need synchronized access to resources like MMIO region
and framebuffer. also some sync is needed for cards w/ a video chip.
texture management. synchronization, spilling from framebuffer -> AGP
memory, etc
userspace high-level geometry primitives which break down high-level
commands into lower-level triangle formation