1. The algorithm needs a view space depth value accessible in a pixel shader. This means that a depth pass is required to use SSAO on hardware that can't bind the z-buffer as a texture.
2. The raw results are quite grainy, forcing you to use a blurring pass before using the SSAO buffer. This isn't so bad on modern hardware, but its still another pass.
After the buffer is ready, then the final rendering pass needs to read from the SSAO blurred buffer to modify its ambient lighting value. The results are nice, but two additional non-trivial passes are pretty expensive if you aren't already doing something similar. However, there are the following possible solutions:
1. The depth only pass provides you with a zero overdraw on your subsequent passes - so there is some benefit. This allows you to increase the complexity of the final rendering passes somewhat, so it is not a total loss. Also, other algorithms use this type of depth value (depth of field, motion blur).
2. If there is other blending passes, you may be able to add the occlusion term into one of the channels of another buffer, letting you get the blur action for free. There are caveats to that as well, since they need to use the same blurring technique, but its better than just a separate rendering pass.
So anyways, I think its time to move on. I'm looking forward to working on Feedback some more, so we'll see where that leads...