it’s a truly impressive post, both for the technical achievement and for the sheer quality of the writeup. it was completely accessible even as someone who has never done anything gpu related.
Gotta love it, and I’m especially impressed by the hybrid approach. Two techniques (async shader compilation and the ubershader) that were both not ready for prime time, and the solution ends up being to take on both of them, and let each one fill in the gaps left by the other. Looks like the diffstat on the merge was +5441 -890, which is nothing to sneeze at. It makes me want to resume my re-play of Metroid Prime 1 (which wasn’t made unplayable by the stuttering, but it was definitely noticeable), only problem is that damn Omega Pirate.
This isn’t what ubershader means in practice, right? I thought an ubershader was a shader compiler that simply enumerated the possible comminations.
eh, ubershader tends to be used to describe any huge shader program that has a lot of dynamic behaviour, like, eg. the ubershader used on modern cards to implement old opengl fixed-function api calls. You compile the shader once and then change its behaviour with uniforms, which is more or less exactly what Dolphin is doing.
a ubershader isn’t a compiler, it’s a type of (usually very large) shader that’s runtime-configured based on uniforms rather than having many optimized shader variants.
compare an if/else structure to a templated function.