https://bugs.winehq.org/show_bug.cgi?id=42355
Bug ID: 42355 Summary: Artifacts in GTAIV appear and disappear when driving Product: Wine Version: 2.0 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3d Assignee: wine-bugs@winehq.org Reporter: b7.10110111@gmail.com Distribution: ---
Created attachment 57123 --> https://bugs.winehq.org/attachment.cgi?id=57123 Screenshot of the artifact
When you enter a car and they try driving, you'll sometimes notice strange artifacts appear. They fade in, then sometimes persist for several frames, and then disappear. See screenshots attached.
This is a regression introduced by the following commit. In this version the artifacts appear not too often — I have to play for about a minute until I notice one. In wine-2.0-235-g2dd0fb8 they appear after about 10 seconds of driving in the game.
602a23a60aaab164acb8a2767094d545172ab4cf is the first bad commit commit 602a23a60aaab164acb8a2767094d545172ab4cf Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Jan 27 11:36:31 2017 +0100
wined3d: Just use glBufferSubData() in buffer_direct_upload().
It might seem like a good idea to try to use glMapBufferRange() in buffer_direct_upload(), but it really isn't. The interesting cases for glMapBufferRange() are GL_MAP_INVALIDATE_BUFFER_BIT or GL_MAP_UNSYNCHRONIZED_BIT, but the only way for those to be set here would be for the buffer to be mapped with WINED3D_MAP_DISCARD or WINED3D_MAP_NOOVERWRITE before the buffer object was created. In that case the GPU is obviously not using the buffer object, so glMapBufferRange() doesn't help. On the other hand, if the buffer is currently in use by the application and neither WINED3D_MAP_DISCARD nor WINED3D_MAP_NOOVERWRITE is set, glMapBufferRange() would need to wait for the GPU to finish using the buffer object, while glBufferSubData() may decide not to.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
:040000 040000 259531ef529ef96cbec7388bca99af40efaa9874 3e0b99a8b0fba782ad69ed0a8e00d2a64c363ae3 M dlls