I discussed today with Assaf Raman and as I have a laptop with Optimus technology from NVidia I can't run on instance of Ogre3D in two different videocards (even if I have those 2.). So I can't test the multi-device support which is going to be written. Because of this I stop working on the multi-device support and move on to the RTSS support and dynamic linkage. After I will manage to get a device in which I will be capable to test the multi-device support I will also finish that work (there is not much work left, around 2, in the worst case 4 days).
About the RTSS support and dynamic linkage, firstly I will start with implementing the dynamic linkage to the DirectX 11 Render System. Dynamically linked methods' performance matches that of static function calls; also, the linking overhead is just that of setting one constant buffer. The feature is designed to reduce the combinatory explosion of number of shader types for different techniques, without sacrificing performance. For example, you can have a single abstract shader for all your material types but just switch the BRDF implementation and light implementations on the fly.
Graphics developers sometimes create large, general-purpose shaders that can be used by a wide variety of scene items. At runtime, the shader conditionally runs code appropriate for the given situation. Unfortunately, these large, general-purpose shaders use general-purpose registers (GPRs) inefficiently, and can be much slower than smaller, more targeted shaders.
Shader model 5 addresses this performance problem by introducing dynamic shader linking. Dynamic linking separates shader code fragments by using interfaces and virtual functions and allows the application to select the fragment to use at draw time. This improves performance by binding only the shader code needed and not the entire large, general-purpose shader.
The cg compiler did implement this feathure ages ago in software and doesn't require shader model 5.0 for this. But HLSL does requiere.