diff options
author | Brian Salomon <bsalomon@google.com> | 2018-03-08 10:13:17 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-08 15:34:41 +0000 |
commit | f7778979343998e4c10df8ebe43f02e60c700f0d (patch) | |
tree | d87e36994c7c74c1df49002bcb7d7b76b262c28a /tests | |
parent | c7c2baf0cf264b9d0d9c0f67cfb827a7e4a5e32c (diff) |
Delazify wrapped backend textures/render target proxies
These methods will fail on DDL contexts.
This is in preparation for removing the ability to specify origin for lazy proxies.
Change-Id: Iadcedfd4fce8ea2590729c974128e5c58cec38a8
Reviewed-on: https://skia-review.googlesource.com/112802
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/DeferredDisplayListTest.cpp | 163 | ||||
-rw-r--r-- | tests/ProxyTest.cpp | 14 |
2 files changed, 47 insertions, 130 deletions
diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp index 4b425aed7e..b0c80c32ef 100644 --- a/tests/DeferredDisplayListTest.cpp +++ b/tests/DeferredDisplayListTest.cpp @@ -358,143 +358,50 @@ enum class DDLStage { kMakeImage, kDrawImage, kDetach, kDrawDDL }; DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLWrapBackendTest, reporter, ctxInfo) { GrContext* context = ctxInfo.grContext(); GrGpu* gpu = context->contextPriv().getGpu(); - for (auto lastStage : { DDLStage::kMakeImage, DDLStage::kDrawImage, - DDLStage::kDetach, DDLStage::kDrawDDL } ) { - for (auto earlyImageReset : { false , true } ) { - GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture( - nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo); - if (!backendTex.isValid()) { - continue; - } - - SurfaceParameters params; - - sk_sp<SkSurface> s = params.make(context); - if (!s) { - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } - - SkSurfaceCharacterization c; - SkAssertResult(s->characterize(&c)); - - std::unique_ptr<SkDeferredDisplayListRecorder> recorder( - new SkDeferredDisplayListRecorder(c)); - - SkCanvas* canvas = recorder->getCanvas(); - if (!canvas) { - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } - - GrContext* deferredContext = canvas->getGrContext(); - if (!deferredContext) { - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } - - sk_sp<SkImage> image = SkImage::MakeFromAdoptedTexture(deferredContext, backendTex, - kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - kPremul_SkAlphaType, nullptr); - // Adopted Textures are not supported in DDL - REPORTER_ASSERT(reporter, !image); - - TextureReleaseChecker releaseChecker; - image = SkImage::MakeFromTexture(deferredContext, backendTex, - kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - kPremul_SkAlphaType, nullptr, - TextureReleaseChecker::Release, &releaseChecker); - - REPORTER_ASSERT(reporter, image); - if (!image) { - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } + GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture( + nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo); + if (!backendTex.isValid()) { + return; + } - if (DDLStage::kMakeImage == lastStage) { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - image.reset(); - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - recorder.reset(); - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } + SurfaceParameters params; - canvas->drawImage(image.get(), 0, 0); + sk_sp<SkSurface> s = params.make(context); + if (!s) { + gpu->deleteTestingOnlyBackendTexture(&backendTex); + return; + } - if (earlyImageReset) { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - image.reset(); - // Ref should still be held by DDL recorder since we did the draw - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - } + SkSurfaceCharacterization c; + SkAssertResult(s->characterize(&c)); - if (DDLStage::kDrawImage == lastStage) { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - recorder.reset(); - if (earlyImageReset) { - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } else { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - image.reset(); - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } + std::unique_ptr<SkDeferredDisplayListRecorder> recorder(new SkDeferredDisplayListRecorder(c)); - std::unique_ptr<SkDeferredDisplayList> ddl = recorder->detach(); - if (DDLStage::kDetach == lastStage) { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - recorder.reset(); -#ifndef SK_RASTER_RECORDER_IMPLEMENTATION - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); -#endif - ddl.reset(); - if (earlyImageReset) { - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } else { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - image.reset(); - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } - gpu->deleteTestingOnlyBackendTexture(&backendTex); - continue; - } + SkCanvas* canvas = recorder->getCanvas(); + if (!canvas) { + gpu->deleteTestingOnlyBackendTexture(&backendTex); + return; + } - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + GrContext* deferredContext = canvas->getGrContext(); + if (!deferredContext) { + gpu->deleteTestingOnlyBackendTexture(&backendTex); + return; + } - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - recorder.reset(); -#ifndef SK_RASTER_RECORDER_IMPLEMENTATION - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); -#endif - ddl.reset(); -#ifndef SK_RASTER_RECORDER_IMPLEMENTATION - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); -#endif + // Wrapped Backend Textures are not supported in DDL + sk_sp<SkImage> image = + SkImage::MakeFromAdoptedTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin, + kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr); + REPORTER_ASSERT(reporter, !image); - // Force all draws to flush and sync by calling a read pixels - SkImageInfo imageInfo = SkImageInfo::Make(kSize, kSize, kRGBA_8888_SkColorType, - kPremul_SkAlphaType); - SkBitmap bitmap; - bitmap.allocPixels(imageInfo); - s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); - - if (earlyImageReset) { - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } else { - REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); - image.reset(); - REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); - } + TextureReleaseChecker releaseChecker; + image = SkImage::MakeFromTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin, + kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr, + TextureReleaseChecker::Release, &releaseChecker); + REPORTER_ASSERT(reporter, !image); - gpu->deleteTestingOnlyBackendTexture(&backendTex); - } - } + gpu->deleteTestingOnlyBackendTexture(&backendTex); } diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp index 9d52281763..8f5eb13639 100644 --- a/tests/ProxyTest.cpp +++ b/tests/ProxyTest.cpp @@ -48,12 +48,17 @@ static void check_rendertarget(skiatest::Reporter* reporter, REPORTER_ASSERT(reporter, rtProxy->numStencilSamples() == numSamples); GrSurfaceProxy::UniqueID idBefore = rtProxy->uniqueID(); + bool preinstantiated = rtProxy->priv().isInstantiated(); REPORTER_ASSERT(reporter, rtProxy->instantiate(provider)); GrRenderTarget* rt = rtProxy->priv().peekRenderTarget(); REPORTER_ASSERT(reporter, rtProxy->uniqueID() == idBefore); // Deferred resources should always have a different ID from their instantiated rendertarget - REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt()); + if (preinstantiated) { + REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() == rt->uniqueID().asUInt()); + } else { + REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt()); + } if (SkBackingFit::kExact == fit) { REPORTER_ASSERT(reporter, rt->width() == rtProxy->width()); @@ -76,12 +81,17 @@ static void check_texture(skiatest::Reporter* reporter, SkBackingFit fit) { GrSurfaceProxy::UniqueID idBefore = texProxy->uniqueID(); + bool preinstantiated = texProxy->priv().isInstantiated(); REPORTER_ASSERT(reporter, texProxy->instantiate(provider)); GrTexture* tex = texProxy->priv().peekTexture(); REPORTER_ASSERT(reporter, texProxy->uniqueID() == idBefore); // Deferred resources should always have a different ID from their instantiated texture - REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt()); + if (preinstantiated) { + REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() == tex->uniqueID().asUInt()); + } else { + REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt()); + } if (SkBackingFit::kExact == fit) { REPORTER_ASSERT(reporter, tex->width() == texProxy->width()); |