| Index: tests/PremulAlphaRoundTripTest.cpp
|
| diff --git a/tests/PremulAlphaRoundTripTest.cpp b/tests/PremulAlphaRoundTripTest.cpp
|
| index 211006ad214a30313a69838d7ebb60c1e4348886..7f94485d466e6bcb19b7e15d8670413b6aaa278a 100644
|
| --- a/tests/PremulAlphaRoundTripTest.cpp
|
| +++ b/tests/PremulAlphaRoundTripTest.cpp
|
| @@ -12,7 +12,7 @@
|
| #include "sk_tool_utils.h"
|
|
|
| #if SK_SUPPORT_GPU
|
| -#include "GrContextFactory.h"
|
| +#include "GrContext.h"
|
| #include "SkGpuDevice.h"
|
| #endif
|
|
|
| @@ -63,72 +63,55 @@ static void fillCanvas(SkCanvas* canvas, SkColorType colorType, PackUnpremulProc
|
| canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0);
|
| }
|
|
|
| -DEF_GPUTEST(PremulAlphaRoundTrip, reporter, factory) {
|
| - const SkImageInfo info = SkImageInfo::MakeN32Premul(256, 256);
|
| -
|
| - for (int dtype = 0; dtype < 2; ++dtype) {
|
| -
|
| - int glCtxTypeCnt = 1;
|
| -#if SK_SUPPORT_GPU
|
| - if (0 != dtype) {
|
| - glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt;
|
| - }
|
| -#endif
|
| - SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
|
| - for (int glCtxType = 0; glCtxType < glCtxTypeCnt; ++glCtxType) {
|
| - SkAutoTUnref<SkBaseDevice> device;
|
| - if (0 == dtype) {
|
| - device.reset(SkBitmapDevice::Create(info, props));
|
| - } else {
|
| -#if SK_SUPPORT_GPU
|
| - GrContextFactory::GLContextType type =
|
| - static_cast<GrContextFactory::GLContextType>(glCtxType);
|
| - if (!GrContextFactory::IsRenderingGLContext(type)) {
|
| - continue;
|
| - }
|
| - GrContext* ctx = factory->get(type);
|
| - if (nullptr == ctx) {
|
| - continue;
|
| - }
|
| - device.reset(SkGpuDevice::Create(ctx, SkSurface::kNo_Budgeted, info, 0, &props,
|
| - SkGpuDevice::kUninit_InitContents));
|
| -#else
|
| - continue;
|
| -#endif
|
| - }
|
| - SkCanvas canvas(device);
|
| -
|
| - for (size_t upmaIdx = 0; upmaIdx < SK_ARRAY_COUNT(gUnpremul); ++upmaIdx) {
|
| - fillCanvas(&canvas, gUnpremul[upmaIdx].fColorType, gUnpremul[upmaIdx].fPackProc);
|
| -
|
| - const SkImageInfo info = SkImageInfo::Make(256, 256, gUnpremul[upmaIdx].fColorType,
|
| - kUnpremul_SkAlphaType);
|
| - SkBitmap readBmp1;
|
| - readBmp1.allocPixels(info);
|
| - SkBitmap readBmp2;
|
| - readBmp2.allocPixels(info);
|
| -
|
| - readBmp1.eraseColor(0);
|
| - readBmp2.eraseColor(0);
|
| -
|
| - canvas.readPixels(&readBmp1, 0, 0);
|
| - sk_tool_utils::write_pixels(&canvas, readBmp1, 0, 0, gUnpremul[upmaIdx].fColorType,
|
| - kUnpremul_SkAlphaType);
|
| - canvas.readPixels(&readBmp2, 0, 0);
|
| -
|
| - bool success = true;
|
| - for (int y = 0; y < 256 && success; ++y) {
|
| - const uint32_t* pixels1 = readBmp1.getAddr32(0, y);
|
| - const uint32_t* pixels2 = readBmp2.getAddr32(0, y);
|
| - for (int x = 0; x < 256 && success; ++x) {
|
| - // We see sporadic failures here. May help to see where it goes wrong.
|
| - if (pixels1[x] != pixels2[x]) {
|
| - SkDebugf("%x != %x, x = %d, y = %d\n", pixels1[x], pixels2[x], x, y);
|
| - }
|
| - REPORTER_ASSERT(reporter, success = pixels1[x] == pixels2[x]);
|
| - }
|
| +static void test_premul_alpha_roundtrip(skiatest::Reporter* reporter, SkBaseDevice* device) {
|
| + SkCanvas canvas(device);
|
| + for (size_t upmaIdx = 0; upmaIdx < SK_ARRAY_COUNT(gUnpremul); ++upmaIdx) {
|
| + fillCanvas(&canvas, gUnpremul[upmaIdx].fColorType, gUnpremul[upmaIdx].fPackProc);
|
| +
|
| + const SkImageInfo info = SkImageInfo::Make(256, 256, gUnpremul[upmaIdx].fColorType,
|
| + kUnpremul_SkAlphaType);
|
| + SkBitmap readBmp1;
|
| + readBmp1.allocPixels(info);
|
| + SkBitmap readBmp2;
|
| + readBmp2.allocPixels(info);
|
| +
|
| + readBmp1.eraseColor(0);
|
| + readBmp2.eraseColor(0);
|
| +
|
| + canvas.readPixels(&readBmp1, 0, 0);
|
| + sk_tool_utils::write_pixels(&canvas, readBmp1, 0, 0, gUnpremul[upmaIdx].fColorType,
|
| + kUnpremul_SkAlphaType);
|
| + canvas.readPixels(&readBmp2, 0, 0);
|
| +
|
| + bool success = true;
|
| + for (int y = 0; y < 256 && success; ++y) {
|
| + const uint32_t* pixels1 = readBmp1.getAddr32(0, y);
|
| + const uint32_t* pixels2 = readBmp2.getAddr32(0, y);
|
| + for (int x = 0; x < 256 && success; ++x) {
|
| + // We see sporadic failures here. May help to see where it goes wrong.
|
| + if (pixels1[x] != pixels2[x]) {
|
| + SkDebugf("%x != %x, x = %d, y = %d\n", pixels1[x], pixels2[x], x, y);
|
| }
|
| + REPORTER_ASSERT(reporter, success = pixels1[x] == pixels2[x]);
|
| }
|
| }
|
| }
|
| }
|
| +
|
| +DEF_TEST(PremulAlphaRoundTrip, reporter) {
|
| + const SkImageInfo info = SkImageInfo::MakeN32Premul(256, 256);
|
| + SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
|
| + SkAutoTUnref<SkBaseDevice> device(SkBitmapDevice::Create(info, props));
|
| + test_premul_alpha_roundtrip(reporter, device);
|
| +}
|
| +#if SK_SUPPORT_GPU
|
| +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PremulAlphaRoundTrip_Gpu, reporter, context) {
|
| + const SkImageInfo info = SkImageInfo::MakeN32Premul(256, 256);
|
| + SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
|
| + SkAutoTUnref<SkBaseDevice> device(
|
| + SkGpuDevice::Create(context, SkSurface::kNo_Budgeted, info, 0, &props,
|
| + SkGpuDevice::kUninit_InitContents));
|
| + test_premul_alpha_roundtrip(reporter, device);
|
| +}
|
| +#endif
|
| +
|
|
|