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