On modern PC hardware I have found branching logic to have no downsides. I do stuff like this all the time:
if (textureID != -1)
{
color *= texture(sampler[textureID], texcoords);
}I don't believe the whole “GPU executes both branches and takes the result of one” thing is an issue anymore.
What about on the latest mobile graphics chips? I may want to support Oculus Quest in the future, so I am primarily concerned with Adreno 530, 540, 650 chipsets. What's the current situation there?