Created attachment 71134 [details]
Screenshot showing the problem.
When running 3DMark2001 on Wine with r300g rendering corruptions are visible in the load screen and the high quality version of the "lobby" test. Closer investigation showed that the problem occurs when the game sets the source blend factor to GL_DST_COLOR and the dest blend factor to GL_ZERO. The blend function is ADD, separate alpha blending is not used.
If I manually change these parameters to srcfactor=ZERO and dstfactor=GL_SRC_COLOR, rendering works correctly.
Rendering also works fine when I configure wine not to use FBOs.
I have tried to reproduce this problem with a stand-alone GL application but have not succeeded in that yet.
I have attached a screenshot. The corruption are the random pixels at the bottom and right. The horizontal lines are artifacts caused by the gnome-screenshot tool.
3DMark2001 can be downloaded from http://download.freenet.de/3DMark-2001-SE-Windows--4183.xhtml and many other places.
I dug through the optimizations in r300_create_blend_state, and the problem is the "Disable reading if SRC_ALPHA == 0" optimization. It is not correct if the source factor is DEST_COLOR. I'm checking if any other source factors have to be excluded.
(In reply to comment #1)
> I dug through the optimizations in r300_create_blend_state, and the problem
> is the "Disable reading if SRC_ALPHA == 0" optimization. It is not correct
> if the source factor is DEST_COLOR. I'm checking if any other source factors
> have to be excluded.
Yes, you're right. The optimization should check the source RGB and A factors too.