Remove unit test that tests subsetting texture backed bitmaps.

BUG=skia:5531
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2143003006

Review-Url: https://codereview.chromium.org/2143003006
This commit is contained in:
bsalomon 2016-07-14 07:43:30 -07:00 committed by Commit bot
parent 67c6c8e229
commit 201364cb02

View File

@ -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