Index: src/gpu/effects/GrConfigConversionEffect.cpp |
diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp |
index ed532768db3da5b7857e3829ef2d1f0983444256..5294492e55dabda5184695716525404c5c919f30 100644 |
--- a/src/gpu/effects/GrConfigConversionEffect.cpp |
+++ b/src/gpu/effects/GrConfigConversionEffect.cpp |
@@ -154,16 +154,18 @@ void GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context |
PMConversion* upmToPMRule) { |
*pmToUPMRule = kNone_PMConversion; |
*upmToPMRule = kNone_PMConversion; |
- SkAutoTMalloc<uint32_t> data(256 * 256 * 3); |
+ static constexpr int kSize = 256; |
+ static constexpr GrPixelConfig kConfig = kRGBA_8888_GrPixelConfig; |
+ SkAutoTMalloc<uint32_t> data(kSize * kSize * 3); |
uint32_t* srcData = data.get(); |
- uint32_t* firstRead = data.get() + 256 * 256; |
- uint32_t* secondRead = data.get() + 2 * 256 * 256; |
+ uint32_t* firstRead = data.get() + kSize * kSize; |
+ uint32_t* secondRead = data.get() + 2 * kSize * kSize; |
// Fill with every possible premultiplied A, color channel value. There will be 256-y duplicate |
// values in row y. We set r,g, and b to the same value since they are handled identically. |
- for (int y = 0; y < 256; ++y) { |
- for (int x = 0; x < 256; ++x) { |
- uint8_t* color = reinterpret_cast<uint8_t*>(&srcData[256*y + x]); |
+ for (int y = 0; y < kSize; ++y) { |
+ for (int x = 0; x < kSize; ++x) { |
+ uint8_t* color = reinterpret_cast<uint8_t*>(&srcData[kSize*y + x]); |
color[3] = y; |
color[2] = SkTMin(x, y); |
color[1] = SkTMin(x, y); |
@@ -171,24 +173,17 @@ void GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context |
} |
} |
- GrSurfaceDesc desc; |
- desc.fFlags = kRenderTarget_GrSurfaceFlag; |
- desc.fWidth = 256; |
- desc.fHeight = 256; |
- desc.fConfig = kRGBA_8888_GrPixelConfig; |
- desc.fIsMipMapped = false; |
- |
- SkAutoTUnref<GrTexture> readTex(context->textureProvider()->createTexture( |
- desc, SkBudgeted::kYes, nullptr, 0)); |
- if (!readTex.get()) { |
- return; |
- } |
- SkAutoTUnref<GrTexture> tempTex(context->textureProvider()->createTexture( |
- desc, SkBudgeted::kYes, nullptr, 0)); |
- if (!tempTex.get()) { |
+ sk_sp<GrDrawContext> readDC(context->newDrawContext(SkBackingFit::kExact, kSize, kSize, |
+ kConfig)); |
+ sk_sp<GrDrawContext> tempDC(context->newDrawContext(SkBackingFit::kExact, kSize, kSize, |
+ kConfig)); |
+ if (!readDC || !tempDC) { |
return; |
} |
- desc.fFlags = kNone_GrSurfaceFlags; |
+ GrSurfaceDesc desc; |
+ desc.fWidth = kSize; |
+ desc.fHeight = kSize; |
+ desc.fConfig = kConfig; |
SkAutoTUnref<GrTexture> dataTex(context->textureProvider()->createTexture( |
desc, SkBudgeted::kYes, data, 0)); |
if (!dataTex.get()) { |
@@ -206,8 +201,8 @@ void GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context |
*pmToUPMRule = kConversionRules[i][0]; |
*upmToPMRule = kConversionRules[i][1]; |
- static const SkRect kDstRect = SkRect::MakeWH(SkIntToScalar(256), SkIntToScalar(256)); |
- static const SkRect kSrcRect = SkRect::MakeWH(SK_Scalar1, SK_Scalar1); |
+ static const SkRect kDstRect = SkRect::MakeIWH(kSize, kSize); |
+ static const SkRect kSrcRect = SkRect::MakeIWH(1, 1); |
// We do a PM->UPM draw from dataTex to readTex and read the data. Then we do a UPM->PM draw |
// from readTex to tempTex followed by a PM->UPM draw to readTex and finally read the data. |
// We then verify that two reads produced the same values. |
@@ -218,64 +213,33 @@ void GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context |
sk_sp<GrFragmentProcessor> pmToUPM1(new GrConfigConversionEffect( |
dataTex, GrSwizzle::RGBA(), *pmToUPMRule, SkMatrix::I())); |
sk_sp<GrFragmentProcessor> upmToPM(new GrConfigConversionEffect( |
- readTex, GrSwizzle::RGBA(), *upmToPMRule, SkMatrix::I())); |
+ readDC->asTexture().get(), GrSwizzle::RGBA(), *upmToPMRule, SkMatrix::I())); |
sk_sp<GrFragmentProcessor> pmToUPM2(new GrConfigConversionEffect( |
- tempTex, GrSwizzle::RGBA(), *pmToUPMRule, SkMatrix::I())); |
+ tempDC->asTexture().get(), GrSwizzle::RGBA(), *pmToUPMRule, SkMatrix::I())); |
paint1.addColorFragmentProcessor(std::move(pmToUPM1)); |
paint1.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); |
- sk_sp<GrDrawContext> readDrawContext( |
- context->drawContext(sk_ref_sp(readTex->asRenderTarget()))); |
- if (!readDrawContext) { |
- failed = true; |
- break; |
- } |
+ readDC->fillRectToRect(GrNoClip(), paint1, SkMatrix::I(), kDstRect, kSrcRect); |
- readDrawContext->fillRectToRect(GrNoClip(), |
- paint1, |
- SkMatrix::I(), |
- kDstRect, |
- kSrcRect); |
- |
- readTex->readPixels(0, 0, 256, 256, kRGBA_8888_GrPixelConfig, firstRead); |
+ readDC->asTexture()->readPixels(0, 0, kSize, kSize, kConfig, firstRead); |
paint2.addColorFragmentProcessor(std::move(upmToPM)); |
paint2.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); |
- sk_sp<GrDrawContext> tempDrawContext( |
- context->drawContext(sk_ref_sp(tempTex->asRenderTarget()))); |
- if (!tempDrawContext) { |
- failed = true; |
- break; |
- } |
- tempDrawContext->fillRectToRect(GrNoClip(), |
- paint2, |
- SkMatrix::I(), |
- kDstRect, |
- kSrcRect); |
+ tempDC->fillRectToRect(GrNoClip(), paint2, SkMatrix::I(), kDstRect, kSrcRect); |
paint3.addColorFragmentProcessor(std::move(pmToUPM2)); |
paint3.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); |
- readDrawContext = context->drawContext(sk_ref_sp(readTex->asRenderTarget())); |
- if (!readDrawContext) { |
- failed = true; |
- break; |
- } |
- |
- readDrawContext->fillRectToRect(GrNoClip(), |
- paint3, |
- SkMatrix::I(), |
- kDstRect, |
- kSrcRect); |
+ readDC->fillRectToRect(GrNoClip(), paint3, SkMatrix::I(), kDstRect, kSrcRect); |
- readTex->readPixels(0, 0, 256, 256, kRGBA_8888_GrPixelConfig, secondRead); |
+ readDC->asTexture()->readPixels(0, 0, kSize, kSize, kConfig, secondRead); |
failed = false; |
- for (int y = 0; y < 256 && !failed; ++y) { |
+ for (int y = 0; y < kSize && !failed; ++y) { |
for (int x = 0; x <= y; ++x) { |
- if (firstRead[256 * y + x] != secondRead[256 * y + x]) { |
+ if (firstRead[kSize * y + x] != secondRead[kSize * y + x]) { |
failed = true; |
break; |
} |