| Index: tests/ImageFilterTest.cpp
|
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
|
| index dfb0d35e484a0a0350804f34806dca015f774d4e..a0bc5f010e6937d177a67a3389596c83fee1ea98 100644
|
| --- a/tests/ImageFilterTest.cpp
|
| +++ b/tests/ImageFilterTest.cpp
|
| @@ -158,23 +158,27 @@ static SkImageFilter* make_blue(SkImageFilter* input, const SkImageFilter::CropR
|
| return SkColorFilterImageFilter::Create(filter, input, cropRect);
|
| }
|
|
|
| -static SkSpecialImage* create_empty_special_image(GrContext* context,
|
| - SkImageFilter::Proxy* proxy,
|
| - int widthHeight) {
|
| - SkAutoTUnref<SkSpecialSurface> surf;
|
| -
|
| +static SkSpecialSurface* create_empty_special_surface(GrContext* context,
|
| + SkImageFilter::Proxy* proxy,
|
| + int widthHeight) {
|
| if (context) {
|
| GrSurfaceDesc desc;
|
| desc.fConfig = kSkia8888_GrPixelConfig;
|
| desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| desc.fWidth = widthHeight;
|
| desc.fHeight = widthHeight;
|
| - surf.reset(SkSpecialSurface::NewRenderTarget(proxy, context, desc));
|
| + return SkSpecialSurface::NewRenderTarget(proxy, context, desc);
|
| } else {
|
| const SkImageInfo info = SkImageInfo::MakeN32(widthHeight, widthHeight,
|
| kOpaque_SkAlphaType);
|
| - surf.reset(SkSpecialSurface::NewRaster(proxy, info));
|
| + return SkSpecialSurface::NewRaster(proxy, info);
|
| }
|
| +}
|
| +
|
| +static SkSpecialImage* create_empty_special_image(GrContext* context,
|
| + SkImageFilter::Proxy* proxy,
|
| + int widthHeight) {
|
| + SkAutoTUnref<SkSpecialSurface> surf(create_empty_special_surface(context, proxy, widthHeight));
|
|
|
| SkASSERT(surf);
|
|
|
| @@ -508,6 +512,52 @@ DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestNegativeBlurSigma_Gpu, reporter, context) {
|
| }
|
| #endif
|
|
|
| +static void test_zero_blur_sigma(SkImageFilter::Proxy* proxy,
|
| + skiatest::Reporter* reporter,
|
| + GrContext* context) {
|
| + // Check that SkBlurImageFilter with a zero sigma and a non-zero srcOffset works correctly.
|
| + SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(5, 0, 5, 10)));
|
| + SkAutoTUnref<SkImageFilter> input(SkOffsetImageFilter::Create(0, 0, nullptr, &cropRect));
|
| + SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(0, 0, input, &cropRect));
|
| +
|
| + SkAutoTUnref<SkSpecialSurface> surf(create_empty_special_surface(context, proxy, 10));
|
| + surf->getCanvas()->clear(SK_ColorGREEN);
|
| + SkAutoTUnref<SkSpecialImage> image(surf->newImageSnapshot());
|
| +
|
| + SkIPoint offset;
|
| + SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr);
|
| +
|
| + SkAutoTUnref<SkSpecialImage> result(filter->filterImage(image, ctx, &offset));
|
| + REPORTER_ASSERT(reporter, offset.fX == 5 && offset.fY == 0);
|
| + REPORTER_ASSERT(reporter, result);
|
| + REPORTER_ASSERT(reporter, result->width() == 5 && result->height() == 10);
|
| +
|
| + SkBitmap resultBM;
|
| +
|
| + TestingSpecialImageAccess::GetROPixels(result, &resultBM);
|
| +
|
| + SkAutoLockPixels lock(resultBM);
|
| + for (int y = 0; y < resultBM.height(); y++) {
|
| + for (int x = 0; x < resultBM.width(); x++) {
|
| + bool diff = *resultBM.getAddr32(x, y) != SK_ColorGREEN;
|
| + REPORTER_ASSERT(reporter, !diff);
|
| + if (diff) {
|
| + break;
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +DEF_TEST(TestZeroBlurSigma, reporter) {
|
| + run_raster_test(reporter, 100, test_zero_blur_sigma);
|
| +}
|
| +
|
| +#if SK_SUPPORT_GPU
|
| +DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) {
|
| + run_gpu_test(reporter, context, 100, test_zero_blur_sigma);
|
| +}
|
| +#endif
|
| +
|
| DEF_TEST(ImageFilterDrawTiled, reporter) {
|
| // Check that all filters when drawn tiled (with subsequent clip rects) exactly
|
| // match the same filters drawn with a single full-canvas bitmap draw.
|
|
|