Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBitmapDevice.h" | |
| 10 #include "SkBlurImageFilter.h" | 9 #include "SkBlurImageFilter.h" |
| 11 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| 12 #include "SkColorFilterImageFilter.h" | 11 #include "SkColorFilterImageFilter.h" |
| 13 #include "SkColorMatrixFilter.h" | 12 #include "SkColorMatrixFilter.h" |
| 14 #include "SkComposeImageFilter.h" | 13 #include "SkComposeImageFilter.h" |
| 15 #include "SkDisplacementMapEffect.h" | 14 #include "SkDisplacementMapEffect.h" |
| 16 #include "SkDropShadowImageFilter.h" | 15 #include "SkDropShadowImageFilter.h" |
| 17 #include "SkFlattenableSerialization.h" | 16 #include "SkFlattenableSerialization.h" |
| 18 #include "SkGradientShader.h" | 17 #include "SkGradientShader.h" |
| 19 #include "SkImage.h" | 18 #include "SkImage.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 31 #include "SkPoint3.h" | 30 #include "SkPoint3.h" |
| 32 #include "SkReadBuffer.h" | 31 #include "SkReadBuffer.h" |
| 33 #include "SkRect.h" | 32 #include "SkRect.h" |
| 34 #include "SkSpecialImage.h" | 33 #include "SkSpecialImage.h" |
| 35 #include "SkSpecialSurface.h" | 34 #include "SkSpecialSurface.h" |
| 36 #include "SkSurface.h" | 35 #include "SkSurface.h" |
| 37 #include "SkTableColorFilter.h" | 36 #include "SkTableColorFilter.h" |
| 38 #include "SkTileImageFilter.h" | 37 #include "SkTileImageFilter.h" |
| 39 #include "SkXfermodeImageFilter.h" | 38 #include "SkXfermodeImageFilter.h" |
| 40 #include "Test.h" | 39 #include "Test.h" |
| 41 #include "TestingSpecialImageAccess.h" | |
| 42 | 40 |
| 43 #if SK_SUPPORT_GPU | 41 #if SK_SUPPORT_GPU |
| 44 #include "GrContext.h" | 42 #include "GrContext.h" |
| 45 #include "SkGpuDevice.h" | |
| 46 #endif | 43 #endif |
| 47 | 44 |
| 48 static const int kBitmapSize = 4; | 45 static const int kBitmapSize = 4; |
| 49 | 46 |
| 50 namespace { | 47 namespace { |
| 51 | 48 |
| 52 class MatrixTestImageFilter : public SkImageFilter { | 49 class MatrixTestImageFilter : public SkImageFilter { |
| 53 public: | 50 public: |
| 54 static sk_sp<SkImageFilter> Make(skiatest::Reporter* reporter, | 51 static sk_sp<SkImageFilter> Make(skiatest::Reporter* reporter, |
| 55 const SkMatrix& expectedMatrix) { | 52 const SkMatrix& expectedMatrix) { |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 363 return SkColorFilterImageFilter::Make(std::move(filter), std::move(input), c ropRect); | 360 return SkColorFilterImageFilter::Make(std::move(filter), std::move(input), c ropRect); |
| 364 } | 361 } |
| 365 | 362 |
| 366 static sk_sp<SkImageFilter> make_blue(sk_sp<SkImageFilter> input, | 363 static sk_sp<SkImageFilter> make_blue(sk_sp<SkImageFilter> input, |
| 367 const SkImageFilter::CropRect* cropRect) { | 364 const SkImageFilter::CropRect* cropRect) { |
| 368 sk_sp<SkColorFilter> filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, | 365 sk_sp<SkColorFilter> filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, |
| 369 SkXfermode::kSrcIn _Mode)); | 366 SkXfermode::kSrcIn _Mode)); |
| 370 return SkColorFilterImageFilter::Make(std::move(filter), std::move(input), c ropRect); | 367 return SkColorFilterImageFilter::Make(std::move(filter), std::move(input), c ropRect); |
| 371 } | 368 } |
| 372 | 369 |
| 373 static sk_sp<SkSpecialSurface> create_empty_special_surface(GrContext* context, | 370 static sk_sp<SkSpecialSurface> create_empty_special_surface(GrContext* context, int widthHeight) { |
| 374 SkImageFilter::Proxy * proxy, | |
| 375 int widthHeight) { | |
| 376 if (context) { | 371 if (context) { |
| 377 GrSurfaceDesc desc; | 372 GrSurfaceDesc desc; |
| 378 desc.fConfig = kSkia8888_GrPixelConfig; | 373 desc.fConfig = kSkia8888_GrPixelConfig; |
| 379 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 374 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 380 desc.fWidth = widthHeight; | 375 desc.fWidth = widthHeight; |
| 381 desc.fHeight = widthHeight; | 376 desc.fHeight = widthHeight; |
| 382 return SkSpecialSurface::MakeRenderTarget(proxy, context, desc); | 377 return SkSpecialSurface::MakeRenderTarget(context, desc); |
| 383 } else { | 378 } else { |
| 384 const SkImageInfo info = SkImageInfo::MakeN32(widthHeight, widthHeight, | 379 const SkImageInfo info = SkImageInfo::MakeN32(widthHeight, widthHeight, |
| 385 kOpaque_SkAlphaType); | 380 kOpaque_SkAlphaType); |
| 386 return SkSpecialSurface::MakeRaster(proxy, info); | 381 return SkSpecialSurface::MakeRaster(info); |
| 387 } | 382 } |
| 388 } | 383 } |
| 389 | 384 |
| 390 static sk_sp<SkSpecialImage> create_empty_special_image(GrContext* context, | 385 static sk_sp<SkSpecialImage> create_empty_special_image(GrContext* context, int widthHeight) { |
| 391 SkImageFilter::Proxy* pr oxy, | 386 sk_sp<SkSpecialSurface> surf(create_empty_special_surface(context, widthHeig ht)); |
| 392 int widthHeight) { | |
| 393 sk_sp<SkSpecialSurface> surf(create_empty_special_surface(context, proxy, wi dthHeight)); | |
| 394 | 387 |
| 395 SkASSERT(surf); | 388 SkASSERT(surf); |
| 396 | 389 |
| 397 SkCanvas* canvas = surf->getCanvas(); | 390 SkCanvas* canvas = surf->getCanvas(); |
| 398 SkASSERT(canvas); | 391 SkASSERT(canvas); |
| 399 | 392 |
| 400 canvas->clear(0x0); | 393 canvas->clear(0x0); |
| 401 | 394 |
| 402 return surf->makeImageSnapshot(); | 395 return surf->makeImageSnapshot(); |
| 403 } | 396 } |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 514 0xFFFFFFFF, SK_Scalar1, SK_Scalar1, SK_Scalar1, | 507 0xFFFFFFFF, SK_Scalar1, SK_Scalar1, SK_Scalar1, |
| 515 std::move(bmSrc))); | 508 std::move(bmSrc))); |
| 516 SkCanvas canvas(result); | 509 SkCanvas canvas(result); |
| 517 SkRect r = SkRect::MakeWH(SkIntToScalar(kBitmapSize), | 510 SkRect r = SkRect::MakeWH(SkIntToScalar(kBitmapSize), |
| 518 SkIntToScalar(kBitmapSize)); | 511 SkIntToScalar(kBitmapSize)); |
| 519 canvas.drawRect(r, paint); | 512 canvas.drawRect(r, paint); |
| 520 } | 513 } |
| 521 } | 514 } |
| 522 } | 515 } |
| 523 | 516 |
| 524 static void test_crop_rects(SkImageFilter::Proxy* proxy, | 517 static void test_crop_rects(skiatest::Reporter* reporter, |
| 525 skiatest::Reporter* reporter, | |
| 526 GrContext* context) { | 518 GrContext* context) { |
| 527 // Check that all filters offset to their absolute crop rect, | 519 // Check that all filters offset to their absolute crop rect, |
| 528 // unaffected by the input crop rect. | 520 // unaffected by the input crop rect. |
| 529 // Tests pass by not asserting. | 521 // Tests pass by not asserting. |
| 530 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); | 522 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 100)); |
| 531 SkASSERT(srcImg); | 523 SkASSERT(srcImg); |
| 532 | 524 |
| 533 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); | 525 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); |
| 534 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); | 526 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); |
| 535 sk_sp<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect)); | 527 sk_sp<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect)); |
| 536 | 528 |
| 537 FilterList filters(input, &cropRect); | 529 FilterList filters(input, &cropRect); |
| 538 | 530 |
| 539 for (int i = 0; i < filters.count(); ++i) { | 531 for (int i = 0; i < filters.count(); ++i) { |
| 540 SkImageFilter* filter = filters.getFilter(i); | 532 SkImageFilter* filter = filters.getFilter(i); |
| 541 SkIPoint offset; | 533 SkIPoint offset; |
| 542 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr); | 534 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr); |
| 543 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset)); | 535 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset)); |
| 544 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i)); | 536 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i)); |
| 545 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i)); | 537 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i)); |
| 546 } | 538 } |
| 547 } | 539 } |
| 548 | 540 |
| 549 static void test_negative_blur_sigma(SkImageFilter::Proxy* proxy, | 541 static void test_negative_blur_sigma(skiatest::Reporter* reporter, |
| 550 skiatest::Reporter* reporter, | |
| 551 GrContext* context) { | 542 GrContext* context) { |
| 552 // Check that SkBlurImageFilter will accept a negative sigma, either in | 543 // Check that SkBlurImageFilter will accept a negative sigma, either in |
| 553 // the given arguments or after CTM application. | 544 // the given arguments or after CTM application. |
| 554 const int width = 32, height = 32; | 545 const int width = 32, height = 32; |
| 555 const SkScalar five = SkIntToScalar(5); | 546 const SkScalar five = SkIntToScalar(5); |
| 556 | 547 |
| 557 sk_sp<SkImageFilter> positiveFilter(SkBlurImageFilter::Make(five, five, null ptr)); | 548 sk_sp<SkImageFilter> positiveFilter(SkBlurImageFilter::Make(five, five, null ptr)); |
| 558 sk_sp<SkImageFilter> negativeFilter(SkBlurImageFilter::Make(-five, five, nul lptr)); | 549 sk_sp<SkImageFilter> negativeFilter(SkBlurImageFilter::Make(-five, five, nul lptr)); |
| 559 | 550 |
| 560 SkBitmap gradient = make_gradient_circle(width, height); | 551 SkBitmap gradient = make_gradient_circle(width, height); |
| 561 sk_sp<SkSpecialImage> imgSrc(SkSpecialImage::MakeFromRaster(proxy, | 552 sk_sp<SkSpecialImage> imgSrc(SkSpecialImage::MakeFromRaster(SkIRect::MakeWH( width, height), |
| 562 SkIRect::MakeWH( width, height), | |
| 563 gradient)); | 553 gradient)); |
| 564 | 554 |
| 565 SkIPoint offset; | 555 SkIPoint offset; |
| 566 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); | 556 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); |
| 567 | 557 |
| 568 sk_sp<SkSpecialImage> positiveResult1(positiveFilter->filterImage(imgSrc.get (), ctx, &offset)); | 558 sk_sp<SkSpecialImage> positiveResult1(positiveFilter->filterImage(imgSrc.get (), ctx, &offset)); |
| 569 REPORTER_ASSERT(reporter, positiveResult1); | 559 REPORTER_ASSERT(reporter, positiveResult1); |
| 570 | 560 |
| 571 sk_sp<SkSpecialImage> negativeResult1(negativeFilter->filterImage(imgSrc.get (), ctx, &offset)); | 561 sk_sp<SkSpecialImage> negativeResult1(negativeFilter->filterImage(imgSrc.get (), ctx, &offset)); |
| 572 REPORTER_ASSERT(reporter, negativeResult1); | 562 REPORTER_ASSERT(reporter, negativeResult1); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 616 diffs = memcmp(positiveResultBM1.getAddr32(0, y), | 606 diffs = memcmp(positiveResultBM1.getAddr32(0, y), |
| 617 positiveResultBM2.getAddr32(0, y), | 607 positiveResultBM2.getAddr32(0, y), |
| 618 positiveResultBM1.rowBytes()); | 608 positiveResultBM1.rowBytes()); |
| 619 REPORTER_ASSERT(reporter, !diffs); | 609 REPORTER_ASSERT(reporter, !diffs); |
| 620 if (diffs) { | 610 if (diffs) { |
| 621 break; | 611 break; |
| 622 } | 612 } |
| 623 } | 613 } |
| 624 } | 614 } |
| 625 | 615 |
| 626 typedef void (*PFTest)(SkImageFilter::Proxy* proxy, | 616 typedef void (*PFTest)(skiatest::Reporter* reporter, GrContext* context); |
| 627 skiatest::Reporter* reporter, | |
| 628 GrContext* context); | |
| 629 | 617 |
| 630 static void run_raster_test(skiatest::Reporter* reporter, | 618 static void run_raster_test(skiatest::Reporter* reporter, |
| 631 int widthHeight, | 619 int widthHeight, |
| 632 PFTest test) { | 620 PFTest test) { |
| 633 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 621 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
|
Stephen White
2016/04/20 16:53:13
Remove this?
robertphillips
2016/04/20 17:50:20
Done.
| |
| 634 | 622 |
| 635 const SkImageInfo info = SkImageInfo::MakeN32Premul(widthHeight, widthHeight ); | 623 const SkImageInfo info = SkImageInfo::MakeN32Premul(widthHeight, widthHeight ); |
|
Stephen White
2016/04/20 16:53:13
and this?
robertphillips
2016/04/20 17:50:20
Done.
| |
| 636 | 624 |
| 637 sk_sp<SkBaseDevice> device(SkBitmapDevice::Create(info, props)); | 625 (*test)(reporter, nullptr); |
| 638 SkImageFilter::DeviceProxy proxy(device.get()); | |
| 639 | |
| 640 (*test)(&proxy, reporter, nullptr); | |
| 641 } | 626 } |
| 642 | 627 |
| 643 #if SK_SUPPORT_GPU | 628 #if SK_SUPPORT_GPU |
| 644 static void run_gpu_test(skiatest::Reporter* reporter, | 629 static void run_gpu_test(skiatest::Reporter* reporter, |
| 645 GrContext* context, | 630 GrContext* context, |
| 646 int widthHeight, | 631 int widthHeight, |
| 647 PFTest test) { | 632 PFTest test) { |
| 648 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 633 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
|
Stephen White
2016/04/20 16:53:13
and this?
robertphillips
2016/04/20 17:50:20
Done.
| |
| 649 | 634 |
| 650 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(context, | 635 (*test)(reporter, context); |
| 651 SkBudgeted::kNo, | |
| 652 SkImageInfo::MakeN32Premul(wid thHeight, | |
| 653 wid thHeight), | |
| 654 0, | |
| 655 &props, | |
| 656 SkGpuDevice::kUninit_InitConte nts)); | |
| 657 SkImageFilter::DeviceProxy proxy(device.get()); | |
| 658 | |
| 659 (*test)(&proxy, reporter, context); | |
| 660 } | 636 } |
| 661 #endif | 637 #endif |
| 662 | 638 |
| 663 DEF_TEST(ImageFilterNegativeBlurSigma, reporter) { | 639 DEF_TEST(ImageFilterNegativeBlurSigma, reporter) { |
| 664 run_raster_test(reporter, 100, test_negative_blur_sigma); | 640 run_raster_test(reporter, 100, test_negative_blur_sigma); |
| 665 } | 641 } |
| 666 | 642 |
| 667 #if SK_SUPPORT_GPU | 643 #if SK_SUPPORT_GPU |
| 668 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterNegativeBlurSigma_Gpu, reporter, c txInfo) { | 644 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterNegativeBlurSigma_Gpu, reporter, c txInfo) { |
| 669 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_negative_blur_sigma); | 645 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_negative_blur_sigma); |
| 670 } | 646 } |
| 671 #endif | 647 #endif |
| 672 | 648 |
| 673 static void test_zero_blur_sigma(SkImageFilter::Proxy* proxy, | 649 static void test_zero_blur_sigma(skiatest::Reporter* reporter, GrContext* contex t) { |
| 674 skiatest::Reporter* reporter, | |
| 675 GrContext* context) { | |
| 676 // Check that SkBlurImageFilter with a zero sigma and a non-zero srcOffset w orks correctly. | 650 // Check that SkBlurImageFilter with a zero sigma and a non-zero srcOffset w orks correctly. |
| 677 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(5, 0, 5, 10) )); | 651 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(5, 0, 5, 10) )); |
| 678 sk_sp<SkImageFilter> input(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRec t)); | 652 sk_sp<SkImageFilter> input(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRec t)); |
| 679 sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(0, 0, std::move(input), &cropRect)); | 653 sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(0, 0, std::move(input), &cropRect)); |
| 680 | 654 |
| 681 sk_sp<SkSpecialSurface> surf(create_empty_special_surface(context, proxy, 10 )); | 655 sk_sp<SkSpecialSurface> surf(create_empty_special_surface(context, 10)); |
| 682 surf->getCanvas()->clear(SK_ColorGREEN); | 656 surf->getCanvas()->clear(SK_ColorGREEN); |
| 683 sk_sp<SkSpecialImage> image(surf->makeImageSnapshot()); | 657 sk_sp<SkSpecialImage> image(surf->makeImageSnapshot()); |
| 684 | 658 |
| 685 SkIPoint offset; | 659 SkIPoint offset; |
| 686 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); | 660 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); |
| 687 | 661 |
| 688 sk_sp<SkSpecialImage> result(filter->filterImage(image.get(), ctx, &offset)) ; | 662 sk_sp<SkSpecialImage> result(filter->filterImage(image.get(), ctx, &offset)) ; |
| 689 REPORTER_ASSERT(reporter, offset.fX == 5 && offset.fY == 0); | 663 REPORTER_ASSERT(reporter, offset.fX == 5 && offset.fY == 0); |
| 690 REPORTER_ASSERT(reporter, result); | 664 REPORTER_ASSERT(reporter, result); |
| 691 REPORTER_ASSERT(reporter, result->width() == 5 && result->height() == 10); | 665 REPORTER_ASSERT(reporter, result->width() == 5 && result->height() == 10); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 712 | 686 |
| 713 #if SK_SUPPORT_GPU | 687 #if SK_SUPPORT_GPU |
| 714 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterZeroBlurSigma_Gpu, reporter, ctxIn fo) { | 688 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterZeroBlurSigma_Gpu, reporter, ctxIn fo) { |
| 715 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_zero_blur_sigma); | 689 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_zero_blur_sigma); |
| 716 } | 690 } |
| 717 #endif | 691 #endif |
| 718 | 692 |
| 719 | 693 |
| 720 // Tests that, even when an upstream filter has returned null (due to failure or clipping), a | 694 // Tests that, even when an upstream filter has returned null (due to failure or clipping), a |
| 721 // downstream filter that affects transparent black still does so even with a nu llptr input. | 695 // downstream filter that affects transparent black still does so even with a nu llptr input. |
| 722 static void test_fail_affects_transparent_black(SkImageFilter::Proxy* proxy, | 696 static void test_fail_affects_transparent_black(skiatest::Reporter* reporter, Gr Context* context) { |
| 723 skiatest::Reporter* reporter, | |
| 724 GrContext* context) { | |
| 725 sk_sp<FailImageFilter> failFilter(new FailImageFilter()); | 697 sk_sp<FailImageFilter> failFilter(new FailImageFilter()); |
| 726 sk_sp<SkSpecialImage> source(create_empty_special_image(context, proxy, 5)); | 698 sk_sp<SkSpecialImage> source(create_empty_special_image(context, 5)); |
| 727 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 1, 1), nul lptr); | 699 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 1, 1), nul lptr); |
| 728 sk_sp<SkColorFilter> green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXf ermode::kSrc_Mode)); | 700 sk_sp<SkColorFilter> green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXf ermode::kSrc_Mode)); |
| 729 SkASSERT(green->affectsTransparentBlack()); | 701 SkASSERT(green->affectsTransparentBlack()); |
| 730 sk_sp<SkImageFilter> greenFilter(SkColorFilterImageFilter::Make(std::move(gr een), | 702 sk_sp<SkImageFilter> greenFilter(SkColorFilterImageFilter::Make(std::move(gr een), |
| 731 std::move(fa ilFilter))); | 703 std::move(fa ilFilter))); |
| 732 SkIPoint offset; | 704 SkIPoint offset; |
| 733 sk_sp<SkSpecialImage> result(greenFilter->filterImage(source.get(), ctx, &of fset)); | 705 sk_sp<SkSpecialImage> result(greenFilter->filterImage(source.get(), ctx, &of fset)); |
| 734 REPORTER_ASSERT(reporter, nullptr != result.get()); | 706 REPORTER_ASSERT(reporter, nullptr != result.get()); |
| 735 if (result.get()) { | 707 if (result.get()) { |
| 736 SkBitmap resultBM; | 708 SkBitmap resultBM; |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 928 { | 900 { |
| 929 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, null ptr, | 901 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, null ptr, |
| 930 offset, nullp tr)); | 902 offset, nullp tr)); |
| 931 SkRect bounds = SkRect::MakeWH(100, 100); | 903 SkRect bounds = SkRect::MakeWH(100, 100); |
| 932 // Intentionally aliasing here, as that's what the real callers do. | 904 // Intentionally aliasing here, as that's what the real callers do. |
| 933 bounds = composite->computeFastBounds(bounds); | 905 bounds = composite->computeFastBounds(bounds); |
| 934 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); | 906 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); |
| 935 } | 907 } |
| 936 } | 908 } |
| 937 | 909 |
| 938 static void test_imagefilter_merge_result_size(SkImageFilter::Proxy* proxy, | 910 static void test_imagefilter_merge_result_size(skiatest::Reporter* reporter, GrC ontext* context) { |
| 939 skiatest::Reporter* reporter, | |
| 940 GrContext* context) { | |
| 941 SkBitmap greenBM; | 911 SkBitmap greenBM; |
| 942 greenBM.allocN32Pixels(20, 20); | 912 greenBM.allocN32Pixels(20, 20); |
| 943 greenBM.eraseColor(SK_ColorGREEN); | 913 greenBM.eraseColor(SK_ColorGREEN); |
| 944 sk_sp<SkImage> greenImage(SkImage::MakeFromBitmap(greenBM)); | 914 sk_sp<SkImage> greenImage(SkImage::MakeFromBitmap(greenBM)); |
| 945 sk_sp<SkImageFilter> source(SkImageSource::Make(std::move(greenImage))); | 915 sk_sp<SkImageFilter> source(SkImageSource::Make(std::move(greenImage))); |
| 946 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(source, source)); | 916 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(source, source)); |
| 947 | 917 |
| 948 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 1)); | 918 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 1)); |
| 949 | 919 |
| 950 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 100, 100), nullptr); | 920 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 100, 100), nullptr); |
| 951 SkIPoint offset; | 921 SkIPoint offset; |
| 952 | 922 |
| 953 sk_sp<SkSpecialImage> resultImg(merge->filterImage(srcImg.get(), ctx, &offse t)); | 923 sk_sp<SkSpecialImage> resultImg(merge->filterImage(srcImg.get(), ctx, &offse t)); |
| 954 REPORTER_ASSERT(reporter, resultImg); | 924 REPORTER_ASSERT(reporter, resultImg); |
| 955 | 925 |
| 956 REPORTER_ASSERT(reporter, resultImg->width() == 20 && resultImg->height() == 20); | 926 REPORTER_ASSERT(reporter, resultImg->width() == 20 && resultImg->height() == 20); |
| 957 } | 927 } |
| 958 | 928 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1085 SkPaint filterPaint; | 1055 SkPaint filterPaint; |
| 1086 filterPaint.setImageFilter(std::move(filter)); | 1056 filterPaint.setImageFilter(std::move(filter)); |
| 1087 SkRect bounds = SkRect::MakeWH(1, 10); | 1057 SkRect bounds = SkRect::MakeWH(1, 10); |
| 1088 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); | 1058 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); |
| 1089 SkPaint rectPaint; | 1059 SkPaint rectPaint; |
| 1090 canvas.saveLayer(&bounds, &filterPaint); | 1060 canvas.saveLayer(&bounds, &filterPaint); |
| 1091 canvas.drawRect(rect, rectPaint); | 1061 canvas.drawRect(rect, rectPaint); |
| 1092 canvas.restore(); | 1062 canvas.restore(); |
| 1093 } | 1063 } |
| 1094 | 1064 |
| 1095 static void test_big_kernel(SkImageFilter::Proxy* proxy, | 1065 static void test_big_kernel(skiatest::Reporter* reporter, GrContext* context) { |
| 1096 skiatest::Reporter* reporter, | |
| 1097 GrContext* context) { | |
| 1098 // Check that a kernel that is too big for the GPU still works | 1066 // Check that a kernel that is too big for the GPU still works |
| 1099 SkScalar identityKernel[49] = { | 1067 SkScalar identityKernel[49] = { |
| 1100 0, 0, 0, 0, 0, 0, 0, | 1068 0, 0, 0, 0, 0, 0, 0, |
| 1101 0, 0, 0, 0, 0, 0, 0, | 1069 0, 0, 0, 0, 0, 0, 0, |
| 1102 0, 0, 0, 0, 0, 0, 0, | 1070 0, 0, 0, 0, 0, 0, 0, |
| 1103 0, 0, 0, 1, 0, 0, 0, | 1071 0, 0, 0, 1, 0, 0, 0, |
| 1104 0, 0, 0, 0, 0, 0, 0, | 1072 0, 0, 0, 0, 0, 0, 0, |
| 1105 0, 0, 0, 0, 0, 0, 0, | 1073 0, 0, 0, 0, 0, 0, 0, |
| 1106 0, 0, 0, 0, 0, 0, 0 | 1074 0, 0, 0, 0, 0, 0, 0 |
| 1107 }; | 1075 }; |
| 1108 SkISize kernelSize = SkISize::Make(7, 7); | 1076 SkISize kernelSize = SkISize::Make(7, 7); |
| 1109 SkScalar gain = SK_Scalar1, bias = 0; | 1077 SkScalar gain = SK_Scalar1, bias = 0; |
| 1110 SkIPoint kernelOffset = SkIPoint::Make(0, 0); | 1078 SkIPoint kernelOffset = SkIPoint::Make(0, 0); |
| 1111 | 1079 |
| 1112 sk_sp<SkImageFilter> filter(SkMatrixConvolutionImageFilter::Make( | 1080 sk_sp<SkImageFilter> filter(SkMatrixConvolutionImageFilter::Make( |
| 1113 kernelSize, identityKernel, gain, bias, kernelOffset, | 1081 kernelSize, identityKernel, gain, bias, kernelOffset, |
| 1114 SkMatrixConvolutionImageFilter::kClamp_T ileMode, | 1082 SkMatrixConvolutionImageFilter::kClamp_T ileMode, |
| 1115 true, nullptr)); | 1083 true, nullptr)); |
| 1116 | 1084 |
| 1117 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); | 1085 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 100)); |
| 1118 SkASSERT(srcImg); | 1086 SkASSERT(srcImg); |
| 1119 | 1087 |
| 1120 SkIPoint offset; | 1088 SkIPoint offset; |
| 1121 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); | 1089 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); |
| 1122 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offs et)); | 1090 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offs et)); |
| 1123 REPORTER_ASSERT(reporter, resultImg); | 1091 REPORTER_ASSERT(reporter, resultImg); |
| 1124 REPORTER_ASSERT(reporter, SkToBool(context) == resultImg->isTextureBacked()) ; | 1092 REPORTER_ASSERT(reporter, SkToBool(context) == resultImg->isTextureBacked()) ; |
| 1125 REPORTER_ASSERT(reporter, resultImg->width() == 100 && resultImg->height() = = 100); | 1093 REPORTER_ASSERT(reporter, resultImg->width() == 100 && resultImg->height() = = 100); |
| 1126 REPORTER_ASSERT(reporter, offset.fX == 0 && offset.fY == 0); | 1094 REPORTER_ASSERT(reporter, offset.fX == 0 && offset.fY == 0); |
| 1127 } | 1095 } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1225 | 1193 |
| 1226 canvas.clear(0x0); | 1194 canvas.clear(0x0); |
| 1227 canvas.drawPicture(crossProcessPicture); | 1195 canvas.drawPicture(crossProcessPicture); |
| 1228 pixel = *bitmap.getAddr32(0, 0); | 1196 pixel = *bitmap.getAddr32(0, 0); |
| 1229 // If the security precautions are enabled, the result here should not be gr een, since the | 1197 // If the security precautions are enabled, the result here should not be gr een, since the |
| 1230 // filter draws nothing. | 1198 // filter draws nothing. |
| 1231 REPORTER_ASSERT(reporter, SkPicture::PictureIOSecurityPrecautionsEnabled() | 1199 REPORTER_ASSERT(reporter, SkPicture::PictureIOSecurityPrecautionsEnabled() |
| 1232 ? pixel != SK_ColorGREEN : pixel == SK_ColorGREEN); | 1200 ? pixel != SK_ColorGREEN : pixel == SK_ColorGREEN); |
| 1233 } | 1201 } |
| 1234 | 1202 |
| 1235 static void test_clipped_picture_imagefilter(SkImageFilter::Proxy* proxy, | 1203 static void test_clipped_picture_imagefilter(skiatest::Reporter* reporter, GrCon text* context) { |
| 1236 skiatest::Reporter* reporter, | |
| 1237 GrContext* context) { | |
| 1238 sk_sp<SkPicture> picture; | 1204 sk_sp<SkPicture> picture; |
| 1239 | 1205 |
| 1240 { | 1206 { |
| 1241 SkRTreeFactory factory; | 1207 SkRTreeFactory factory; |
| 1242 SkPictureRecorder recorder; | 1208 SkPictureRecorder recorder; |
| 1243 SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0); | 1209 SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0); |
| 1244 | 1210 |
| 1245 // Create an SkPicture which simply draws a green 1x1 rectangle. | 1211 // Create an SkPicture which simply draws a green 1x1 rectangle. |
| 1246 SkPaint greenPaint; | 1212 SkPaint greenPaint; |
| 1247 greenPaint.setColor(SK_ColorGREEN); | 1213 greenPaint.setColor(SK_ColorGREEN); |
| 1248 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), greenPain t); | 1214 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), greenPain t); |
| 1249 picture = recorder.finishRecordingAsPicture(); | 1215 picture = recorder.finishRecordingAsPicture(); |
| 1250 } | 1216 } |
| 1251 | 1217 |
| 1252 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 2)); | 1218 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 2)); |
| 1253 | 1219 |
| 1254 sk_sp<SkImageFilter> imageFilter(SkPictureImageFilter::Make(picture)); | 1220 sk_sp<SkImageFilter> imageFilter(SkPictureImageFilter::Make(picture)); |
| 1255 | 1221 |
| 1256 SkIPoint offset; | 1222 SkIPoint offset; |
| 1257 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(1, 1, 1, 1), nul lptr); | 1223 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(1, 1, 1, 1), nul lptr); |
| 1258 | 1224 |
| 1259 sk_sp<SkSpecialImage> resultImage(imageFilter->filterImage(srcImg.get(), ctx , &offset)); | 1225 sk_sp<SkSpecialImage> resultImage(imageFilter->filterImage(srcImg.get(), ctx , &offset)); |
| 1260 REPORTER_ASSERT(reporter, !resultImage); | 1226 REPORTER_ASSERT(reporter, !resultImage); |
| 1261 } | 1227 } |
| 1262 | 1228 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1493 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 1459 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); |
| 1494 } | 1460 } |
| 1495 | 1461 |
| 1496 DEF_TEST(XfermodeImageFilterCroppedInput, reporter) { | 1462 DEF_TEST(XfermodeImageFilterCroppedInput, reporter) { |
| 1497 SkBitmap temp; | 1463 SkBitmap temp; |
| 1498 temp.allocN32Pixels(100, 100); | 1464 temp.allocN32Pixels(100, 100); |
| 1499 SkCanvas canvas(temp); | 1465 SkCanvas canvas(temp); |
| 1500 test_xfermode_cropped_input(&canvas, reporter); | 1466 test_xfermode_cropped_input(&canvas, reporter); |
| 1501 } | 1467 } |
| 1502 | 1468 |
| 1503 static void test_composed_imagefilter_offset(SkImageFilter::Proxy* proxy, | 1469 static void test_composed_imagefilter_offset(skiatest::Reporter* reporter, GrCon text* context) { |
| 1504 skiatest::Reporter* reporter, | 1470 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 100)); |
| 1505 GrContext* context) { | |
| 1506 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); | |
| 1507 | 1471 |
| 1508 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(1, 0, 20, 20)); | 1472 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(1, 0, 20, 20)); |
| 1509 sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(0, 0, nullptr, & cropRect)); | 1473 sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(0, 0, nullptr, & cropRect)); |
| 1510 sk_sp<SkImageFilter> blurFilter(SkBlurImageFilter::Make(SK_Scalar1, SK_Scala r1, | 1474 sk_sp<SkImageFilter> blurFilter(SkBlurImageFilter::Make(SK_Scalar1, SK_Scala r1, |
| 1511 nullptr, &cropRect)) ; | 1475 nullptr, &cropRect)) ; |
| 1512 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(blu rFilter), | 1476 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(blu rFilter), |
| 1513 std::move(off setFilter))); | 1477 std::move(off setFilter))); |
| 1514 SkIPoint offset; | 1478 SkIPoint offset; |
| 1515 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); | 1479 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); |
| 1516 | 1480 |
| 1517 sk_sp<SkSpecialImage> resultImg(composedFilter->filterImage(srcImg.get(), ct x, &offset)); | 1481 sk_sp<SkSpecialImage> resultImg(composedFilter->filterImage(srcImg.get(), ct x, &offset)); |
| 1518 REPORTER_ASSERT(reporter, resultImg); | 1482 REPORTER_ASSERT(reporter, resultImg); |
| 1519 REPORTER_ASSERT(reporter, offset.fX == 1 && offset.fY == 0); | 1483 REPORTER_ASSERT(reporter, offset.fX == 1 && offset.fY == 0); |
| 1520 } | 1484 } |
| 1521 | 1485 |
| 1522 DEF_TEST(ComposedImageFilterOffset, reporter) { | 1486 DEF_TEST(ComposedImageFilterOffset, reporter) { |
| 1523 run_raster_test(reporter, 100, test_composed_imagefilter_offset); | 1487 run_raster_test(reporter, 100, test_composed_imagefilter_offset); |
| 1524 } | 1488 } |
| 1525 | 1489 |
| 1526 #if SK_SUPPORT_GPU | 1490 #if SK_SUPPORT_GPU |
| 1527 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ComposedImageFilterOffset_Gpu, reporter, ctxI nfo) { | 1491 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ComposedImageFilterOffset_Gpu, reporter, ctxI nfo) { |
| 1528 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_composed_imagefilter_of fset); | 1492 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_composed_imagefilter_of fset); |
| 1529 } | 1493 } |
| 1530 #endif | 1494 #endif |
| 1531 | 1495 |
| 1532 static void test_composed_imagefilter_bounds(SkImageFilter::Proxy* proxy, | 1496 static void test_composed_imagefilter_bounds(skiatest::Reporter* reporter, GrCon text* context) { |
| 1533 skiatest::Reporter* reporter, | |
| 1534 GrContext* context) { | |
| 1535 // The bounds passed to the inner filter must be filtered by the outer | 1497 // The bounds passed to the inner filter must be filtered by the outer |
| 1536 // filter, so that the inner filter produces the pixels that the outer | 1498 // filter, so that the inner filter produces the pixels that the outer |
| 1537 // filter requires as input. This matters if the outer filter moves pixels. | 1499 // filter requires as input. This matters if the outer filter moves pixels. |
| 1538 // Here, accounting for the outer offset is necessary so that the green | 1500 // Here, accounting for the outer offset is necessary so that the green |
| 1539 // pixels of the picture are not clipped. | 1501 // pixels of the picture are not clipped. |
| 1540 | 1502 |
| 1541 SkPictureRecorder recorder; | 1503 SkPictureRecorder recorder; |
| 1542 SkCanvas* recordingCanvas = recorder.beginRecording(SkRect::MakeWH(200, 100) ); | 1504 SkCanvas* recordingCanvas = recorder.beginRecording(SkRect::MakeWH(200, 100) ); |
| 1543 recordingCanvas->clipRect(SkRect::MakeXYWH(100, 0, 100, 100)); | 1505 recordingCanvas->clipRect(SkRect::MakeXYWH(100, 0, 100, 100)); |
| 1544 recordingCanvas->clear(SK_ColorGREEN); | 1506 recordingCanvas->clear(SK_ColorGREEN); |
| 1545 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); | 1507 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); |
| 1546 sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(picture)); | 1508 sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(picture)); |
| 1547 SkImageFilter::CropRect cropRect(SkRect::MakeWH(100, 100)); | 1509 SkImageFilter::CropRect cropRect(SkRect::MakeWH(100, 100)); |
| 1548 sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(-100, 0, nullptr , &cropRect)); | 1510 sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(-100, 0, nullptr , &cropRect)); |
| 1549 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(off setFilter), | 1511 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(off setFilter), |
| 1550 std::move(pic tureFilter))); | 1512 std::move(pic tureFilter))); |
| 1551 | 1513 |
| 1552 sk_sp<SkSpecialImage> sourceImage(create_empty_special_image(context, proxy, 100)); | 1514 sk_sp<SkSpecialImage> sourceImage(create_empty_special_image(context, 100)); |
| 1553 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); | 1515 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); |
| 1554 SkIPoint offset; | 1516 SkIPoint offset; |
| 1555 sk_sp<SkSpecialImage> result(composedFilter->filterImage(sourceImage.get(), ctx, &offset)); | 1517 sk_sp<SkSpecialImage> result(composedFilter->filterImage(sourceImage.get(), ctx, &offset)); |
| 1556 REPORTER_ASSERT(reporter, offset.isZero()); | 1518 REPORTER_ASSERT(reporter, offset.isZero()); |
| 1557 REPORTER_ASSERT(reporter, result); | 1519 REPORTER_ASSERT(reporter, result); |
| 1558 REPORTER_ASSERT(reporter, result->subset().size() == SkISize::Make(100, 100) ); | 1520 REPORTER_ASSERT(reporter, result->subset().size() == SkISize::Make(100, 100) ); |
| 1559 | 1521 |
| 1560 SkBitmap resultBM; | 1522 SkBitmap resultBM; |
| 1561 REPORTER_ASSERT(reporter, result->getROPixels(&resultBM)); | 1523 REPORTER_ASSERT(reporter, result->getROPixels(&resultBM)); |
| 1562 SkAutoLockPixels lock(resultBM); | 1524 SkAutoLockPixels lock(resultBM); |
| 1563 REPORTER_ASSERT(reporter, resultBM.getColor(50, 50) == SK_ColorGREEN); | 1525 REPORTER_ASSERT(reporter, resultBM.getColor(50, 50) == SK_ColorGREEN); |
| 1564 } | 1526 } |
| 1565 | 1527 |
| 1566 DEF_TEST(ComposedImageFilterBounds, reporter) { | 1528 DEF_TEST(ComposedImageFilterBounds, reporter) { |
| 1567 run_raster_test(reporter, 100, test_composed_imagefilter_bounds); | 1529 run_raster_test(reporter, 100, test_composed_imagefilter_bounds); |
| 1568 } | 1530 } |
| 1569 | 1531 |
| 1570 #if SK_SUPPORT_GPU | 1532 #if SK_SUPPORT_GPU |
| 1571 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ComposedImageFilterBounds_Gpu, reporter, c txInfo) { | 1533 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ComposedImageFilterBounds_Gpu, reporter, c txInfo) { |
| 1572 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_composed_imagefilter_bo unds); | 1534 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_composed_imagefilter_bo unds); |
| 1573 } | 1535 } |
| 1574 #endif | 1536 #endif |
| 1575 | 1537 |
| 1576 static void test_partial_crop_rect(SkImageFilter::Proxy* proxy, | 1538 static void test_partial_crop_rect(skiatest::Reporter* reporter, GrContext* cont ext) { |
| 1577 skiatest::Reporter* reporter, | 1539 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, 100)); |
| 1578 GrContext* context) { | |
| 1579 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); | |
| 1580 | 1540 |
| 1581 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(100, 0, 20, 30), | 1541 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(100, 0, 20, 30), |
| 1582 SkImageFilter::CropRect::kHasWidth_CropEdge | SkImageFilter::CropRect::k HasHeight_CropEdge); | 1542 SkImageFilter::CropRect::kHasWidth_CropEdge | SkImageFilter::CropRect::k HasHeight_CropEdge); |
| 1583 sk_sp<SkImageFilter> filter(make_grayscale(nullptr, &cropRect)); | 1543 sk_sp<SkImageFilter> filter(make_grayscale(nullptr, &cropRect)); |
| 1584 SkIPoint offset; | 1544 SkIPoint offset; |
| 1585 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); | 1545 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr ); |
| 1586 | 1546 |
| 1587 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offs et)); | 1547 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offs et)); |
| 1588 REPORTER_ASSERT(reporter, resultImg); | 1548 REPORTER_ASSERT(reporter, resultImg); |
| 1589 | 1549 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1733 } | 1693 } |
| 1734 | 1694 |
| 1735 DEF_TEST(ImageFilterBlurLargeImage, reporter) { | 1695 DEF_TEST(ImageFilterBlurLargeImage, reporter) { |
| 1736 auto surface(SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(100, 100))); | 1696 auto surface(SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(100, 100))); |
| 1737 test_large_blur_input(reporter, surface->getCanvas()); | 1697 test_large_blur_input(reporter, surface->getCanvas()); |
| 1738 } | 1698 } |
| 1739 | 1699 |
| 1740 #if SK_SUPPORT_GPU | 1700 #if SK_SUPPORT_GPU |
| 1741 | 1701 |
| 1742 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterHugeBlur_Gpu, reporter, ctxInfo) { | 1702 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterHugeBlur_Gpu, reporter, ctxInfo) { |
| 1743 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | |
| 1744 | 1703 |
| 1745 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, | 1704 sk_sp<SkSurface> surf(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, |
| 1746 SkBudgeted::kNo, | 1705 SkBudgeted::kNo, |
| 1747 SkImageInfo::MakeN32Premul(100 , 100), | 1706 SkImageInfo::MakeN32Premul (100, 100))); |
| 1748 0, | |
| 1749 &props, | |
| 1750 SkGpuDevice::kUninit_InitConte nts)); | |
| 1751 SkCanvas canvas(device.get()); | |
| 1752 | 1707 |
| 1753 test_huge_blur(&canvas, reporter); | 1708 |
| 1709 SkCanvas* canvas = surf->getCanvas(); | |
| 1710 | |
| 1711 test_huge_blur(canvas, reporter); | |
| 1754 } | 1712 } |
| 1755 | 1713 |
| 1756 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, repor ter, ctxInfo) { | 1714 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, repor ter, ctxInfo) { |
| 1757 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | |
| 1758 | 1715 |
| 1759 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, | 1716 sk_sp<SkSurface> surf(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, |
| 1760 SkBudgeted::kNo, | 1717 SkBudgeted::kNo, |
| 1761 SkImageInfo::MakeN32Premul(1, 1), | 1718 SkImageInfo::MakeN32Premul (1, 1))); |
| 1762 0, | |
| 1763 &props, | |
| 1764 SkGpuDevice::kUninit_InitConte nts)); | |
| 1765 SkCanvas canvas(device.get()); | |
| 1766 | 1719 |
| 1767 test_xfermode_cropped_input(&canvas, reporter); | 1720 |
| 1721 SkCanvas* canvas = surf->getCanvas(); | |
| 1722 | |
| 1723 test_xfermode_cropped_input(canvas, reporter); | |
| 1768 } | 1724 } |
| 1769 | 1725 |
| 1770 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(ImageFilterBlurLargeImage_Gpu, reporter, ctxInfo ) { | 1726 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(ImageFilterBlurLargeImage_Gpu, reporter, ctxInfo ) { |
| 1771 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe s, | 1727 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe s, |
| 1772 SkImageInfo::MakeN32Premul(100, 100 ))); | 1728 SkImageInfo::MakeN32Premul(100, 100 ))); |
| 1773 test_large_blur_input(reporter, surface->getCanvas()); | 1729 test_large_blur_input(reporter, surface->getCanvas()); |
| 1774 } | 1730 } |
| 1775 #endif | 1731 #endif |
| OLD | NEW |