Matteo Bruni : ddraw: Filter out redundant discard maps.
Alexandre Julliard
julliard at winehq.org
Thu Feb 17 15:33:58 CST 2022
Module: wine
Branch: master
Commit: 6784684abf7eae7d331fb95988ef1e85a97ddb1f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6784684abf7eae7d331fb95988ef1e85a97ddb1f
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Thu Feb 17 00:13:50 2022 -0600
ddraw: Filter out redundant discard maps.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ddraw/ddraw_private.h | 2 ++
dlls/ddraw/device.c | 4 ++++
dlls/ddraw/vertexbuffer.c | 4 ++++
3 files changed, 10 insertions(+)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 7929e9e1795..0c2a491d45b 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -22,6 +22,7 @@
#include <assert.h>
#include <limits.h>
#include <math.h>
+#include <stdbool.h>
#define COBJMACROS
#define NONAMELESSSTRUCT
#define NONAMELESSUNION
@@ -598,6 +599,7 @@ struct d3d_vertex_buffer
DWORD fvf;
DWORD size;
BOOL dynamic;
+ bool discarded;
};
HRESULT d3d_vertex_buffer_create(struct d3d_vertex_buffer **buffer, struct ddraw *ddraw,
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 6e8f109173b..860dffc5045 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -4293,6 +4293,8 @@ static HRESULT d3d_device7_DrawPrimitiveVB(IDirect3DDevice7 *iface, D3DPRIMITIVE
return D3D_OK;
}
+ vb_impl->discarded = false;
+
stride = get_flexible_vertex_size(vb_impl->fvf);
if (vb_impl->Caps & D3DVBCAPS_SYSTEMMEMORY)
@@ -4412,6 +4414,8 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface,
return D3D_OK;
}
+ vb_impl->discarded = false;
+
if (vb_impl->Caps & D3DVBCAPS_SYSTEMMEMORY)
{
TRACE("Drawing from D3DVBCAPS_SYSTEMMEMORY vertex buffer, forwarding to DrawIndexedPrimitive().\n");
diff --git a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c
index dd35b445cc5..fa0e4f4c41a 100644
--- a/dlls/ddraw/vertexbuffer.c
+++ b/dlls/ddraw/vertexbuffer.c
@@ -159,10 +159,14 @@ static HRESULT WINAPI d3d_vertex_buffer7_Lock(IDirect3DVertexBuffer7 *iface,
if (buffer->version != 7)
flags &= ~(DDLOCK_NOOVERWRITE | DDLOCK_DISCARDCONTENTS);
+ if (buffer->discarded)
+ flags &= ~DDLOCK_DISCARDCONTENTS;
+
if (!(flags & DDLOCK_WAIT))
flags |= DDLOCK_DONOTWAIT;
if (flags & DDLOCK_DISCARDCONTENTS)
{
+ buffer->discarded = true;
if (!buffer->dynamic)
{
struct wined3d_buffer *new_buffer;
More information about the wine-cvs
mailing list