aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/WritePixelsTest.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-04-18 14:38:53 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-18 19:12:23 +0000
commit33910297e032b9af4336bc146c7fbb0f35918de9 (patch)
tree68feb4ba3cb430b51e48076fc044725c9cf88ab6 /tests/WritePixelsTest.cpp
parent15bff50a62a70b6c18f7eb082208133b2d8e14f9 (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/WritePixelsTest.cpp')
-rw-r--r--tests/WritePixelsTest.cpp43
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