From eaa862569dc91d55fc79d057df6e69b139e46888 Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Tue, 8 Nov 2016 13:49:39 +0000 Subject: Revert "Revert "Add GrRenderTargetContext instantiate & asTextureProxy"" This reverts commit 7d7d7d19462b75f5470492dc4820a02c1eba4af2. Reason for revert: Reverting this to see if it really was crashing on SVGs or if that was cross talk. Original change's description: > Revert "Add GrRenderTargetContext instantiate & asTextureProxy" > > This reverts commit 9113edfff89e657dabc0ba095c54f7720550196c. > > Reason for revert: Looks to be causing EXCEPTION_ACCESS_VIOLATION: > > https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Win-MSVC-NUC-GPU-IntelIris6100-x86_64-Debug/builds/121/steps/test_skia%20on%20Windows/logs/stdio > https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Win-MSVC-GCE-CPU-AVX2-x86-Debug/builds/2384/steps/test_skia%20on%20Windows-2008ServerR2-SP1/logs/stdio > https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Win-MSVC-ShuttleC-GPU-iHD530-x86_64-Debug/builds/785/steps/test_skia%20on%20Windows/logs/stdio > > Original change's description: > > Add GrRenderTargetContext instantiate & asTextureProxy > > > > This CL also centralizes the instantiation code in GrSurfaceProxy and adds a test. > > > > GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4494 > > > > Change-Id: I0081d9a216dc0af293179f23bcb88acf6a822324 > > Reviewed-on: https://skia-review.googlesource.com/4494 > > Reviewed-by: Brian Salomon > > Commit-Queue: Robert Phillips > > > > TBR=bsalomon@google.com,robertphillips@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I225ce7867ebd445067e5ea55ebbfd587f7fe782a > Reviewed-on: https://skia-review.googlesource.com/4528 > Commit-Queue: Leon Scroggins > Reviewed-by: Leon Scroggins > TBR=bsalomon@google.com,robertphillips@google.com,scroggo@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Ifc3b9ac343009a3808f5f47500eef50df438e3d9 Reviewed-on: https://skia-review.googlesource.com/4537 Commit-Queue: Robert Phillips Reviewed-by: Robert Phillips --- tests/RenderTargetContextTest.cpp | 100 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 tests/RenderTargetContextTest.cpp (limited to 'tests/RenderTargetContextTest.cpp') diff --git a/tests/RenderTargetContextTest.cpp b/tests/RenderTargetContextTest.cpp new file mode 100644 index 0000000000..9a4b8747da --- /dev/null +++ b/tests/RenderTargetContextTest.cpp @@ -0,0 +1,100 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +// This is a GPU-backend specific test. + +#include "Test.h" + +#if SK_SUPPORT_GPU +#include "GrTextureProxy.h" +#include "GrRenderTargetContext.h" + +static const int kSize = 64; + +static sk_sp get_rtc(GrContext* ctx, bool wrapped) { + + if (wrapped) { + return ctx->makeRenderTargetContext(SkBackingFit::kExact, + kSize, kSize, + kRGBA_8888_GrPixelConfig, nullptr); + } else { + return ctx->makeDeferredRenderTargetContext(SkBackingFit::kExact, + kSize, kSize, + kRGBA_8888_GrPixelConfig, nullptr); + } +} + +static void check_is_wrapped_status(skiatest::Reporter* reporter, + GrRenderTargetContext* rtCtx, + bool wrappedExpectation) { + REPORTER_ASSERT(reporter, rtCtx->isWrapped_ForTesting() == wrappedExpectation); + + GrTextureProxy* tProxy = rtCtx->asDeferredTexture(); + REPORTER_ASSERT(reporter, tProxy); + + REPORTER_ASSERT(reporter, tProxy->isWrapped_ForTesting() == wrappedExpectation); +} + +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RenderTargetContextTest, reporter, ctxInfo) { + GrContext* ctx = ctxInfo.grContext(); + + // A wrapped rtCtx's textureProxy is also wrapped + { + sk_sp rtCtx(get_rtc(ctx, true)); + check_is_wrapped_status(reporter, rtCtx.get(), true); + } + + // A deferred rtCtx's textureProxy is also deferred and GrRenderTargetContext::instantiate() + // swaps both from deferred to wrapped + { + sk_sp rtCtx(get_rtc(ctx, false)); + + check_is_wrapped_status(reporter, rtCtx.get(), false); + + GrRenderTarget* rt = rtCtx->instantiate(); + REPORTER_ASSERT(reporter, rt); + + check_is_wrapped_status(reporter, rtCtx.get(), true); + } + + // Calling instantiate on a GrRenderTargetContext's textureProxy also instantiates the + // GrRenderTargetContext + { + sk_sp rtCtx(get_rtc(ctx, false)); + + check_is_wrapped_status(reporter, rtCtx.get(), false); + + GrTextureProxy* tProxy = rtCtx->asDeferredTexture(); + REPORTER_ASSERT(reporter, tProxy); + + GrTexture* tex = tProxy->instantiate(ctx->textureProvider()); + REPORTER_ASSERT(reporter, tex); + + check_is_wrapped_status(reporter, rtCtx.get(), true); + } + + // readPixels switches a deferred rtCtx to wrapped + { + sk_sp rtCtx(get_rtc(ctx, false)); + + check_is_wrapped_status(reporter, rtCtx.get(), false); + + SkImageInfo dstInfo = SkImageInfo::MakeN32Premul(kSize, kSize); + SkAutoTMalloc dstBuffer(kSize * kSize); + static const size_t kRowBytes = sizeof(uint32_t) * kSize; + + bool result = rtCtx->readPixels(dstInfo, dstBuffer.get(), kRowBytes, 0, 0); + REPORTER_ASSERT(reporter, result); + + check_is_wrapped_status(reporter, rtCtx.get(), true); + } + + // TODO: in a future world we should be able to add a test that the majority of + // GrRenderTargetContext calls do not force the instantiation of a deferred + // GrRenderTargetContext +} +#endif -- cgit v1.2.3