No, just filling the register maps. The actual generation of the GL shader still happens in CompileShader. It's nothing really spectacular, but it still saves us making a pass over the d3d shader in CompileShader, which is typically called from inside draw calls.
Sounds good :-)
As some optimization somewhen we could try pre-generate most of the shader in SetFunction and just insert a few values based on the stateblock in CompileShader. Something like storing offsets / pointers into the char[] array which contains the glsl / arb string where a "1" / "2" / "3" or "cube" has to be inserted, or comment marks added / removed. The actual GL compilation still needs to be done during draw though.