Zebediah Figura : d3d8: Pass NOOVERWRITE to redundantly discarded maps.
Module: wine Branch: master Commit: e49c19ebb5a5c4a74a52cad74a674112c42f8bdc URL: https://gitlab.winehq.org/wine/wine/-/commit/e49c19ebb5a5c4a74a52cad74a67411... Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Fri Nov 10 12:41:23 2023 -0600 d3d8: Pass NOOVERWRITE to redundantly discarded maps. If DISCARD maps are accelerated, passing empty map flags won't return the same accelerated BO. Tested with Port Royale 2 and Rayman 3. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55770 --- dlls/d3d8/buffer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/d3d8/buffer.c b/dlls/d3d8/buffer.c index 866292e43c0..f49f6f9f847 100644 --- a/dlls/d3d8/buffer.c +++ b/dlls/d3d8/buffer.c @@ -193,7 +193,10 @@ static HRESULT WINAPI d3d8_vertexbuffer_Lock(IDirect3DVertexBuffer8 *iface, UINT iface, offset, size, data, flags); if (buffer->discarded) - flags &= ~D3DLOCK_DISCARD; + { + WARN("Filtering out redundant discard of %p.\n", buffer); + flags = (flags & ~D3DLOCK_DISCARD) | D3DLOCK_NOOVERWRITE; + } if (flags & D3DLOCK_DISCARD) buffer->discarded = true; @@ -514,7 +517,10 @@ static HRESULT WINAPI d3d8_indexbuffer_Lock(IDirect3DIndexBuffer8 *iface, UINT o iface, offset, size, data, flags); if (buffer->discarded) - flags &= ~D3DLOCK_DISCARD; + { + WARN("Filtering out redundant discard of %p.\n", buffer); + flags = (flags & ~D3DLOCK_DISCARD) | D3DLOCK_NOOVERWRITE; + } if (flags & D3DLOCK_DISCARD) buffer->discarded = true;
participants (1)
-
Alexandre Julliard