http://bugs.winehq.org/show_bug.cgi?id=35207
--- Comment #13 from Henri Verbeet hverbeet@gmail.com --- (In reply to Stefan Dösinger from comment #12)
I haven't confirmed that this is what's going on beyond a doubt, but I'm quite convinced that this is the problem here. So the problem is essentially bug 26967.
Only in the generic "GLSL underspecifies fp behaviour" way. In principle this is an invalid optimization. You can't optimize "(x + 1.0) * y" into "x * y + y" in IEEE fp mode, unless you have additional contraints on x and y. That's a different problem from the application depending on d3d9 fp rules. The only reason the driver can get away with this is because under a strict interpretation the GLSL spec before GL4 allows the driver to do just about anything, and even e.g. GLSL 4.30 says very little about infinities and NaNs.
I'd still argue that what the driver does isn't particularly useful behaviour, and it should either just use d3d9 floating point mode, or follow IEEE fp rules wrt. optimizations.