From ce5ee602ed19b8493bf4dd1654d29486088bad63 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Mon, 17 Jul 2017 11:31:31 -0400 Subject: Add support for GL 565 and 4444 configs to test tools Change-Id: I395e3387df44cf5370fef6ab73db73228225622f Reviewed-on: https://skia-review.googlesource.com/23946 Reviewed-by: Brian Osman Commit-Queue: Brian Salomon --- dm/DM.cpp | 3 ++- dm/DMSrcSink.cpp | 27 +++++++++++++++++---------- dm/DMSrcSink.h | 5 +++-- 3 files changed, 22 insertions(+), 13 deletions(-) (limited to 'dm') diff --git a/dm/DM.cpp b/dm/DM.cpp index 3ddc8272ce..b701bcc8cf 100644 --- a/dm/DM.cpp +++ b/dm/DM.cpp @@ -851,7 +851,8 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi } return new GPUSink(contextType, contextOverrides, gpuConfig->getSamples(), gpuConfig->getUseDIText(), gpuConfig->getColorType(), - sk_ref_sp(gpuConfig->getColorSpace()), FLAGS_gpu_threading); + gpuConfig->getAlphaType(), sk_ref_sp(gpuConfig->getColorSpace()), + FLAGS_gpu_threading); } } #endif diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 6c441d9e11..ad9752d406 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -1300,15 +1300,17 @@ GPUSink::GPUSink(GrContextFactory::ContextType ct, int samples, bool diText, SkColorType colorType, + SkAlphaType alphaType, sk_sp colorSpace, bool threaded) - : fContextType(ct) - , fContextOverrides(overrides) - , fSampleCount(samples) - , fUseDIText(diText) - , fColorType(colorType) - , fColorSpace(std::move(colorSpace)) - , fThreaded(threaded) {} + : fContextType(ct) + , fContextOverrides(overrides) + , fSampleCount(samples) + , fUseDIText(diText) + , fColorType(colorType) + , fAlphaType(alphaType) + , fColorSpace(std::move(colorSpace)) + , fThreaded(threaded) {} DEFINE_bool(drawOpClip, false, "Clip each GrDrawOp to its device bounds for testing."); @@ -1319,9 +1321,8 @@ Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) co GrContextFactory factory(grOptions); const SkISize size = src.size(); - const SkImageInfo info = - SkImageInfo::Make(size.width(), size.height(), fColorType, - kPremul_SkAlphaType, fColorSpace); + SkImageInfo info = + SkImageInfo::Make(size.width(), size.height(), fColorType, fAlphaType, fColorSpace); #if SK_SUPPORT_GPU GrContext* context = factory.getContextInfo(fContextType, fContextOverrides).grContext(); const int maxDimension = context->caps()->maxTextureSize(); @@ -1348,6 +1349,12 @@ Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) co canvas->getGrContext()->dumpCacheStats(log); canvas->getGrContext()->dumpGpuStats(log); } + if (info.colorType() == kRGB_565_SkColorType || info.colorType() == kARGB_4444_SkColorType) { + // We don't currently support readbacks into these formats on the GPU backend. Convert to + // 32 bit. + info = SkImageInfo::Make(size.width(), size.height(), kRGBA_8888_SkColorType, + kPremul_SkAlphaType, fColorSpace); + } dst->allocPixels(info); canvas->readPixels(*dst, 0, 0); if (FLAGS_abandonGpuContext) { diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h index 553eac03c2..f2e4ac29f7 100644 --- a/dm/DMSrcSink.h +++ b/dm/DMSrcSink.h @@ -305,8 +305,8 @@ public: class GPUSink : public Sink { public: GPUSink(sk_gpu_test::GrContextFactory::ContextType, - sk_gpu_test::GrContextFactory::ContextOverrides, - int samples, bool diText, SkColorType colorType, sk_sp colorSpace, + sk_gpu_test::GrContextFactory::ContextOverrides, int samples, bool diText, + SkColorType colorType, SkAlphaType alphaType, sk_sp colorSpace, bool threaded); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; @@ -323,6 +323,7 @@ private: int fSampleCount; bool fUseDIText; SkColorType fColorType; + SkAlphaType fAlphaType; sk_sp fColorSpace; bool fThreaded; }; -- cgit v1.2.3