blob: e907f3925d008838b0234a9bdf730c7e5fcc4d63 [file] [log] [blame]
Robert Phillipseb35f4d2017-03-21 07:56:47 -04001/*
2 * Copyright 2017 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#include "GrPreFlushResourceProvider.h"
9
10#include "GrDrawingManager.h"
11#include "GrSurfaceProxy.h"
12
13sk_sp<GrRenderTargetContext> GrPreFlushResourceProvider::makeRenderTargetContext(
14 const GrSurfaceDesc& desc,
15 sk_sp<SkColorSpace> colorSpace,
16 const SkSurfaceProps* props) {
17 GrSurfaceDesc tmpDesc = desc;
18 tmpDesc.fFlags |= kRenderTarget_GrSurfaceFlag;
19
20 // Because this is being allocated at the start of a flush we must ensure the proxy
21 // will, when instantiated, have no pending IO.
22 // TODO: fold the kNoPendingIO_Flag into GrSurfaceFlags?
23 sk_sp<GrSurfaceProxy> proxy = GrSurfaceProxy::MakeDeferred(
24 fDrawingMgr->getContext()->resourceProvider(),
25 tmpDesc,
26 SkBackingFit::kExact,
27 SkBudgeted::kYes,
28 GrResourceProvider::kNoPendingIO_Flag);
29 if (!proxy->asRenderTargetProxy()) {
30 return nullptr;
31 }
32
33 sk_sp<GrRenderTargetOpList> opList(new GrRenderTargetOpList(
34 proxy->asRenderTargetProxy(),
35 fDrawingMgr->fContext->getGpu(),
36 fDrawingMgr->fContext->resourceProvider(),
37 fDrawingMgr->fContext->getAuditTrail(),
38 fDrawingMgr->fOptionsForOpLists));
39 proxy->setLastOpList(opList.get());
40
41 return fDrawingMgr->makeRenderTargetContext(std::move(proxy),
42 std::move(colorSpace),
43 props);
44}
45
46// TODO: we only need this entry point as long as we have to pre-allocate the atlas.
47// Remove it ASAP.
48sk_sp<GrRenderTargetContext> GrPreFlushResourceProvider::makeRenderTargetContext(
49 sk_sp<GrSurfaceProxy> proxy,
50 sk_sp<SkColorSpace> colorSpace,
51 const SkSurfaceProps* props) {
52
53 sk_sp<GrRenderTargetOpList> opList(new GrRenderTargetOpList(
54 proxy->asRenderTargetProxy(),
55 fDrawingMgr->fContext->getGpu(),
56 fDrawingMgr->fContext->resourceProvider(),
57 fDrawingMgr->fContext->getAuditTrail(),
58 fDrawingMgr->fOptionsForOpLists));
59 proxy->setLastOpList(opList.get());
60
61 return fDrawingMgr->makeRenderTargetContext(std::move(proxy),
62 std::move(colorSpace),
63 props);
64}
65