Module: wine Branch: master Commit: e49c19ebb5a5c4a74a52cad74a674112c42f8bdc URL: https://gitlab.winehq.org/wine/wine/-/commit/e49c19ebb5a5c4a74a52cad74a67411...
Author: Zebediah Figura zfigura@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;