It's been a bit of a struggle to figure out the exact cause of Radeon GPU slowness, but the culprit was identified at last: Geometry Shaders. Geometry Shaders aren't used much, and they never were (modern games used more general purpose shaders to do the same things). Geometry Shaders are a way to take a single data point and extrapolate it into something more, so that's what I used them for. They were used in both types of dust particles (streaks and dots).
I say "were" in the past tense, because I replaced them with a mix of compute and vertex shader computations over the past day. It wasn't easy to get the compute shader portion to behave properly, but I eventually landed on a solution that works well enough. The hardest part was convincing the game that it was ok to use 7 append buffers, which I did by initializing them across 7 frames instead of all at once. Either way, switching to append buffers let me optimize the game quite a bit when there were fewer active particles.
Between the change in how particles work, and a little general purpose optimization, the game runs significantly better on GCN-based AMD cards (aka Radeon RX 570/580/etc). One other thing to help low-end systems: I added more low-end water settings (see below for upcoming options to speed the game up even more).
The game is *slightly* slower now than it was before in one case: When you're causing absolute chaos and max-ing out the particles. There are two main reasons for that. First is that the max particle count was increased by 25% (or more) across all particle types, so you're just seeing more stuff on-screen. The second is that the shadow-casting onto dust is slower now because it's doing the calculations 3-4 times more than previously. I'll try to fix this soon, though I'm not certain I'll be able to remove that de-optimization. Compute shaders are more limited in their access to certain buffers/textures, and that's where the shadows would have to be moved to for particles.
Either way, I'll be providing a way to disable a couple aspects of the dust in the next update: Shadows and collisions. Dust collides with things now, but it doesn't really need to for low-end machines, and same goes for the shadows. Those are the two most expensive operations for particles, though the swirling/noise they receive is also fairly expensive, and that also may be bundled in the reduced version.
Now that I'm back to full-speed development after a break last week, I'll be working on a few mid-sized features, then going to town on the structure editor. Editors are a piece of cake compared to compute shaders, but there's always a lot of UI work involved. The UI for the non-vehicle editors will not be as polished as the rest of the UI, so expect some new simplified buttons and other new UI elements to show up in those editors.
