[PATCH 3/5] wined3d: Invalidate STATE_STREAMSRC in buffer_unload() if needed.

Henri Verbeet hverbeet at codeweavers.com
Fri Aug 5 05:39:00 CDT 2016


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/buffer.c | 18 ++++++++----------
 dlls/wined3d/device.c |  3 ---
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 9e0892e..d51d0e8 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -538,6 +538,14 @@ static void buffer_unload(struct wined3d_resource *resource)
         buffer->stride = 0;
         buffer->conversion_stride = 0;
         buffer->flags &= ~WINED3D_BUFFER_HASDESC;
+
+        /* The stream source state handler might have read the memory of the
+         * vertex buffer already and got the memory in the vbo which is not
+         * valid any longer. Dirtify the stream source to force a reload. This
+         * happens only once per changed vertexbuffer and should occur rather
+         * rarely. */
+        if (resource->bind_count)
+            device_invalidate_state(device, STATE_STREAMSRC);
     }
 
     resource_unload(resource);
@@ -545,18 +553,8 @@ static void buffer_unload(struct wined3d_resource *resource)
 
 static void wined3d_buffer_drop_bo(struct wined3d_buffer *buffer)
 {
-    struct wined3d_device *device = buffer->resource.device;
-
     buffer->flags &= ~WINED3D_BUFFER_USE_BO;
     buffer_unload(&buffer->resource);
-
-    /* The stream source state handler might have read the memory of
-     * the vertex buffer already and got the memory in the vbo which
-     * is not valid any longer. Dirtify the stream source to force a
-     * reload. This happens only once per changed vertexbuffer and
-     * should occur rather rarely. */
-    if (buffer->resource.bind_count)
-        device_invalidate_state(device, STATE_STREAMSRC);
 }
 
 static void wined3d_buffer_destroy_object(void *object)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 9a4f0d3..1bc3d1b 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4546,9 +4546,6 @@ void CDECL wined3d_device_evict_managed_resources(struct wined3d_device *device)
             resource->resource_ops->resource_unload(resource);
         }
     }
-
-    /* Invalidate stream sources, the buffer(s) may have been evicted. */
-    device_invalidate_state(device, STATE_STREAMSRC);
 }
 
 static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d_swapchain *swapchain)
-- 
2.1.4




More information about the wine-patches mailing list