The depth maps for the lights are generated in one pass and one drawcall per light, without switching rendertargets. This is done by rendering a 1 pixel high panorama from each light's perspective. The drawback of this method is that pointsprites have to be used. If trianglestrips are used, the vertices of a plane which is over the panorama seam, will end up on opposite sides, and its area would destroy the panorama. It would be possible to cut the geometry at the panorama ends, but that would have to happen every frame, and vertex buffers would have to be updated.
This method will work on older technology. I used dx9; its all very basic and easy; I made it in a day. Performance is pretty good, even without any optimizations. 128 lights and 8192 points render in 10 ms on my 5850. To speed things up, the light radius could be clamped, so not all geometry has to be drawn for every light, and the light pass can be done in tiles, so a pixel does not need to loop through all lights.