http://bugs.winehq.org/show_bug.cgi?id=23906
--- Comment #32 from machete aeneas@q-mail.me 2011-06-15 09:35:28 CDT --- And, in addition [[bugzilla:26967]] should be related to this one. Patch db8d681a5b088b3b0dd58c6952086891f6bbb4f5 broke water shaders if shaders are set above low. I opened 2 Bugreports for Nvidia ( http://nvnews.net/vbulletin/showthread.php?p=2445516 ) as well as ATI ( http://ati.cchtml.com/show_bug.cgi?id=160 ) unfortunately I am not a pro at all when it comes to graphical issues but I tried my best ;) So if any of the wine developers who actually know what the issue is exactly and how the driver vendors could fix it (e.g. by providing an extension with witch the d3d floating point behaviour could be defined) may post there and help fixing the issue.
Btw it seems as if it got fixed in dx3d 10 as mentioned here: http://msdn.microsoft.com/en-us/library/cc308050%28v=vs.85%29.aspx
"Honored IEEE-754 Rules
Some of these rules are a single option where IEEE-754 offers choices.
Divide by 0 produces +/- INF, except 0/0 which results in NaN. log of (+/-) 0 produces -INF. log of a negative value (other than -0) produces NaN. Reciprocal square root (rsq) or square root (sqrt) of a negative number produces NaN. The exception is -0; sqrt(-0) produces -0, and rsq(-0) produces -INF. INF - INF = NaN (+/-)INF / (+/-)INF = NaN (+/-)INF * 0 = NaN NaN (any OP) any-value = NaN The comparisons EQ, GT, GE, LT, and LE, when either or both operands is NaN returns FALSE. Comparisons ignore the sign of 0 (so +0 equals -0). The comparison NE, when either or both operands is NaN returns TRUE. Comparisons of any non-NaN value against +/- INF return the correct result. "
I hope I could help a little :)