tl:dr Is there an advantage (performance, memory or otherwise) to having a single Compute Shader with multiple kernels, even if the dispatching script only ever uses one of them, or is this merely a matter of what I deem more organized?
This might be a self-answering question, and it might have to do more with project manageability.
I have a Fluid Simulation / Fog System, which computes a 3D Texture. I have added a Compute Shader than can write to the fog density based on multiple parameters, e.g. the SDF of a Box, a Sphere, a Line, etc. Now there are a lot of ways to add to the fog density, but all of them are their own kernel in a single Compute Shader.
At this point there are 13 kernels in this compute shader, but every Fog Emitter Script only ever uses one of these kernels, namely that one that fits its method. That means, I have around 10 C# Scripts that all derive from a base class, and they override the kernel name to fit with their emission method.
Now the actual question: Is there an advantage of doing it this way? Or could I save myself that large compute shader and reduce it to multiple compute shaders with one kernel with always the same name, and then simply plug them in without needing to override the kernel name in the script?