| Index: tests/ReadPixelsTest.cpp
|
| diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp
|
| index 008781ca0600abeb197906b5eb4a4be91668406d..5fa7dd19f46d42d954620f72f285315f0732391d 100644
|
| --- a/tests/ReadPixelsTest.cpp
|
| +++ b/tests/ReadPixelsTest.cpp
|
| @@ -135,8 +135,14 @@ static void fill_dst_bmp_with_init_data(SkBitmap* bitmap) {
|
| intptr_t pixels = reinterpret_cast<intptr_t>(bitmap->getPixels());
|
| for (int y = 0; y < h; ++y) {
|
| for (int x = 0; x < w; ++x) {
|
| - SkPMColor* pixel = reinterpret_cast<SkPMColor*>(pixels + y * bitmap->rowBytes() + x * bitmap->bytesPerPixel());
|
| - *pixel = get_dst_bmp_init_color(x, y, w);
|
| + SkPMColor initColor = get_dst_bmp_init_color(x, y, w);
|
| + if (kAlpha_8_SkColorType == bitmap->colorType()) {
|
| + uint8_t* alpha = reinterpret_cast<uint8_t*>(pixels + y * bitmap->rowBytes() + x);
|
| + *alpha = SkGetPackedA32(initColor);
|
| + } else {
|
| + SkPMColor* pixel = reinterpret_cast<SkPMColor*>(pixels + y * bitmap->rowBytes() + x * bitmap->bytesPerPixel());
|
| + *pixel = initColor;
|
| + }
|
| }
|
| }
|
| }
|
| @@ -168,14 +174,13 @@ static bool check_read(skiatest::Reporter* reporter,
|
| const SkBitmap& bitmap,
|
| int x, int y,
|
| bool checkCanvasPixels,
|
| - bool checkBitmapPixels) {
|
| - SkASSERT(4 == bitmap.bytesPerPixel());
|
| + bool checkBitmapPixels,
|
| + SkColorType ct,
|
| + SkAlphaType at) {
|
| + SkASSERT(ct == bitmap.colorType() && at == bitmap.alphaType());
|
| SkASSERT(!bitmap.isNull());
|
| SkASSERT(checkCanvasPixels || checkBitmapPixels);
|
|
|
| - const SkColorType ct = bitmap.colorType();
|
| - const SkAlphaType at = bitmap.alphaType();
|
| -
|
| int bw = bitmap.width();
|
| int bh = bitmap.height();
|
|
|
| @@ -185,6 +190,34 @@ static bool check_read(skiatest::Reporter* reporter,
|
| clippedSrcRect.setEmpty();
|
| }
|
| SkAutoLockPixels alp(bitmap);
|
| + if (kAlpha_8_SkColorType == ct) {
|
| + for (int by = 0; by < bh; ++by) {
|
| + for (int bx = 0; bx < bw; ++bx) {
|
| + int devx = bx + srcRect.fLeft;
|
| + int devy = by + srcRect.fTop;
|
| + const uint8_t* alpha = bitmap.getAddr8(bx, by);
|
| +
|
| + if (clippedSrcRect.contains(devx, devy)) {
|
| + if (checkCanvasPixels) {
|
| + uint8_t canvasAlpha = SkGetPackedA32(get_src_color(devx, devy));
|
| + if (canvasAlpha != *alpha) {
|
| + ERRORF(reporter, "Expected readback alpha (%d, %d) value 0x%02x, got 0x%02x. ",
|
| + bx, by, canvasAlpha, *alpha);
|
| + return false;
|
| + }
|
| + }
|
| + } else if (checkBitmapPixels) {
|
| + uint32_t origDstAlpha = SkGetPackedA32(get_dst_bmp_init_color(bx, by, bw));
|
| + if (origDstAlpha != *alpha) {
|
| + ERRORF(reporter, "Expected clipped out area of readback to be unchanged. "
|
| + "Expected 0x%02x, got 0x%02x", origDstAlpha, *alpha);
|
| + return false;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return true;
|
| + }
|
| for (int by = 0; by < bh; ++by) {
|
| for (int bx = 0; bx < bw; ++bx) {
|
| int devx = bx + srcRect.fLeft;
|
| @@ -249,10 +282,10 @@ static void init_bitmap(SkBitmap* bitmap, const SkIRect& rect, BitmapInit init,
|
| case kTight_BitmapInit:
|
| break;
|
| case kRowBytes_BitmapInit:
|
| - rowBytes = (info.width() + 16) * sizeof(SkPMColor);
|
| + rowBytes = SkAlign4((info.width() + 16) * info.bytesPerPixel());
|
| break;
|
| case kRowBytesOdd_BitmapInit:
|
| - rowBytes = (info.width() * sizeof(SkPMColor)) + 3;
|
| + rowBytes = SkAlign4(info.width() * info.bytesPerPixel()) + 3;
|
| break;
|
| default:
|
| SkASSERT(0);
|
| @@ -274,6 +307,7 @@ static const struct {
|
| { kRGBA_8888_SkColorType, kUnpremul_SkAlphaType },
|
| { kBGRA_8888_SkColorType, kPremul_SkAlphaType },
|
| { kBGRA_8888_SkColorType, kUnpremul_SkAlphaType },
|
| + { kAlpha_8_SkColorType, kPremul_SkAlphaType },
|
| };
|
| const SkIRect gReadPixelsTestRects[] = {
|
| // entire thing
|
| @@ -354,7 +388,8 @@ static void test_readpixels(skiatest::Reporter* reporter, const sk_sp<SkSurface>
|
|
|
| if (success || startsWithPixels) {
|
| check_read(reporter, bmp, srcRect.fLeft, srcRect.fTop,
|
| - success, startsWithPixels);
|
| + success, startsWithPixels,
|
| + gReadPixelsConfigs[c].fColorType, gReadPixelsConfigs[c].fAlphaType);
|
| } else {
|
| // if we had no pixels beforehand and the readPixels
|
| // failed then our bitmap should still not have pixels
|
| @@ -371,7 +406,8 @@ static void test_readpixels(skiatest::Reporter* reporter, const sk_sp<SkSurface>
|
| REPORTER_ASSERT(reporter, kN32_SkColorType == wkbmp.colorType());
|
| REPORTER_ASSERT(reporter, kPremul_SkAlphaType == wkbmp.alphaType());
|
| check_read(reporter, wkbmp, clippedRect.fLeft,
|
| - clippedRect.fTop, true, false);
|
| + clippedRect.fTop, true, false,
|
| + kN32_SkColorType, kPremul_SkAlphaType);
|
| } else {
|
| REPORTER_ASSERT(reporter, !success);
|
| }
|
| @@ -427,7 +463,8 @@ static void test_readpixels_texture(skiatest::Reporter* reporter, GrTexture* tex
|
| bmp.rowBytes(), flags);
|
| bmp.unlockPixels();
|
| check_read(reporter, bmp, srcRect.fLeft, srcRect.fTop,
|
| - success, true);
|
| + success, true,
|
| + gReadPixelsConfigs[c].fColorType, gReadPixelsConfigs[c].fAlphaType);
|
| }
|
| }
|
| }
|
|
|