-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi all, Changelog: - - stupid typos fixes on software vertex shader operands - - CopyRects fix (problem in error paths) based on Carlos Lozano patch Regards, Raphael -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQE/r/Kfp7NA3AmQTU4RAqqzAJ9Jf1cSseFXlPxkj4baz2d39U9gGwCfVLsr TAiPkc/TYjKoR1OGGmuOE60= =WLrq -----END PGP SIGNATURE-----
? dlls/d3d8/diff Index: dlls/d3d8/device.c =================================================================== RCS file: /home/wine/wine/dlls/d3d8/device.c,v retrieving revision 1.91 diff -u -r1.91 device.c --- dlls/d3d8/device.c 4 Nov 2003 04:17:28 -0000 1.91 +++ dlls/d3d8/device.c 10 Nov 2003 20:17:18 -0000 @@ -990,8 +990,8 @@ dst->myDesc.Format = src->myDesc.Format; /* Convert container as well */ - IDirect3DSurface8Impl_GetContainer((LPDIRECT3DSURFACE8) dst, &IID_IDirect3DBaseTexture8, (void**) &texture); /* FIXME: Which refid? */ - if (texture != NULL) { + rc = IDirect3DSurface8Impl_GetContainer((LPDIRECT3DSURFACE8) dst, &IID_IDirect3DBaseTexture8, (void**) &texture); /* FIXME: Which refid? */ + if (SUCCEEDED(rc) && NULL != texture) { ((IDirect3DBaseTexture8Impl*) texture)->format = src->myDesc.Format; /** Releasing texture after GetContainer */ IDirect3DBaseTexture8_Release(texture); @@ -1000,38 +1000,39 @@ } /* Quick if complete copy ... */ - if (rc == D3D_OK && cRects == 0 && pSourceRectsArray == NULL && pDestPointsArray == NULL) { + if (SUCCEEDED(rc)) { + if (cRects == 0 && pSourceRectsArray == NULL && pDestPointsArray == NULL) { - if (src->myDesc.Width == dst->myDesc.Width && src->myDesc.Height == dst->myDesc.Height) { - - D3DLOCKED_RECT lrSrc; - D3DLOCKED_RECT lrDst; - IDirect3DSurface8Impl_LockRect((LPDIRECT3DSURFACE8) src, &lrSrc, NULL, D3DLOCK_READONLY); - IDirect3DSurface8Impl_LockRect((LPDIRECT3DSURFACE8) dst, &lrDst, NULL, 0L); - TRACE("Locked src and dst, Direct copy as surfaces are equal, w=%d, h=%d\n", dst->myDesc.Width, dst->myDesc.Height); - - memcpy(lrDst.pBits, lrSrc.pBits, src->myDesc.Size); - - IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) src); - rc = IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) dst); - TRACE("Unlocked src and dst\n"); + if (src->myDesc.Width == dst->myDesc.Width && src->myDesc.Height == dst->myDesc.Height) { + + D3DLOCKED_RECT lrSrc; + D3DLOCKED_RECT lrDst; + IDirect3DSurface8Impl_LockRect((LPDIRECT3DSURFACE8) src, &lrSrc, NULL, D3DLOCK_READONLY); + IDirect3DSurface8Impl_LockRect((LPDIRECT3DSURFACE8) dst, &lrDst, NULL, 0L); + TRACE("Locked src and dst, Direct copy as surfaces are equal, w=%d, h=%d\n", dst->myDesc.Width, dst->myDesc.Height); + + memcpy(lrDst.pBits, lrSrc.pBits, src->myDesc.Size); + + IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) src); + rc = IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) dst); + TRACE("Unlocked src and dst\n"); + + } else { + + FIXME("Wanted to copy all surfaces but size not compatible\n"); + rc = D3DERR_INVALIDCALL; + + } } else { + + if (NULL != pSourceRectsArray && NULL != pDestPointsArray) { - FIXME("Wanted to copy all surfaces but size not compatible\n"); - rc = D3DERR_INVALIDCALL; - - } - - } else { - - if (NULL != pSourceRectsArray && NULL != pDestPointsArray) { - - int bytesPerPixel = ((IDirect3DSurface8Impl*) pSourceSurface)->bytesPerPixel; - int i; + int bytesPerPixel = ((IDirect3DSurface8Impl*) pSourceSurface)->bytesPerPixel; + int i; - /* Copy rect by rect */ - for (i = 0; i < cRects; i++) { + /* Copy rect by rect */ + for (i = 0; i < cRects; i++) { CONST RECT* r = &pSourceRectsArray[i]; CONST POINT* p = &pDestPointsArray[i]; int copyperline; @@ -1040,10 +1041,9 @@ D3DLOCKED_RECT lrDst; RECT dest_rect; - TRACE("Copying rect %d (%ld,%ld),(%ld,%ld) -> (%ld,%ld)\n", i, r->left, r->top, r->right, r->bottom, p->x, p->y); if (src->myDesc.Format == D3DFMT_DXT1) { - copyperline = ((r->right - r->left) * bytesPerPixel)/2; /* DXT1 is half byte per pixel */ + copyperline = ((r->right - r->left) * bytesPerPixel)/2; /* DXT1 is half byte per pixel */ } else { copyperline = ((r->right - r->left) * bytesPerPixel); } @@ -1057,19 +1057,16 @@ /* Find where to start */ for (j = 0; j < (r->bottom - r->top - 1); j++) { - memcpy((char*) lrDst.pBits + (j * lrDst.Pitch), (char*) lrSrc.pBits + (j * lrSrc.Pitch), copyperline); + memcpy((char*) lrDst.pBits + (j * lrDst.Pitch), (char*) lrSrc.pBits + (j * lrSrc.Pitch), copyperline); } - IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) src); rc = IDirect3DSurface8Impl_UnlockRect((LPDIRECT3DSURFACE8) dst); TRACE("Unlocked src and dst\n"); - } - - } else { - - FIXME("Wanted to copy partial surfaces not implemented\n"); - rc = D3DERR_INVALIDCALL; - + } + } else { + FIXME("Wanted to copy partial surfaces not implemented\n"); + rc = D3DERR_INVALIDCALL; + } } } Index: dlls/d3d8/shader.c =================================================================== RCS file: /home/wine/wine/dlls/d3d8/shader.c,v retrieving revision 1.16 diff -u -r1.16 shader.c --- dlls/d3d8/shader.c 25 Sep 2003 20:22:40 -0000 1.16 +++ dlls/d3d8/shader.c 10 Nov 2003 20:17:21 -0000 @@ -306,7 +306,7 @@ void vshader_m3x4(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX34 mat) { d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z; - d->y = mat[2][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z; + d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z; d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z; d->w = mat[3][0] * s0->x + mat[3][1] * s0->y + mat[3][2] * s0->z; VSTRACE(("executing m3x4(1): mat=(%f, %f, %f) s0=(%f) d=(%f) \n", mat[0][0], mat[0][1], mat[0][2], s0->x, d->x)); @@ -316,8 +316,8 @@ } void vshader_m3x3(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX33 mat) { - d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[2][2] * s0->z; - d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[2][2] * s0->z; + d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z; + d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z; d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z; d->w = 1.0f; VSTRACE(("executing m3x3(1): mat=(%f, %f, %f) s0=(%f) d=(%f) \n", mat[0][0], mat[0][1], mat[0][2], s0->x, d->x));