aboutsummaryrefslogtreecommitdiffhomepage
path: root/dm
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-07-17 11:31:31 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-17 17:09:08 +0000
commitce5ee602ed19b8493bf4dd1654d29486088bad63 (patch)
tree8b658834cd37a7ad0e400f6bb708f056956c024e /dm
parent1c8f73d9b55746b9139bfe734f7b016f0bdb0259 (diff)
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 <brianosman@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'dm')
-rw-r--r--dm/DM.cpp3
-rw-r--r--dm/DMSrcSink.cpp27
-rw-r--r--dm/DMSrcSink.h5
3 files changed, 22 insertions, 13 deletions
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<SkColorSpace> 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<SkColorSpace> colorSpace,
+ sk_gpu_test::GrContextFactory::ContextOverrides, int samples, bool diText,
+ SkColorType colorType, SkAlphaType alphaType, sk_sp<SkColorSpace> 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<SkColorSpace> fColorSpace;
bool fThreaded;
};