Index: rostests/apitests/gdi32/MaskBlt.c =================================================================== --- rostests/apitests/gdi32/MaskBlt.c (revision 74717) +++ rostests/apitests/gdi32/MaskBlt.c (working copy) @@ -11,6 +11,13 @@ #include #include "init.h" +#ifndef ROP4_USES_DEST + #define ROP4_USES_DEST(Rop4) ((((Rop4) & 0xAAAA) >> 1) != ((Rop4) & 0x5555)) + #define ROP4_USES_SOURCE(Rop4) ((((Rop4) & 0xCCCC) >> 2) != ((Rop4) & 0x3333)) + #define ROP4_USES_PATTERN(Rop4) ((((Rop4) & 0xF0F0) >> 4) != ((Rop4) & 0x0F0F)) + #define ROP4_USES_MASK(Rop4) ((((Rop4) & 0xFF00) >> 8) != ((Rop4) & 0x00ff)) +#endif + void Test_MaskBlt_1bpp() { HDC hdcDst, hdcSrc; @@ -41,15 +48,19 @@ pjBitsDst[0] = 0xAA; pjBitsSrc[0] = 0xCC; pjBitsMsk[0] = 0xF0; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0xCA, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); pjBitsDst[0] = 0x00; pjBitsSrc[0] = 0xFF; pjBitsMsk[0] = 0xF0; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); /* Do the masking (NOTSRCERASE / SRCINVERT) */ @@ -57,41 +68,54 @@ pjBitsSrc[0] = 0xCC; // 11001100 pjBitsMsk[0] = 0xAA; // 10101010 + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(NOTSRCERASE, SRCINVERT)); // 22 ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0x16, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); /* Do the masking (MERGEPAINT / DSxn) */ + SetLastError(0xDEADBEEF); pjBitsDst[0] = 0xF0; pjBitsSrc[0] = 0xCC; pjBitsMsk[0] = 0xAA; ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(MERGEPAINT, 0x990000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0xE3, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); /* Try a ROP that needs a mask with a NULL mask bitmap handle */ + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, NULL, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0xCC, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); /* Try a ROP that needs a mask with an invalid mask bitmap handle */ + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, (HBITMAP)0x123456, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(ERROR_INVALID_HANDLE); /* Try a ROP that needs a mask with an invalid mask bitmap */ ok(ghbmp24 != NULL, "ghbmp24 is NULL!\n"); + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, ghbmp24, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(ERROR_INVALID_HANDLE); /* Try a ROP that needs no mask with an invalid mask bitmap */ + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, (HBITMAP)0x123456, 0, 0, MAKEROP4(SRCCOPY, SRCCOPY)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); /* Try (PATCOPY / NOOP) with a NULL source mask and bitmap */ + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, NULL, 0, 0, NULL, 0, 0, MAKEROP4(PATCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(0xDEADBEEF); - /* Try with a mask that is smaller than the rect */ DeleteObject(hbmMsk); pbmi->bmiHeader.biWidth = 4; @@ -101,16 +125,23 @@ pjBitsDst[0] = 0xAA; // 10101010 pjBitsSrc[0] = 0xCC; // 11001100 pjBitsMsk[0] = 0x33; // 00110011 + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 5, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(ERROR_INVALID_PARAMETER); + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 4, 1, hdcSrc, 0, 0, hbmMsk, 1, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(ERROR_INVALID_PARAMETER); + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 4, 1, hdcSrc, 0, 0, hbmMsk, 0, 1, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 0, "MaskBlt should fail, but succeeded (%d)\n", ret); + ok_err(ERROR_INVALID_PARAMETER); + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 4, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pjBitsDst[0] == 0x8A, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); - } void Test_MaskBlt_16bpp() @@ -144,15 +175,19 @@ pusBitsSrc[0] = 0x4321; pusBitsSrc[1] = 0x8765; pjBitsMsk[0] = 0x80; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok (pusBitsDst[0] == 0x4321, "pusBitsDst[0] == 0x%x\n", pusBitsDst[0]); ok (pusBitsDst[1] == 0x5678, "pusBitsDst[0] == 0x%x\n", pusBitsDst[1]); pusBitsDst[0] = 0x1234; pusBitsDst[1] = 0x5678; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCPAINT, MERGEPAINT)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok (pusBitsDst[0] == 0x5335, "pusBitsDst[0] == 0x%x\n", pusBitsDst[0]); ok (pusBitsDst[1] == 0x7efa, "pusBitsDst[0] == 0x%x\n", pusBitsDst[1]); } @@ -188,15 +223,19 @@ pulBitsSrc[0] = 0x87684321; pulBitsSrc[1] = 0x0fedcba9; pjBitsMsk[0] = 0x80; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok (pulBitsDst[0] == 0x87684321, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); ok (pulBitsDst[1] == 0x9abcdef0, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[1]); pulBitsDst[0] = 0x12345678; pulBitsDst[1] = 0x9abcdef0; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCPAINT, MERGEPAINT)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok (pulBitsDst[0] == 0x977c5779, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); ok (pulBitsDst[1] == 0xfabefef6, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[1]); } @@ -232,8 +271,10 @@ /* Do the masking (SRCCOPY / NOOP) */ pulBitsDst[0] = 0x00000000; pulBitsSrc[0] = 0xFFFFFFFF; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, NULL, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pulBitsDst[0] == 0, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); /* Create a 1 bpp pattern brush */ @@ -248,19 +289,21 @@ pulBitsDst[0] = 0x00000000; pulBitsSrc[0] = 0xFFFFFFFF; pulBitsMsk[0] = 0xCCAAFF00; + SetLastError(0xDEADBEEF); ret = MaskBlt(hdcDst, 0, 0, 16, 1, hdcSrc, 0, 0, NULL, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok_err(0xDEADBEEF); ok(pulBitsDst[0] == 0, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); - } START_TEST(MaskBlt) { InitStuff(); + + ok_int(ROP4_USES_PATTERN(MAKEROP4(PATCOPY, 0xAA0000)), TRUE); + Test_MaskBlt_1bpp(); Test_MaskBlt_16bpp(); Test_MaskBlt_32bpp(); Test_MaskBlt_Brush(); - } -