http://bugs.winehq.org/show_bug.cgi?id=16997
--- Comment #42 from Stefan Dösinger stefandoesinger@gmx.at 2009-02-22 12:02:51 --- Caladan, thanks for testing this. This helps to pinpoint the problem.
Yes, as you have noticed, there are multiple fixed function fragment pipeline implementations, tailored for specific feature levels of graphics cards.
arbfp_fragment_pipeline: Everything that supports GL_ARB_fragment_program(~ d3d shader model 2.0). Newer intel cards, Geforce 5+, ATI r300+ (radeon 9500+)
atifs_fragment_pipeline: uses GL_ATI_fragment_shader, radeon 8500 - 9200
nvts_fragment_pipeline: Uses GL_NV_register_combiners and GL_NV_texture_shader, geforce 3 and 4
nvrc_fragment_pipeline: uses only GL_NV_register_combiners. I think TNT2 to Geforce 2
ffp_fragment_pipeline: The rest. Basically pre-8500 radeons. Uses GL_ARB_texture_env_combine
Strictly speaking we're lacking a GL 1.2 core fixed function pipeline, but cards that do not at least support GL_ARB_texture_env_combine are pretty rare. The only card I know that doesn't support this extension is my old ATI Mach64 card.
arbfp is the only 100% feature-complete pipeline implementation. nvts and atifs are almost perfect, they're missing D3DTOP_BUMPENVMAPLUMINANCE support. It could be implemented in nvts. In atifs maybe too, although its a rather tough call because of the instruction limitations. nvrc is missing D3DTOP_BUMPENVMAPLUMINANCE and D3DTOP_BUMPENVMAP because the HW doesn't support it(not even on Windows). The FFP pipeline is missing quite a number of features, like the bump mapping operations, TSSARGTEMP, secondary color input. These features are important in a number of games, so we try to avoid this backend if possible(even at the cost of writing card-specific backends like nvts and atifs).