My theoretical particle engine -And can you render all your particles into one 'particle graphic' and blend with the actual framebuffer only when it's all done? I don't think so, although this might be the case.
I mean, you need to do reads and compares with the Z-buffer of the scene geometry already rendered into the framebuffer while rendering the particle system, you can't just do it in complete isolation...
Read a tile from the framebuffer, say 32x32, including depth. Also store the particle graphic, some smokey blob. Per pixel, per particle, blend if z-test clears. Spit out rendered tile and proceed to the next one. This design would only work for some particle types, but should be entirely processing dependent, with negligable impact on bandwidth - in essence a post-effect.