wined3d: Invalidate the entire buffer on maps with WINED3DLOCK_DISCARD.
This commit is contained in:
parent
611b541f29
commit
0610d1eec9
|
@ -1011,7 +1011,20 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN
|
||||||
flags = buffer_sanitize_flags(buffer, flags);
|
flags = buffer_sanitize_flags(buffer, flags);
|
||||||
if (!(flags & WINED3DLOCK_READONLY))
|
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;
|
count = ++buffer->resource.map_count;
|
||||||
|
|
Loading…
Reference in New Issue