Am Sonntag, 9. März 2008 20:15:19 schrieb Stefan Dösinger:
What is missing is dealing with vertex states, Henri has some code for that already. The data structure and comparison of pipeline states needs optimization. The already existing pipeline replacement using GL_NV_register_combiners and GL_NV_texture_shader should be moved into a separate shader backend.
An update on this, I think moving the GL_NV_texture_shader+GL_NV_register_combiners code into a separate shader model is pointless. I had a deeper look at the code again, and I think that the NVTS handling is well abstracted using set_tex_op vs set_tex_op_nvrc. GL_NV_texture_shader in turn is handled mostly in the activate_dimensions() function in state.c.
The situation isn't 100Q% desireable, but to get major improvements we'd need an nvts+nvrc exclusive backend, and keep both extensions out of the base one. This would mean a functional regression for cards that have nvrc but not nvts(Geforce 2 and earlier). Trying to keep nvrc functionality without nvts and still separating the code would mean massive code duplication with the gain of removing 4 or 5 if conditions. (Or alternatively adding a few more shader callbacks, one for each replaced if())
Once we implement real pixel shaders using those extensions we need a separate shader backend, but for the ffp part it will only hook the state_alphaop(), state_colorop() and sampler() functions to prevent the originals from killing the shader, but not modifying their functionality.