diff options
author | Brian Osman <brianosman@google.com> | 2017-04-18 14:38:53 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-18 19:12:23 +0000 |
commit | 33910297e032b9af4336bc146c7fbb0f35918de9 (patch) | |
tree | 68feb4ba3cb430b51e48076fc044725c9cf88ab6 /tests | |
parent | 15bff50a62a70b6c18f7eb082208133b2d8e14f9 (diff) |
Fix some bugs with read/writePixels
- On both GL and Vulkan, we must draw if writing to an MSAA surface.
Otherwise we just write to the resolve target texture, which gets
overwritten on the next resolve.
- On Vulkan, we must draw if the target isn't a texture. (This check
was already present in onWritePixels).
- On Vulkan, when reading from an MSAA surface as a different config,
we don't need the readConfig to be renderable with MSAA - the temp
surface is always created non-MSAA.
- Added tests for these fixes, verified that they failed previously.
Bug: skia:
Change-Id: Ia2d5025d7a8f8de8630413453f83b58028dd41aa
Reviewed-on: https://skia-review.googlesource.com/13691
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/WritePixelsTest.cpp | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/tests/WritePixelsTest.cpp b/tests/WritePixelsTest.cpp index f5cdddccd0..e26e134b2d 100644 --- a/tests/WritePixelsTest.cpp +++ b/tests/WritePixelsTest.cpp @@ -14,6 +14,7 @@ #if SK_SUPPORT_GPU #include "GrContext.h" +#include "GrGpu.h" #endif #include <initializer_list> @@ -410,9 +411,45 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixels_Gpu, reporter, ctxInfo) { const SkImageInfo ii = SkImageInfo::MakeN32Premul(DEV_W, DEV_H); for (auto& origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { - sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, - ii, 0, origin, nullptr)); - test_write_pixels(reporter, surface.get()); + for (int sampleCnt : {0, 4}) { + sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), + SkBudgeted::kNo, ii, sampleCnt, + origin, nullptr)); + if (!surface && sampleCnt > 0) { + // Some platforms don't support MSAA + continue; + } + test_write_pixels(reporter, surface.get()); + } + } +} + +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixelsNonTexture_Gpu, reporter, ctxInfo) { + GrContext* context = ctxInfo.grContext(); + + for (auto& origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { + for (int sampleCnt : {0, 4}) { + GrBackendTextureDesc desc; + desc.fConfig = kSkia8888_GrPixelConfig; + desc.fWidth = DEV_W; + desc.fHeight = DEV_H; + desc.fFlags = kRenderTarget_GrBackendTextureFlag; + desc.fSampleCnt = sampleCnt; + desc.fOrigin = origin; + desc.fTextureHandle = context->getGpu()->createTestingOnlyBackendTexture( + nullptr, DEV_W, DEV_H, kSkia8888_GrPixelConfig, true); + sk_sp<SkSurface> surface(SkSurface::MakeFromBackendTextureAsRenderTarget(context, desc, + nullptr)); + if (!surface) { + context->getGpu()->deleteTestingOnlyBackendTexture(desc.fTextureHandle); + continue; + } + + test_write_pixels(reporter, surface.get()); + + surface.reset(); + context->getGpu()->deleteTestingOnlyBackendTexture(desc.fTextureHandle); + } } } #endif |