| Index: tests/ReadPixelsTest.cpp
|
| diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp
|
| index 1123d893dc2893e4ed6d03bd79c2bd68278ce032..6b6778d1ac39fdd8bb9075315d2afc575d224986 100644
|
| --- a/tests/ReadPixelsTest.cpp
|
| +++ b/tests/ReadPixelsTest.cpp
|
| @@ -15,7 +15,6 @@
|
| #if SK_SUPPORT_GPU
|
| #include "GrContext.h"
|
| #include "SkGr.h"
|
| -#include "SkGrPriv.h"
|
| #endif
|
|
|
| #include <initializer_list>
|
| @@ -460,171 +459,3 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Texture, reporter, ctxInfo) {
|
| }
|
| }
|
| #endif
|
| -/////////////////////
|
| -#if SK_SUPPORT_GPU
|
| -
|
| -// make_ringed_bitmap was lifted from gm/bleed.cpp, as that GM was what showed the following
|
| -// bug when a change was made to SkImage_Raster.cpp. It is possible that other test bitmaps
|
| -// would also tickle https://bug.skia.org/4351 but this one is know to do it, so I've pasted the code
|
| -// here so we have a dependable repro case.
|
| -
|
| -// Create a black&white checked texture with 2 1-pixel rings
|
| -// around the outside edge. The inner ring is red and the outer ring is blue.
|
| -static void make_ringed_bitmap(SkBitmap* result, int width, int height) {
|
| - SkASSERT(0 == width % 2 && 0 == height % 2);
|
| -
|
| - static const SkPMColor kRed = SkPreMultiplyColor(SK_ColorRED);
|
| - static const SkPMColor kBlue = SkPreMultiplyColor(SK_ColorBLUE);
|
| - static const SkPMColor kBlack = SkPreMultiplyColor(SK_ColorBLACK);
|
| - static const SkPMColor kWhite = SkPreMultiplyColor(SK_ColorWHITE);
|
| -
|
| - result->allocN32Pixels(width, height, true);
|
| -
|
| - SkPMColor* scanline = result->getAddr32(0, 0);
|
| - for (int x = 0; x < width; ++x) {
|
| - scanline[x] = kBlue;
|
| - }
|
| - scanline = result->getAddr32(0, 1);
|
| - scanline[0] = kBlue;
|
| - for (int x = 1; x < width - 1; ++x) {
|
| - scanline[x] = kRed;
|
| - }
|
| - scanline[width-1] = kBlue;
|
| -
|
| - for (int y = 2; y < height/2; ++y) {
|
| - scanline = result->getAddr32(0, y);
|
| - scanline[0] = kBlue;
|
| - scanline[1] = kRed;
|
| - for (int x = 2; x < width/2; ++x) {
|
| - scanline[x] = kBlack;
|
| - }
|
| - for (int x = width/2; x < width-2; ++x) {
|
| - scanline[x] = kWhite;
|
| - }
|
| - scanline[width-2] = kRed;
|
| - scanline[width-1] = kBlue;
|
| - }
|
| -
|
| - for (int y = height/2; y < height-2; ++y) {
|
| - scanline = result->getAddr32(0, y);
|
| - scanline[0] = kBlue;
|
| - scanline[1] = kRed;
|
| - for (int x = 2; x < width/2; ++x) {
|
| - scanline[x] = kWhite;
|
| - }
|
| - for (int x = width/2; x < width-2; ++x) {
|
| - scanline[x] = kBlack;
|
| - }
|
| - scanline[width-2] = kRed;
|
| - scanline[width-1] = kBlue;
|
| - }
|
| -
|
| - scanline = result->getAddr32(0, height-2);
|
| - scanline[0] = kBlue;
|
| - for (int x = 1; x < width - 1; ++x) {
|
| - scanline[x] = kRed;
|
| - }
|
| - scanline[width-1] = kBlue;
|
| -
|
| - scanline = result->getAddr32(0, height-1);
|
| - for (int x = 0; x < width; ++x) {
|
| - scanline[x] = kBlue;
|
| - }
|
| - result->setImmutable();
|
| -}
|
| -
|
| -static void compare_textures(skiatest::Reporter* reporter, GrTexture* txa, GrTexture* txb) {
|
| - REPORTER_ASSERT(reporter, txa->width() == 2);
|
| - REPORTER_ASSERT(reporter, txa->height() == 2);
|
| - REPORTER_ASSERT(reporter, txb->width() == 2);
|
| - REPORTER_ASSERT(reporter, txb->height() == 2);
|
| - REPORTER_ASSERT(reporter, txa->config() == txb->config());
|
| -
|
| - SkPMColor pixelsA[4], pixelsB[4];
|
| - REPORTER_ASSERT(reporter, txa->readPixels(0, 0, 2, 2, txa->config(), pixelsA));
|
| - REPORTER_ASSERT(reporter, txb->readPixels(0, 0, 2, 2, txa->config(), pixelsB));
|
| - REPORTER_ASSERT(reporter, 0 == memcmp(pixelsA, pixelsB, sizeof(pixelsA)));
|
| -}
|
| -
|
| -static SkData* draw_into_surface(SkSurface* surf, const SkBitmap& bm, SkFilterQuality quality) {
|
| - SkCanvas* canvas = surf->getCanvas();
|
| - canvas->clear(SK_ColorBLUE);
|
| -
|
| - SkPaint paint;
|
| - paint.setFilterQuality(quality);
|
| -
|
| - canvas->translate(40, 100);
|
| - canvas->rotate(30);
|
| - canvas->scale(20, 30);
|
| - canvas->translate(-SkScalarHalf(bm.width()), -SkScalarHalf(bm.height()));
|
| - canvas->drawBitmap(bm, 0, 0, &paint);
|
| -
|
| - return surf->makeImageSnapshot()->encode();
|
| -}
|
| -
|
| -#include "SkStream.h"
|
| -static void dump_to_file(const char name[], SkData* data) {
|
| - SkFILEWStream file(name);
|
| - file.write(data->data(), data->size());
|
| -}
|
| -
|
| -/*
|
| - * Test two different ways to turn a subset of a bitmap into a texture
|
| - * - subset and then upload to a texture
|
| - * - upload to a texture and then subset
|
| - *
|
| - * These two techniques result in the same pixels (ala readPixels)
|
| - * but when we draw them (rotated+scaled) we don't always get the same results.
|
| - *
|
| - * https://bug.skia.org/4351
|
| - */
|
| -DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Subset_Gpu, reporter, ctxInfo) {
|
| - SkBitmap bitmap;
|
| - make_ringed_bitmap(&bitmap, 6, 6);
|
| - const SkIRect subset = SkIRect::MakeLTRB(2, 2, 4, 4);
|
| -
|
| - // make two textures...
|
| - SkBitmap bm_subset, tx_subset;
|
| -
|
| - // ... one from a texture-subset
|
| - SkAutoTUnref<GrTexture> fullTx(GrRefCachedBitmapTexture(ctxInfo.grContext(), bitmap,
|
| - GrTextureParams::ClampNoFilter(),
|
| - SkSourceGammaTreatment::kRespect));
|
| - SkBitmap tx_full;
|
| - GrWrapTextureInBitmap(fullTx, bitmap.width(), bitmap.height(), true, &tx_full);
|
| - tx_full.extractSubset(&tx_subset, subset);
|
| -
|
| - // ... one from a bitmap-subset
|
| - SkBitmap tmp_subset;
|
| - bitmap.extractSubset(&tmp_subset, subset);
|
| - SkAutoTUnref<GrTexture> subsetTx(GrRefCachedBitmapTexture(ctxInfo.grContext(), tmp_subset,
|
| - GrTextureParams::ClampNoFilter(),
|
| - SkSourceGammaTreatment::kRespect));
|
| - GrWrapTextureInBitmap(subsetTx, tmp_subset.width(), tmp_subset.height(), true, &bm_subset);
|
| -
|
| - // did we get the same subset?
|
| - compare_textures(reporter, bm_subset.getTexture(), tx_subset.getTexture());
|
| -
|
| - // do they draw the same?
|
| - const SkImageInfo info = SkImageInfo::MakeN32Premul(128, 128);
|
| - auto surfA(SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info));
|
| - auto surfB(SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info));
|
| -
|
| - if (false) {
|
| - //
|
| - // BUG: depending on the driver, if we calls this with various quality settings, it
|
| - // may fail.
|
| - //
|
| - SkFilterQuality quality = kLow_SkFilterQuality;
|
| -
|
| - SkAutoTUnref<SkData> dataA(draw_into_surface(surfA.get(), bm_subset, quality));
|
| - SkAutoTUnref<SkData> dataB(draw_into_surface(surfB.get(), tx_subset, quality));
|
| -
|
| - REPORTER_ASSERT(reporter, dataA->equals(dataB));
|
| - if (false) {
|
| - dump_to_file("test_image_A.png", dataA);
|
| - dump_to_file("test_image_B.png", dataB);
|
| - }
|
| - }
|
| -}
|
| -#endif
|
|
|