| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 <functional> | 8 #include <functional> |
| 9 #include <initializer_list> | 9 #include <initializer_list> |
| 10 #include "DMGpuSupport.h" | 10 #include "DMGpuSupport.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "SkUtils.h" | 25 #include "SkUtils.h" |
| 26 #include "Test.h" | 26 #include "Test.h" |
| 27 | 27 |
| 28 static void assert_equal(skiatest::Reporter* reporter, SkImage* a, const SkIRect
* subsetA, | 28 static void assert_equal(skiatest::Reporter* reporter, SkImage* a, const SkIRect
* subsetA, |
| 29 SkImage* b) { | 29 SkImage* b) { |
| 30 const int widthA = subsetA ? subsetA->width() : a->width(); | 30 const int widthA = subsetA ? subsetA->width() : a->width(); |
| 31 const int heightA = subsetA ? subsetA->height() : a->height(); | 31 const int heightA = subsetA ? subsetA->height() : a->height(); |
| 32 | 32 |
| 33 REPORTER_ASSERT(reporter, widthA == b->width()); | 33 REPORTER_ASSERT(reporter, widthA == b->width()); |
| 34 REPORTER_ASSERT(reporter, heightA == b->height()); | 34 REPORTER_ASSERT(reporter, heightA == b->height()); |
| 35 #if 0 | 35 REPORTER_ASSERT(reporter, a->isOpaque() == b->isOpaque()); |
| 36 // see https://bug.skia.org/3965 | |
| 37 bool AO = a->isOpaque(); | |
| 38 bool BO = b->isOpaque(); | |
| 39 REPORTER_ASSERT(reporter, AO == BO); | |
| 40 #endif | |
| 41 | 36 |
| 42 SkImageInfo info = SkImageInfo::MakeN32(widthA, heightA, | 37 SkImageInfo info = SkImageInfo::MakeN32(widthA, heightA, |
| 43 a->isOpaque() ? kOpaque_SkAlphaType : kP
remul_SkAlphaType); | 38 a->isOpaque() ? kOpaque_SkAlphaType : kP
remul_SkAlphaType); |
| 44 SkAutoPixmapStorage pmapA, pmapB; | 39 SkAutoPixmapStorage pmapA, pmapB; |
| 45 pmapA.alloc(info); | 40 pmapA.alloc(info); |
| 46 pmapB.alloc(info); | 41 pmapB.alloc(info); |
| 47 | 42 |
| 48 const int srcX = subsetA ? subsetA->x() : 0; | 43 const int srcX = subsetA ? subsetA->x() : 0; |
| 49 const int srcY = subsetA ? subsetA->y() : 0; | 44 const int srcY = subsetA ? subsetA->y() : 0; |
| 50 | 45 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 69 return surface->newImageSnapshot(); | 64 return surface->newImageSnapshot(); |
| 70 } | 65 } |
| 71 #if 0 | 66 #if 0 |
| 72 static SkImage* create_image_565() { | 67 static SkImage* create_image_565() { |
| 73 const SkImageInfo info = SkImageInfo::Make(20, 20, kRGB_565_SkColorType, kOp
aque_SkAlphaType); | 68 const SkImageInfo info = SkImageInfo::Make(20, 20, kRGB_565_SkColorType, kOp
aque_SkAlphaType); |
| 74 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); | 69 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); |
| 75 draw_image_test_pattern(surface->getCanvas()); | 70 draw_image_test_pattern(surface->getCanvas()); |
| 76 return surface->newImageSnapshot(); | 71 return surface->newImageSnapshot(); |
| 77 } | 72 } |
| 78 #endif | 73 #endif |
| 79 #if 0 | |
| 80 static SkImage* create_image_ct() { | 74 static SkImage* create_image_ct() { |
| 81 SkPMColor colors[] = { | 75 SkPMColor colors[] = { |
| 82 SkPreMultiplyARGB(0xFF, 0xFF, 0xFF, 0x00), | 76 SkPreMultiplyARGB(0xFF, 0xFF, 0xFF, 0x00), |
| 83 SkPreMultiplyARGB(0x80, 0x00, 0xA0, 0xFF), | 77 SkPreMultiplyARGB(0x80, 0x00, 0xA0, 0xFF), |
| 84 SkPreMultiplyARGB(0xFF, 0xBB, 0x00, 0xBB) | 78 SkPreMultiplyARGB(0xFF, 0xBB, 0x00, 0xBB) |
| 85 }; | 79 }; |
| 86 SkAutoTUnref<SkColorTable> colorTable(new SkColorTable(colors, SK_ARRAY_COUN
T(colors))); | 80 SkAutoTUnref<SkColorTable> colorTable(new SkColorTable(colors, SK_ARRAY_COUN
T(colors))); |
| 87 uint8_t data[] = { | 81 uint8_t data[] = { |
| 88 0, 0, 0, 0, 0, | 82 0, 0, 0, 0, 0, |
| 89 0, 1, 1, 1, 0, | 83 0, 1, 1, 1, 0, |
| 90 0, 1, 2, 1, 0, | 84 0, 1, 2, 1, 0, |
| 91 0, 1, 1, 1, 0, | 85 0, 1, 1, 1, 0, |
| 92 0, 0, 0, 0, 0 | 86 0, 0, 0, 0, 0 |
| 93 }; | 87 }; |
| 94 SkImageInfo info = SkImageInfo::Make(5, 5, kIndex_8_SkColorType, kPremul_SkA
lphaType); | 88 SkImageInfo info = SkImageInfo::Make(5, 5, kIndex_8_SkColorType, kPremul_SkA
lphaType); |
| 95 return SkImage::NewRasterCopy(info, data, 5, colorTable); | 89 return SkImage::NewRasterCopy(info, data, 5, colorTable); |
| 96 } | 90 } |
| 97 #endif | |
| 98 static SkData* create_image_data(SkImageInfo* info) { | 91 static SkData* create_image_data(SkImageInfo* info) { |
| 99 *info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType); | 92 *info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType); |
| 100 const size_t rowBytes = info->minRowBytes(); | 93 const size_t rowBytes = info->minRowBytes(); |
| 101 SkAutoTUnref<SkData> data(SkData::NewUninitialized(rowBytes * info->height()
)); | 94 SkAutoTUnref<SkData> data(SkData::NewUninitialized(rowBytes * info->height()
)); |
| 102 { | 95 { |
| 103 SkBitmap bm; | 96 SkBitmap bm; |
| 104 bm.installPixels(*info, data->writable_data(), rowBytes); | 97 bm.installPixels(*info, data->writable_data(), rowBytes); |
| 105 SkCanvas canvas(bm); | 98 SkCanvas canvas(bm); |
| 106 draw_image_test_pattern(&canvas); | 99 draw_image_test_pattern(&canvas); |
| 107 } | 100 } |
| (...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 SkImage::kRW_LegacyBitmapMode, | 644 SkImage::kRW_LegacyBitmapMode, |
| 652 }; | 645 }; |
| 653 for (auto& mode : modes) { | 646 for (auto& mode : modes) { |
| 654 SkAutoTUnref<SkImage> image(create_gpu_image(context)); | 647 SkAutoTUnref<SkImage> image(create_gpu_image(context)); |
| 655 test_legacy_bitmap(reporter, image, mode); | 648 test_legacy_bitmap(reporter, image, mode); |
| 656 } | 649 } |
| 657 } | 650 } |
| 658 #endif | 651 #endif |
| 659 | 652 |
| 660 static void test_peek(skiatest::Reporter* reporter, SkImage* image, bool expectP
eekSuccess) { | 653 static void test_peek(skiatest::Reporter* reporter, SkImage* image, bool expectP
eekSuccess) { |
| 661 SkImageInfo info; | 654 SkPixmap pm; |
| 662 size_t rowBytes; | 655 bool success = image->peekPixels(&pm); |
| 663 const void* addr = image->peekPixels(&info, &rowBytes); | |
| 664 bool success = SkToBool(addr); | |
| 665 REPORTER_ASSERT(reporter, expectPeekSuccess == success); | 656 REPORTER_ASSERT(reporter, expectPeekSuccess == success); |
| 666 if (success) { | 657 if (success) { |
| 658 const SkImageInfo& info = pm.info(); |
| 667 REPORTER_ASSERT(reporter, 20 == info.width()); | 659 REPORTER_ASSERT(reporter, 20 == info.width()); |
| 668 REPORTER_ASSERT(reporter, 20 == info.height()); | 660 REPORTER_ASSERT(reporter, 20 == info.height()); |
| 669 REPORTER_ASSERT(reporter, kN32_SkColorType == info.colorType()); | 661 REPORTER_ASSERT(reporter, kN32_SkColorType == info.colorType()); |
| 670 REPORTER_ASSERT(reporter, kPremul_SkAlphaType == info.alphaType() || | 662 REPORTER_ASSERT(reporter, kPremul_SkAlphaType == info.alphaType() || |
| 671 kOpaque_SkAlphaType == info.alphaType()); | 663 kOpaque_SkAlphaType == info.alphaType()); |
| 672 REPORTER_ASSERT(reporter, info.minRowBytes() <= rowBytes); | 664 REPORTER_ASSERT(reporter, info.minRowBytes() <= pm.rowBytes()); |
| 673 REPORTER_ASSERT(reporter, SkPreMultiplyColor(SK_ColorWHITE) == *(const S
kPMColor*)addr); | 665 REPORTER_ASSERT(reporter, SkPreMultiplyColor(SK_ColorWHITE) == *pm.addr3
2(0, 0)); |
| 674 } | 666 } |
| 675 } | 667 } |
| 676 DEF_TEST(ImagePeek, reporter) { | 668 DEF_TEST(ImagePeek, reporter) { |
| 677 SkAutoTUnref<SkImage> image(create_image()); | 669 SkAutoTUnref<SkImage> image(create_image()); |
| 678 test_peek(reporter, image, true); | 670 test_peek(reporter, image, true); |
| 679 | 671 |
| 680 image.reset(create_data_image()); | 672 image.reset(create_data_image()); |
| 681 test_peek(reporter, image, true); | 673 test_peek(reporter, image, true); |
| 682 | 674 |
| 683 RasterDataHolder dataHolder; | 675 RasterDataHolder dataHolder; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 if (pixelA != pixelB) { | 791 if (pixelA != pixelB) { |
| 800 ERRORF(reporter, "Expected image pixels to be the same. At %d,%d
0x%08x != 0x%08x", | 792 ERRORF(reporter, "Expected image pixels to be the same. At %d,%d
0x%08x != 0x%08x", |
| 801 x, y, pixelA, pixelB); | 793 x, y, pixelA, pixelB); |
| 802 return; | 794 return; |
| 803 } | 795 } |
| 804 } | 796 } |
| 805 } | 797 } |
| 806 } | 798 } |
| 807 | 799 |
| 808 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(NewTextureFromPixmap, reporter, context) { | 800 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(NewTextureFromPixmap, reporter, context) { |
| 809 for (auto create : {&create_image, | 801 for (auto create : {&create_image |
| 810 #if 0 // read pixels failing for non RT formats (565 not a RT on some desktop GL
s). | 802 #if 0 // read pixels failing for non RT formats (565 not a RT on some desktop GL
s). |
| 811 &create_image_565 | 803 , &create_image_565 |
| 812 #if 0 // peekPixels on color table images is currently broken. | 804 #endif |
| 813 , &create_image_ct | 805 , &create_image_ct |
| 814 #endif | |
| 815 #endif | |
| 816 }) { | 806 }) { |
| 817 SkAutoTUnref<SkImage> image((*create)()); | 807 SkAutoTUnref<SkImage> image((*create)()); |
| 818 if (!image) { | 808 if (!image) { |
| 819 ERRORF(reporter, "Could not create image"); | 809 ERRORF(reporter, "Could not create image"); |
| 820 return; | 810 return; |
| 821 } | 811 } |
| 822 | 812 |
| 823 SkPixmap pixmap; | 813 SkPixmap pixmap; |
| 824 if (!image->peekPixels(&pixmap)) { | 814 if (!image->peekPixels(&pixmap)) { |
| 825 ERRORF(reporter, "peek failed"); | 815 ERRORF(reporter, "peek failed"); |
| 826 } else { | 816 } else { |
| 827 SkAutoTUnref<SkImage> texImage(SkImage::NewTextureFromPixmap(context
, pixmap, | 817 SkAutoTUnref<SkImage> texImage(SkImage::NewTextureFromPixmap(context
, pixmap, |
| 828 SkBudge
ted::kNo)); | 818 SkBudge
ted::kNo)); |
| 829 if (!texImage) { | 819 if (!texImage) { |
| 830 ERRORF(reporter, "NewTextureFromPixmap failed."); | 820 ERRORF(reporter, "NewTextureFromPixmap failed."); |
| 831 } else { | 821 } else { |
| 832 check_images_same(reporter, image, texImage); | 822 check_images_same(reporter, image, texImage); |
| 833 } | 823 } |
| 834 } | 824 } |
| 835 } | 825 } |
| 836 } | 826 } |
| 837 | 827 |
| 838 #endif | 828 #endif |
| OLD | NEW |