Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 // This is a GPU-backend specific test.
      9 
     10 #include "Test.h"
     11 
     12 // MDB TODO: the early instantiation of the renderTargetContext's backing GrRenderTargetProxy
     13 // mixes this test up. Re-enable once backing GPU resources are distributed by MDB at flush time.
     14 #if 0
     15 
     16 #if SK_SUPPORT_GPU
     17 #include "GrTextureProxy.h"
     18 #include "GrRenderTargetContext.h"
     19 
     20 static const int kSize = 64;
     21 
     22 static sk_sp<GrRenderTargetContext> get_rtc(GrContext* ctx) {
     23     return ctx->makeDeferredRenderTargetContext(SkBackingFit::kExact,
     24                                                 kSize, kSize,
     25                                                 kRGBA_8888_GrPixelConfig, nullptr);
     26 }
     27 
     28 static void check_is_wrapped_status(skiatest::Reporter* reporter,
     29                                     GrRenderTargetContext* rtCtx,
     30                                     bool wrappedExpectation) {
     31     REPORTER_ASSERT(reporter, rtCtx->isWrapped_ForTesting() == wrappedExpectation);
     32 
     33     GrTextureProxy* tProxy = rtCtx->asTextureProxy();
     34     REPORTER_ASSERT(reporter, tProxy);
     35 
     36     REPORTER_ASSERT(reporter, tProxy->isWrapped_ForTesting() == wrappedExpectation);
     37 }
     38 
     39 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RenderTargetContextTest, reporter, ctxInfo) {
     40     GrContext* ctx = ctxInfo.grContext();
     41 
     42     // Calling instantiate on a GrRenderTargetContext's textureProxy also instantiates the
     43     // GrRenderTargetContext
     44     {
     45         sk_sp<GrRenderTargetContext> rtCtx(get_rtc(ctx));
     46 
     47         check_is_wrapped_status(reporter, rtCtx.get(), false);
     48 
     49         GrTextureProxy* tProxy = rtCtx->asTextureProxy();
     50         REPORTER_ASSERT(reporter, tProxy);
     51 
     52         REPORTER_ASSERT(reporter, tProxy->instantiate(ctx->resourceProvider()));
     53 
     54         check_is_wrapped_status(reporter, rtCtx.get(), true);
     55     }
     56 
     57     // readPixels switches a deferred rtCtx to wrapped
     58     {
     59         sk_sp<GrRenderTargetContext> rtCtx(get_rtc(ctx));
     60 
     61         check_is_wrapped_status(reporter, rtCtx.get(), false);
     62 
     63         SkImageInfo dstInfo = SkImageInfo::MakeN32Premul(kSize, kSize);
     64         SkAutoTMalloc<uint32_t> dstBuffer(kSize * kSize);
     65         static const size_t kRowBytes = sizeof(uint32_t) * kSize;
     66 
     67         bool result = rtCtx->readPixels(dstInfo, dstBuffer.get(), kRowBytes, 0, 0);
     68         REPORTER_ASSERT(reporter, result);
     69 
     70         check_is_wrapped_status(reporter, rtCtx.get(), true);
     71     }
     72 
     73     // TODO: in a future world we should be able to add a test that the majority of
     74     // GrRenderTargetContext calls do not force the instantiation of a deferred
     75     // GrRenderTargetContext
     76 }
     77 #endif
     78 #endif
     79