WineD3D: WineD3D: Use the shader backend to enable / disable atifs and nvts

Chris Robinson chris.kcat at gmail.com
Fri Apr 11 10:22:20 CDT 2008


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..



More information about the wine-devel mailing list