On Friday 11 April 2008 07:18:49 am Stefan Dösinger wrote:
Alexandre didn't commit the patch, I think we should come to an agreement on this issue, otherwise it is going to come up again and again.
For my own 2 cents on the issue, I think the fixed-function replacements should work through the selected shader backend. For example, if someone has GLSL enabled, the fixed-function replacement should be done through GLSL, and if ARB is used, it should done through ARB shaders. In this way, the atifs fixed-function replacement should never be used when the ARB or GLSL shader backend is used (one shader mode shouldn't supercede another while the program is running).
This would ensure compatibility on the OpenGL side when D3D's fixed-function pipeline is mixed with D3D shaders, still leave room for a proper atifs/nvts shader backend, and not introduce problems related to how one shader backend might interact with another. It honestly doesn't make sense to me why wined3d should just jump in and start using atifs/nvts shaders for fixed-function replacements, when the selected shader mode is ARB or GLSL. And really, atifs/nvts should be last-ditch resorts because they are only available on selected vendors, while ARB and GLSL are more widespread (eg. on Intel, MESA).
Ideally, in my mind, wined3d should autoselect one shader mode (unless a registry option is present to force one). It would be selected based on availability:
* if nv vertex/fragment programs are available, they should be used as a suppliment to the ARB shader backend (giving up to SM3.0 (4.0, actually), with functionality that most closely follows D3D) * else if GLSL is available, that should be used (giving SM2.0/3.0) * else if ARB shaders are available, then they should be used (giving PS1.1 and VS1.4) * else if atifs/nvts are available, use them (giving SM1.x) * else disable D3D shaders
In all cases, it should pick one and stick with it through the life of the process, for both D3D shaders and D3D fixed-function. Don't use atifs if ARB is available, don't use GLSL if nv-supplimented ARB is available, etc.
Though, perhaps I'm misunderstanding the whole issue, and I'm spouting non-sense..