diff options
author | Robert Phillips <robertphillips@google.com> | 2016-12-15 09:23:05 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-15 15:07:39 +0000 |
commit | e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0b (patch) | |
tree | d290f1a9d5d5e828c7177d230f56356f9fc9bf2e /tests/CopySurfaceTest.cpp | |
parent | db8f44f497f2b67b2500bbfc7b11ce7a510c5e5c (diff) |
Add a deferred copy surface (take 3)
This CL forces all GrSurface copies to go through a GrSurfaceContext (rather than GrContext).
There is a bit of goofiness going on here until read/writePixels is also consolidated in GrSurfaceContext and a proxy-backed SkImage/SkSurface is added.
This is a reland of https://skia-review.googlesource.com/c/5773/ (Add a deferred copy surface)
Change-Id: Ib8fd96d0569274ef781366eb900ed8ee839ae9bd
Reviewed-on: https://skia-review.googlesource.com/6109
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'tests/CopySurfaceTest.cpp')
-rw-r--r-- | tests/CopySurfaceTest.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/tests/CopySurfaceTest.cpp b/tests/CopySurfaceTest.cpp index 053b456f57..951d27249f 100644 --- a/tests/CopySurfaceTest.cpp +++ b/tests/CopySurfaceTest.cpp @@ -10,6 +10,9 @@ #if SK_SUPPORT_GPU #include "GrContext.h" +#include "GrContextPriv.h" +#include "GrSurfaceContext.h" +#include "GrSurfaceProxy.h" #include "GrTexture.h" #include "GrTextureProvider.h" @@ -68,22 +71,29 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { dstDesc.fOrigin = dOrigin; dstDesc.fFlags = dFlags; - sk_sp<GrTexture> src( - context->textureProvider()->createTexture(srcDesc, SkBudgeted::kNo, - srcPixels.get(), - kRowBytes)); - sk_sp<GrTexture> dst( - context->textureProvider()->createTexture(dstDesc, SkBudgeted::kNo, - dstPixels.get(), - kRowBytes)); + sk_sp<GrSurfaceProxy> src(GrSurfaceProxy::MakeDeferred( + *context->caps(), + context->textureProvider(), + srcDesc, SkBudgeted::kNo, + srcPixels.get(), + kRowBytes)); + + sk_sp<GrSurfaceProxy> dst(GrSurfaceProxy::MakeDeferred( + *context->caps(), + context->textureProvider(), + dstDesc, SkBudgeted::kNo, + dstPixels.get(), + kRowBytes)); if (!src || !dst) { ERRORF(reporter, "Could not create surfaces for copy surface test."); continue; } - bool result - = context->copySurface(dst.get(), src.get(), srcRect, dstPoint); + sk_sp<GrSurfaceContext> sContext = + context->contextPriv().makeWrappedSurfaceContext(dst); + + bool result = sContext->copy(src.get(), srcRect, dstPoint); bool expectedResult = true; SkIPoint dstOffset = { dstPoint.fX - srcRect.fLeft, @@ -120,9 +130,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { continue; } + GrSurface* dstSurf = dst->instantiate(context->textureProvider()); + sk_memset32(read.get(), 0, kW * kH); - if (!dst->readPixels(0, 0, kW, kH, baseDesc.fConfig, read.get(), - kRowBytes)) { + if (!dstSurf->readPixels(0, 0, kW, kH, baseDesc.fConfig, read.get(), + kRowBytes)) { ERRORF(reporter, "Error calling readPixels"); continue; } |