Module: wine
Branch: master
Commit: cbaa17d3cf7d6f3bd6a050aff33cce9942287c2a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cbaa17d3cf7d6f3bd6a050aff…
Author: Henri Verbeet <hverbeet(a)codeweavers.com>
Date: Tue Aug 13 08:51:46 2013 +0200
wined3d: Assume the buffer has a buffer object in buffer_add_dirty_area().
---
dlls/wined3d/buffer.c | 27 ++++++++++++---------------
1 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index f2ba88e..4bfca33 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -34,11 +34,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
#define VB_MAXFULLCONVERSIONS 5 /* Number of full conversions before we stop converting */
#define VB_RESETFULLCONVS 20 /* Reset full conversion counts after that number of draws */
-static void buffer_add_dirty_area(struct wined3d_buffer *buffer, UINT offset, UINT size)
+static void buffer_invalidate_bo_range(struct wined3d_buffer *buffer, UINT offset, UINT size)
{
- if (!buffer->buffer_object)
- return;
-
if (!offset && !size)
goto invalidate_all;
@@ -188,7 +185,7 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc
if (This->flags & WINED3D_BUFFER_DOUBLEBUFFER)
{
- buffer_add_dirty_area(This, 0, 0);
+ buffer_invalidate_bo_range(This, 0, 0);
}
else
{
@@ -808,7 +805,7 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer)
/* The declaration changed, reload the whole buffer. */
WARN("Reloading buffer because of a vertex declaration change.\n");
- buffer_add_dirty_area(buffer, 0, 0);
+ buffer_invalidate_bo_range(buffer, 0, 0);
/* Avoid unfenced updates, we might overwrite more areas of the buffer than the application
* cleared for unsynchronized updates
@@ -990,19 +987,19 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN
TRACE("buffer %p, offset %u, size %u, data %p, flags %#x\n", buffer, offset, size, data, flags);
flags = buffer_sanitize_flags(buffer, flags);
- /* DISCARD invalidates the entire buffer, regardless of the specified
- * offset and size. Some applications also depend on the entire buffer
- * being uploaded in that case. Two such applications are Port Royale
- * and Darkstar One. */
- if (flags & WINED3D_MAP_DISCARD)
- buffer_add_dirty_area(buffer, 0, 0);
- else if (!(flags & WINED3D_MAP_READONLY))
- buffer_add_dirty_area(buffer, offset, size);
-
count = ++buffer->resource.map_count;
if (buffer->buffer_object)
{
+ /* DISCARD invalidates the entire buffer, regardless of the specified
+ * offset and size. Some applications also depend on the entire buffer
+ * being uploaded in that case. Two such applications are Port Royale
+ * and Darkstar One. */
+ if (flags & WINED3D_MAP_DISCARD)
+ buffer_invalidate_bo_range(buffer, 0, 0);
+ else if (!(flags & WINED3D_MAP_READONLY))
+ buffer_invalidate_bo_range(buffer, offset, size);
+
if (!(buffer->flags & WINED3D_BUFFER_DOUBLEBUFFER))
{
if (count == 1)