Recently I've stumbled across few things inside particle systems in my own engine. Previously a lot of my particle simulation was done on the CPU (not that it would be too slow, but hey, I need by CPU more free for other computations), therefore I re-written them to work on the GPU. There are actually 2 ways I've implemented particles - the transform feedback (where geometry shader takes care of particle system) and compute shader. As for performance, I haven't seen any major difference in between these two techniques (assuming they are doing the same calculations).
Now, both implementations are just a basic particle system (a lot more simple than what I have on CPU currently), now - if I'd like to add things like collision detection and response for particles (I have collision geometry stored as shapes inside BVHs), applying 'wind' on them (velocity voxel-grid, precomputed), and also forming animations where particles form some sort of geometry surface -> which is a better way to go?
From my point of view compute shader based simulation might be better, but I guess that you can do all this stuff using both solutions. If you tried both, please also share some experience.