Performance of client-side arrays vs buffer streaming

I’m simulating a particle system on the CPU, and need to render these as point sprites. Would manually doing buffer streaming and all of the tricks involved (double/tripling buffering, etc) be more performant than letting the driver do that automatically with client-side arrays? Can I trust the driver to do it well?

As tempting as it is, I cannot use compute shaders and SSBOs or however one would do it on newer versions; I’ve intentionally constrained myself to as low as I have the will to go.

What GPU and GPU driver?

If you’re determined to do particle system updates on the CPU, then using client arrays will certainly be a simpler method to get the data to the GPU. It may very well be the fastest method as well without adding a fair amount of effort. You can profile it and determine if it provides sufficient performance for your needs.

In my experience, it takes a fair amount of work to to meet (much less exceed) the performance of client arrays when rendering from buffer objects being dynamically updated from the CPU.

Give some thought though to whether you could instead do particle system updates in the vertex shader from some constant particle DNA, or possibly (not necessarily) use transform feedback to write updated particle values to a buffer object for subsequent rendering. You don’t need compute shaders nor SSBOs for GPU-side particle system updates.

I have two test devices: an Intel 530 HD /w Mesa 21.1.2, and an Intel 4500MHD running Windows and Intel drivers (don’t remember the version, but they’re the last, I think).

The reason I’m doing the simulation on the CPU is because I wish to dedicate all GPU resources to the rendering. The entire program is nearly parallelizable, so I don’t want to make it GPU-overbound. At most I’d make GPU simulation another option.

I forgot about transform feedback. That is another option, indeed, and what I’ll go for when I add GPU simulation.