diff options
author | Brian Osman <brianosman@google.com> | 2017-01-05 10:41:39 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-05 18:07:55 +0000 |
commit | efcc41805b43347444b83c1705d3d60c8d0caa70 (patch) | |
tree | 705426a2eec1856364552d03c3648c319fe9e0bc /tests/ReadPixelsTest.cpp | |
parent | 08d57e6ae6510a7724119ab548485b4fcbd0a48d (diff) |
Explicitly fail read/writePixels in invalid color space scenarios
It's not well defined what to do when moving from a nullptr color space to
a tagged destination (drawing, reading, writing, etc...). In these
scenarios, at least, we can choose to disallow the operation (rather than
produce an unexpected or inconsistent result).
BUG=skia:
Change-Id: I033b23c6f2bb00664efc8fdab1b3f52053d77695
Reviewed-on: https://skia-review.googlesource.com/6600
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'tests/ReadPixelsTest.cpp')
-rw-r--r-- | tests/ReadPixelsTest.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp index 71cd8f5fc9..487152c42a 100644 --- a/tests/ReadPixelsTest.cpp +++ b/tests/ReadPixelsTest.cpp @@ -487,3 +487,40 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Texture, reporter, ctxInfo) { } } #endif + +#if SK_SUPPORT_GPU +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixelsColorSpaceVariants_Gpu, reporter, ctxInfo) { + // Create surfaces with and without an attached color space + sk_sp<SkColorSpace> srgbColorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); + SkImageInfo srgbInfo = SkImageInfo::MakeS32(DEV_W, DEV_H, kPremul_SkAlphaType); + SkImageInfo legacyInfo = srgbInfo.makeColorSpace(nullptr); + + sk_sp<SkSurface> srgbSurface = SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, + srgbInfo); + sk_sp<SkSurface> legacySurface = SkSurface::MakeRenderTarget(ctxInfo.grContext(), + SkBudgeted::kNo, legacyInfo); + SkCanvas* srgbCanvas = srgbSurface->getCanvas(); + SkCanvas* legacyCanvas = legacySurface->getCanvas(); + + struct { + SkCanvas* fCanvas; + const SkImageInfo& fBmpInfo; + bool fExpectSuccess; + } kTestConfigs[] ={ + // Both kinds of surface should be able to read into a legacy destination + { srgbCanvas, legacyInfo, true }, + { legacyCanvas, legacyInfo, true }, + // Tagged surface should be able to read into tagged destination + { srgbCanvas, srgbInfo, true }, + // Legacy surface shouldn't read into tagged destination + { legacyCanvas, srgbInfo, false }, + }; + + for (auto testConfig : kTestConfigs) { + SkBitmap bmp; + bmp.setInfo(testConfig.fBmpInfo); + bool result = testConfig.fCanvas->readPixels(&bmp, 0, 0); + REPORTER_ASSERT(reporter, result == testConfig.fExpectSuccess); + } +} +#endif |