Luis Javier Merino : wined3d: BltFast dealing correctly with overlapping src and dest.
Alexandre Julliard
julliard at winehq.org
Thu Mar 20 09:48:32 CDT 2008
Module: wine
Branch: master
Commit: 3bb1ea3d34bc69a575b0418da89aabfe7e51fe32
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3bb1ea3d34bc69a575b0418da89aabfe7e51fe32
Author: Luis Javier Merino <ninjalj at gmail.com>
Date: Wed Mar 19 03:44:37 2008 +0100
wined3d: BltFast dealing correctly with overlapping src and dest.
---
dlls/wined3d/surface_base.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/surface_base.c b/dlls/wined3d/surface_base.c
index babb49f..14de5a5 100644
--- a/dlls/wined3d/surface_base.c
+++ b/dlls/wined3d/surface_base.c
@@ -1613,13 +1613,28 @@ IWineD3DBaseSurfaceImpl_BltFast(IWineD3DSurface *iface,
else
{
int width = w * bpp;
+ INT sbufpitch, dbufpitch;
+
TRACE("NO color key copy\n");
+ /* Handle overlapping surfaces */
+ if (sbuf < dbuf)
+ {
+ sbuf += (h - 1) * slock.Pitch;
+ dbuf += (h - 1) * dlock.Pitch;
+ sbufpitch = -slock.Pitch;
+ dbufpitch = -dlock.Pitch;
+ }
+ else
+ {
+ sbufpitch = slock.Pitch;
+ dbufpitch = dlock.Pitch;
+ }
for (y = 0; y < h; y++)
{
/* This is pretty easy, a line for line memcpy */
- memcpy(dbuf, sbuf, width);
- sbuf += slock.Pitch;
- dbuf += dlock.Pitch;
+ memmove(dbuf, sbuf, width);
+ sbuf += sbufpitch;
+ dbuf += dbufpitch;
}
TRACE("Copy done\n");
}
More information about the wine-cvs
mailing list