https://bugs.winehq.org/show_bug.cgi?id=42738
Bug ID: 42738 Summary: Annoying flickering in Renegade Ops (needs StrictDrawOrdering=enabled to remove it) Product: Wine Version: 2.1 Hardware: x86 URL: http://store.steampowered.com/app/99300/ OS: Linux Status: NEW Keywords: regression Severity: normal Priority: P2 Component: directx-d3d Assignee: wine-bugs@winehq.org Reporter: gyebro69@gmail.com CC: hverbeet@gmail.com Regression SHA1: 602a23a60aaab164acb8a2767094d545172ab4cf Distribution: ---
Created attachment 57732 --> https://bugs.winehq.org/attachment.cgi?id=57732 terminal output
This is a DX10 game and needs native d3dcompiler_43 and d3dx10_42 to start.
From the opening videos throughout the menus and in the main game the screen is
flickering heavily. Changing in-game options e.g. screen resolution, MSAA, Vsync doesn't remove this annoyance.
The problem doesn't occur in Wine Staging when CSMT is enabled or when StrictDrawOrdering is enabled in pure Wine.
What makes this bug different from other similar issues reported here is that that the problem is fairly new, there was no need to enable the StrictDrawOrdering in the registry to avoid the screen flickering until
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.
With the previous commit there is no flickering at all.
No demo version available, let me know if you need debug logs.
wine-2.4-256-g4bfa0d829f OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce GT 730/PCIe/SSE2 OpenGL core profile version string: 4.5.0 NVIDIA 378.13 OpenGL core profile shading language version string: 4.50 NVIDIA