gdi32/tests: Update the StretchBlt tests to use a 16x16 bitmap.

This commit is contained in:
Huw Davies 2011-09-22 13:56:28 +01:00 committed by Alexandre Julliard
parent 00de502b36
commit abc76c27a7

View File

@ -37,33 +37,20 @@ static DWORD (WINAPI *pSetLayout)(HDC hdc, DWORD layout);
#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); } #define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); }
static INT BITMAP_GetWidthBytes( INT bmWidth, INT bpp ) static inline int get_bitmap_stride( int width, int bpp )
{ {
switch(bpp) return ((width * bpp + 15) >> 3) & ~1;
{ }
case 1:
return 2 * ((bmWidth+15) >> 4);
case 24: static inline int get_dib_stride( int width, int bpp )
bmWidth *= 3; /* fall through */ {
case 8: return ((width * bpp + 31) >> 3) & ~3;
return bmWidth + (bmWidth & 1); }
case 32: static inline int get_dib_image_size( const BITMAPINFO *info )
return bmWidth * 4; {
return get_dib_stride( info->bmiHeader.biWidth, info->bmiHeader.biBitCount )
case 16: * abs( info->bmiHeader.biHeight );
case 15:
return bmWidth * 2;
case 4:
return 2 * ((bmWidth+3) >> 2);
default:
trace("Unknown depth %d, please report.\n", bpp );
assert(0);
}
return -1;
} }
static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHEADER *bmih) static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHEADER *bmih)
@ -79,7 +66,7 @@ static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHE
ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType);
ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight); ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight);
width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); width_bytes = get_bitmap_stride(bm.bmWidth, bm.bmBitsPixel);
ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes); ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes);
ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes); ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes);
ok(bm.bmBitsPixel == expected_depth, "wrong bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, expected_depth); ok(bm.bmBitsPixel == expected_depth, "wrong bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, expected_depth);
@ -253,11 +240,6 @@ static void test_createdibitmap(void)
ReleaseDC(0, hdc); ReleaseDC(0, hdc);
} }
static INT DIB_GetWidthBytes( int width, int bpp )
{
return ((width * bpp + 31) / 8) & ~3;
}
static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER *bmih) static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER *bmih)
{ {
BITMAP bm; BITMAP bm;
@ -273,8 +255,8 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType);
ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == abs(bmih->biHeight), "wrong bm.bmHeight %d\n", bm.bmHeight); ok(bm.bmHeight == abs(bmih->biHeight), "wrong bm.bmHeight %d\n", bm.bmHeight);
dib_width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); dib_width_bytes = get_dib_stride(bm.bmWidth, bm.bmBitsPixel);
bm_width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); bm_width_bytes = get_bitmap_stride(bm.bmWidth, bm.bmBitsPixel);
if (bm.bmWidthBytes != dib_width_bytes) /* Win2k bug */ if (bm.bmWidthBytes != dib_width_bytes) /* Win2k bug */
ok(bm.bmWidthBytes == bm_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, bm_width_bytes); ok(bm.bmWidthBytes == bm_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, bm_width_bytes);
else else
@ -1904,7 +1886,7 @@ static void test_GetDIBits(void)
ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType); ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType);
ok(bm.bmWidth == 16, "wrong bmWidth %d\n", bm.bmWidth); ok(bm.bmWidth == 16, "wrong bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == 16, "wrong bmHeight %d\n", bm.bmHeight); ok(bm.bmHeight == 16, "wrong bmHeight %d\n", bm.bmHeight);
ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes); ok(bm.bmWidthBytes == get_bitmap_stride(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes);
ok(bm.bmPlanes == GetDeviceCaps(hdc, PLANES), "wrong bmPlanes %u\n", bm.bmPlanes); ok(bm.bmPlanes == GetDeviceCaps(hdc, PLANES), "wrong bmPlanes %u\n", bm.bmPlanes);
ok(bm.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "wrong bmBitsPixel %d\n", bm.bmBitsPixel); ok(bm.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "wrong bmBitsPixel %d\n", bm.bmBitsPixel);
ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits); ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits);
@ -2378,7 +2360,7 @@ static void test_select_object(void)
ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType); ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType);
ok(bm.bmWidth == 10, "wrong bmWidth %d\n", bm.bmWidth); ok(bm.bmWidth == 10, "wrong bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == 10, "wrong bmHeight %d\n", bm.bmHeight); ok(bm.bmHeight == 10, "wrong bmHeight %d\n", bm.bmHeight);
ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes); ok(bm.bmWidthBytes == get_bitmap_stride(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes);
ok(bm.bmPlanes == planes, "wrong bmPlanes %u\n", bm.bmPlanes); ok(bm.bmPlanes == planes, "wrong bmPlanes %u\n", bm.bmPlanes);
if(depths[i] == 15) { if(depths[i] == 15) {
ok(bm.bmBitsPixel == 16, "wrong bmBitsPixel %d(15 bpp special)\n", bm.bmBitsPixel); ok(bm.bmBitsPixel == 16, "wrong bmBitsPixel %d(15 bpp special)\n", bm.bmBitsPixel);
@ -2751,15 +2733,17 @@ static void check_StretchBlt_pixel(HDC hdcDst, HDC hdcSrc, UINT32 *dstBuffer, UI
dwRop, expected, *dstBuffer, line); dwRop, expected, *dstBuffer, line);
} }
static void check_StretchBlt_stretch(HDC hdcDst, HDC hdcSrc, UINT32 *dstBuffer, UINT32 *srcBuffer, static void check_StretchBlt_stretch(HDC hdcDst, HDC hdcSrc, BITMAPINFO *dst_info, UINT32 *dstBuffer, UINT32 *srcBuffer,
int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest,
int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc,
UINT32 expected[4], int line) UINT32 *expected, int line)
{ {
memset(dstBuffer, 0, 16); int dst_size = get_dib_image_size( dst_info );
memset(dstBuffer, 0, dst_size);
StretchBlt(hdcDst, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, StretchBlt(hdcDst, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY); hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
ok(memcmp(dstBuffer, expected, 16) == 0, ok(memcmp(dstBuffer, expected, dst_size) == 0,
"StretchBlt expected { %08X, %08X, %08X, %08X } got { %08X, %08X, %08X, %08X } " "StretchBlt expected { %08X, %08X, %08X, %08X } got { %08X, %08X, %08X, %08X } "
"stretching { %d, %d, %d, %d } to { %d, %d, %d, %d } from line %d\n", "stretching { %d, %d, %d, %d } to { %d, %d, %d, %d } from line %d\n",
expected[0], expected[1], expected[2], expected[3], expected[0], expected[1], expected[2], expected[3],
@ -2776,12 +2760,12 @@ static void test_StretchBlt(void)
UINT32 *dstBuffer, *srcBuffer; UINT32 *dstBuffer, *srcBuffer;
HBRUSH hBrush, hOldBrush; HBRUSH hBrush, hOldBrush;
BITMAPINFO biDst, biSrc; BITMAPINFO biDst, biSrc;
UINT32 expected[4]; UINT32 expected[256];
memset(&biDst, 0, sizeof(BITMAPINFO)); memset(&biDst, 0, sizeof(BITMAPINFO));
biDst.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); biDst.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
biDst.bmiHeader.biWidth = 2; biDst.bmiHeader.biWidth = 16;
biDst.bmiHeader.biHeight = -2; biDst.bmiHeader.biHeight = -16;
biDst.bmiHeader.biPlanes = 1; biDst.bmiHeader.biPlanes = 1;
biDst.bmiHeader.biBitCount = 32; biDst.bmiHeader.biBitCount = 32;
biDst.bmiHeader.biCompression = BI_RGB; biDst.bmiHeader.biCompression = BI_RGB;
@ -2796,7 +2780,7 @@ static void test_StretchBlt(void)
NULL, 0); NULL, 0);
oldDst = SelectObject(hdcDst, bmpDst); oldDst = SelectObject(hdcDst, bmpDst);
bmpSrc = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&srcBuffer, bmpSrc = CreateDIBSection(hdcScreen, &biSrc, DIB_RGB_COLORS, (void**)&srcBuffer,
NULL, 0); NULL, 0);
oldSrc = SelectObject(hdcSrc, bmpSrc); oldSrc = SelectObject(hdcSrc, bmpSrc);
@ -2824,105 +2808,113 @@ static void test_StretchBlt(void)
/* Top-down to top-down tests */ /* Top-down to top-down tests */
srcBuffer[0] = 0xCAFED00D, srcBuffer[1] = 0xFEEDFACE; srcBuffer[0] = 0xCAFED00D, srcBuffer[1] = 0xFEEDFACE;
srcBuffer[2] = 0xFEDCBA98, srcBuffer[3] = 0x76543210; srcBuffer[16] = 0xFEDCBA98, srcBuffer[17] = 0x76543210;
memset( expected, 0, get_dib_image_size( &biDst ) );
expected[0] = 0xCAFED00D, expected[1] = 0xFEEDFACE; expected[0] = 0xCAFED00D, expected[1] = 0xFEEDFACE;
expected[2] = 0xFEDCBA98, expected[3] = 0x76543210; expected[16] = 0xFEDCBA98, expected[17] = 0x76543210;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__); 0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0xCAFED00D, expected[1] = 0x00000000; expected[0] = 0xCAFED00D, expected[1] = 0x00000000;
expected[2] = 0x00000000, expected[3] = 0x00000000; expected[16] = 0x00000000, expected[17] = 0x00000000;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 1, 1, 0, 0, 1, 1, expected, __LINE__); 0, 0, 1, 1, 0, 0, 1, 1, expected, __LINE__);
expected[0] = 0xCAFED00D, expected[1] = 0xCAFED00D; expected[0] = 0xCAFED00D, expected[1] = 0xCAFED00D;
expected[2] = 0xCAFED00D, expected[3] = 0xCAFED00D; expected[16] = 0xCAFED00D, expected[17] = 0xCAFED00D;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 1, 1, expected, __LINE__); 0, 0, 2, 2, 0, 0, 1, 1, expected, __LINE__);
expected[0] = 0xCAFED00D, expected[1] = 0x00000000; expected[0] = 0xCAFED00D, expected[1] = 0x00000000;
expected[2] = 0x00000000, expected[3] = 0x00000000; expected[16] = 0x00000000, expected[17] = 0x00000000;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 1, 1, 0, 0, 2, 2, expected, __LINE__); 0, 0, 1, 1, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0x76543210, expected[1] = 0xFEDCBA98; expected[0] = 0x76543210, expected[1] = 0xFEDCBA98;
expected[2] = 0xFEEDFACE, expected[3] = 0xCAFED00D; expected[16] = 0xFEEDFACE, expected[17] = 0xCAFED00D;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__); 0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__);
expected[0] = 0x76543210, expected[1] = 0xFEDCBA98; expected[0] = 0x76543210, expected[1] = 0xFEDCBA98;
expected[2] = 0xFEEDFACE, expected[3] = 0xCAFED00D; expected[16] = 0xFEEDFACE, expected[17] = 0xCAFED00D;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
1, 1, -2, -2, 0, 0, 2, 2, expected, __LINE__); 1, 1, -2, -2, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0xCAFED00D, expected[1] = 0x00000000; expected[0] = 0xCAFED00D, expected[1] = 0x00000000;
expected[2] = 0x00000000, expected[3] = 0x00000000; expected[16] = 0x00000000, expected[17] = 0x00000000;
todo_wine check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, todo_wine check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
1, 1, -2, -2, 1, 1, -2, -2, expected, __LINE__); 1, 1, -2, -2, 1, 1, -2, -2, expected, __LINE__);
expected[0] = 0x00000000, expected[1] = 0x00000000; expected[0] = 0x00000000, expected[1] = 0x00000000;
expected[2] = 0x00000000, expected[3] = 0xCAFED00D; expected[16] = 0x00000000, expected[17] = 0xCAFED00D, expected[18] = 0xFEEDFACE;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, expected[32] = 0x00000000, expected[33] = 0xFEDCBA98, expected[34] = 0x76543210;
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
1, 1, 2, 2, 0, 0, 2, 2, expected, __LINE__); 1, 1, 2, 2, 0, 0, 2, 2, expected, __LINE__);
SelectObject(hdcDst, oldDst); SelectObject(hdcDst, oldDst);
DeleteObject(bmpDst); DeleteObject(bmpDst);
/* Top-down to bottom-up tests */ /* Top-down to bottom-up tests */
biDst.bmiHeader.biHeight = 2; biDst.bmiHeader.biHeight = 16;
bmpDst = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&dstBuffer, bmpDst = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&dstBuffer,
NULL, 0); NULL, 0);
oldDst = SelectObject(hdcDst, bmpDst); oldDst = SelectObject(hdcDst, bmpDst);
expected[0] = 0xFEDCBA98, expected[1] = 0x76543210; memset( expected, 0, get_dib_image_size( &biDst ) );
expected[2] = 0xCAFED00D, expected[3] = 0xFEEDFACE;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, expected[224] = 0xFEDCBA98, expected[225] = 0x76543210;
expected[240] = 0xCAFED00D, expected[241] = 0xFEEDFACE;
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__); 0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0xFEEDFACE, expected[1] = 0xCAFED00D; expected[224] = 0xFEEDFACE, expected[225] = 0xCAFED00D;
expected[2] = 0x76543210, expected[3] = 0xFEDCBA98; expected[240] = 0x76543210, expected[241] = 0xFEDCBA98;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__); 0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__);
SelectObject(hdcSrc, oldSrc); SelectObject(hdcSrc, oldSrc);
DeleteObject(bmpSrc); DeleteObject(bmpSrc);
/* Bottom-up to bottom-up tests */ /* Bottom-up to bottom-up tests */
biSrc.bmiHeader.biHeight = 2; biSrc.bmiHeader.biHeight = 16;
bmpSrc = CreateDIBSection(hdcScreen, &biSrc, DIB_RGB_COLORS, (void**)&srcBuffer, bmpSrc = CreateDIBSection(hdcScreen, &biSrc, DIB_RGB_COLORS, (void**)&srcBuffer,
NULL, 0); NULL, 0);
srcBuffer[0] = 0xCAFED00D, srcBuffer[1] = 0xFEEDFACE; srcBuffer[224] = 0xCAFED00D, srcBuffer[225] = 0xFEEDFACE;
srcBuffer[2] = 0xFEDCBA98, srcBuffer[3] = 0x76543210; srcBuffer[240] = 0xFEDCBA98, srcBuffer[241] = 0x76543210;
oldSrc = SelectObject(hdcSrc, bmpSrc); oldSrc = SelectObject(hdcSrc, bmpSrc);
expected[0] = 0xCAFED00D, expected[1] = 0xFEEDFACE; memset( expected, 0, get_dib_image_size( &biDst ) );
expected[2] = 0xFEDCBA98, expected[3] = 0x76543210;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, expected[224] = 0xCAFED00D, expected[225] = 0xFEEDFACE;
expected[240] = 0xFEDCBA98, expected[241] = 0x76543210;
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__); 0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0x76543210, expected[1] = 0xFEDCBA98; expected[224] = 0x76543210, expected[225] = 0xFEDCBA98;
expected[2] = 0xFEEDFACE, expected[3] = 0xCAFED00D; expected[240] = 0xFEEDFACE, expected[241] = 0xCAFED00D;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__); 0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__);
SelectObject(hdcDst, oldDst); SelectObject(hdcDst, oldDst);
DeleteObject(bmpDst); DeleteObject(bmpDst);
/* Bottom-up to top-down tests */ /* Bottom-up to top-down tests */
biDst.bmiHeader.biHeight = -2; biDst.bmiHeader.biHeight = -16;
bmpDst = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&dstBuffer, bmpDst = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&dstBuffer,
NULL, 0); NULL, 0);
oldDst = SelectObject(hdcDst, bmpDst); oldDst = SelectObject(hdcDst, bmpDst);
memset( expected, 0, get_dib_image_size( &biDst ) );
expected[0] = 0xFEDCBA98, expected[1] = 0x76543210; expected[0] = 0xFEDCBA98, expected[1] = 0x76543210;
expected[2] = 0xCAFED00D, expected[3] = 0xFEEDFACE; expected[16] = 0xCAFED00D, expected[17] = 0xFEEDFACE;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__); 0, 0, 2, 2, 0, 0, 2, 2, expected, __LINE__);
expected[0] = 0xFEEDFACE, expected[1] = 0xCAFED00D; expected[0] = 0xFEEDFACE, expected[1] = 0xCAFED00D;
expected[2] = 0x76543210, expected[3] = 0xFEDCBA98; expected[16] = 0x76543210, expected[17] = 0xFEDCBA98;
check_StretchBlt_stretch(hdcDst, hdcSrc, dstBuffer, srcBuffer, check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__); 0, 0, 2, 2, 1, 1, -2, -2, expected, __LINE__);
SelectObject(hdcSrc, oldSrc); SelectObject(hdcSrc, oldSrc);
@ -2933,12 +2925,13 @@ static void test_StretchBlt(void)
bmpSrc = CreateDIBSection(hdcScreen, &biSrc, DIB_RGB_COLORS, (void**)&srcBuffer, NULL, 0); bmpSrc = CreateDIBSection(hdcScreen, &biSrc, DIB_RGB_COLORS, (void**)&srcBuffer, NULL, 0);
oldSrc = SelectObject(hdcSrc, bmpSrc); oldSrc = SelectObject(hdcSrc, bmpSrc);
memset( expected, 0, get_dib_image_size( &biDst ) );
expected[0] = 0xFEEDFACE, expected[1] = 0xCAFED00D; expected[0] = 0xFEEDFACE, expected[1] = 0xCAFED00D;
expected[2] = 0x76543210, expected[3] = 0xFEDCBA98; expected[2] = 0x76543210, expected[3] = 0xFEDCBA98;
memcpy(dstBuffer, expected, 4 * sizeof(*dstBuffer)); memcpy(dstBuffer, expected, 4 * sizeof(*dstBuffer));
StretchBlt(hdcSrc, 0, 0, 2, 2, hdcDst, 0, 0, 2, 2, SRCCOPY ); StretchBlt(hdcSrc, 0, 0, 4, 1, hdcDst, 0, 0, 4, 1, SRCCOPY );
memset(dstBuffer, 0x55, 4 * sizeof(*dstBuffer)); memset(dstBuffer, 0x55, 4 * sizeof(*dstBuffer));
StretchBlt(hdcDst, 0, 0, 2, 2, hdcSrc, 0, 0, 2, 2, SRCCOPY ); StretchBlt(hdcDst, 0, 0, 4, 1, hdcSrc, 0, 0, 4, 1, SRCCOPY );
expected[0] = 0x00EDFACE, expected[1] = 0x00FED00D; expected[0] = 0x00EDFACE, expected[1] = 0x00FED00D;
expected[2] = 0x00543210, expected[3] = 0x00DCBA98; expected[2] = 0x00543210, expected[3] = 0x00DCBA98;
ok(!memcmp(dstBuffer, expected, 16), ok(!memcmp(dstBuffer, expected, 16),
@ -2950,9 +2943,9 @@ static void test_StretchBlt(void)
expected[2] = 0x76543210, expected[3] = 0xFEDCBA98; expected[2] = 0x76543210, expected[3] = 0xFEDCBA98;
memcpy(srcBuffer, expected, 4 * sizeof(*dstBuffer)); memcpy(srcBuffer, expected, 4 * sizeof(*dstBuffer));
memset(dstBuffer, 0x55, 4 * sizeof(*dstBuffer)); memset(dstBuffer, 0x55, 4 * sizeof(*dstBuffer));
StretchBlt(hdcDst, 0, 0, 2, 2, hdcSrc, 0, 0, 2, 2, SRCCOPY ); StretchBlt(hdcDst, 0, 0, 4, 1, hdcSrc, 0, 0, 4, 1, SRCCOPY );
expected[0] = 0x00EDFACE, expected[1] = 0x00D00DFE; expected[0] = 0x00EDFACE, expected[1] = 0x00D00DFE;
expected[2] = 0x00543210, expected[3] = 0x00BA9876; expected[2] = 0x0010CAFE, expected[3] = 0x00765432;
ok(!memcmp(dstBuffer, expected, 16), ok(!memcmp(dstBuffer, expected, 16),
"StretchBlt expected { %08X, %08X, %08X, %08X } got { %08X, %08X, %08X, %08X }\n", "StretchBlt expected { %08X, %08X, %08X, %08X } got { %08X, %08X, %08X, %08X }\n",
expected[0], expected[1], expected[2], expected[3], expected[0], expected[1], expected[2], expected[3],