http://bugs.winehq.org/show_bug.cgi?id=27600
--- Comment #6 from Stefan Dösinger stefandoesinger@gmx.at 2011-07-01 18:02:03 CDT --- I didn't yet get around to writing a test to see if we can isolate this problem in fglrx. If anyone wants to do so, this would be the first test setup I'd try:
1) Create a big VBO(probably 4*sizeof(float)*65536), and a second one with 65536 float3s with position data. Maybe even try a bigger buffer. 2) Fill the VBO with float4(1, 0, 0, 0), red 3) Draw something with the two FBOs to make the driver load them(using an indexed draw to force the driver to load the entire buffer) 4) call glFinish() 5) Map the color FBO with MAP_UNSYNCHRONIZED_BIT | MAP_FLUSH_EXPLICIT_BIT 6) Fill the buffer with float4(0, 1, 0, 0), green 7) flush the entire range 8) Unmap it 9) Draw a quad with it using an indexed draw, try various indices. Of course the position buffer, shader and stream sources have to be set up correctly.
If the driver behaves correctly, the draw will alawys read float4(0, 1, 0, 0) from the color VBO. If the driver misbehaves in the way I suspect it does it will sometimes read float4(1, 0, 0, 0).