wined3d: Invalidate the entire buffer on maps with WINED3DLOCK_DISCARD.

This commit is contained in:
Henri Verbeet 2012-06-12 17:03:50 +02:00 committed by Alexandre Julliard
parent 611b541f29
commit 0610d1eec9
1 changed files with 14 additions and 1 deletions

View File

@ -1011,7 +1011,20 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN
flags = buffer_sanitize_flags(buffer, flags);
if (!(flags & WINED3DLOCK_READONLY))
{
if (!buffer_add_dirty_area(buffer, offset, size)) return E_OUTOFMEMORY;
if (flags & WINED3DLOCK_DISCARD)
{
/* 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 (!buffer_add_dirty_area(buffer, 0, 0))
return E_OUTOFMEMORY;
}
else
{
if (!buffer_add_dirty_area(buffer, offset, size))
return E_OUTOFMEMORY;
}
}
count = ++buffer->resource.map_count;