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